Skip to content
This repository has been archived by the owner on Feb 8, 2023. It is now read-only.


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

ILP Plugin BTP

One plugin to rule them all

NPM Package CircleCI JavaScript Style Guide Known Vulnerabilities Greenkeeper badge

Used right out of the box, this plugin is capable of representing a data channel with no money involved. It will send BTP messages with no knowledge of the data within, so it can be used for ILP packets. The sendMoney function is a no-op, because there is no system involved handling money.

The main use of this plugin, however, is as a building block for plugins that do have an underlying ledger. In this way, it's the successor of ilp-plugin-payment-channel-framework

Plugins that sub-class the AbstractBtpPlugin should override sendMoney and _handleMoney at least.

Use as a Data Channel for ILP

const server = new BtpPlugin({
  listener: {
    port: 9000,
    secret: 'shh_its_a_secret'

await server.connect()

const client = new BtpPlugin({
  server: 'btp+ws://:shh_its_a_secret@localhost:9000'

await client.connect()


await client.sendData(IlpPacket.serializeIlpPrepare({
  // ...

Use as a Base Class for a New Plugin

Two functions must be defined in order for the plugin to handle money.

  • sendMoney (amount: string) -> Promise<null>: sends amount of units to the peer. This should be done via a BTP TRANSFER call.
  • _handleMoney (from: string, btpPacket: BtpPacket) -> Promise<Array<BtpSubProtocol>>: This function is called on an incoming BTP TRANSFER.

BtpSubProtocol is made up of:

  • protocolName: string: The name of this side protocol. ILP-level information must be named ilp.
  • contentType: number: The content type. 0 is application/octet-stream, 1 is text/plain-utf8, and 2 is application/json. Mainly used for logging and smart deserializing.
  • data: buffer: The actual protocol data.