Skip to content

Latest commit

 

History

History
56 lines (40 loc) · 2.22 KB

File metadata and controls

56 lines (40 loc) · 2.22 KB

ILP Plugin BTP

One plugin to rule them all

NPM Package Prettier Known Vulnerabilities

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()

server.registerDataHandler(serverHandler)
client.registerDataHandler(clientHandler)

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.