Interledger(ILP)Javascript分类帐插件接口版本2

Javascript分类帐插件接口版本2

Interledger协议是用于跨多个不同结算系统进行支付的协议套件。

该规范为Interledger客户端和连接器定义了一个JavaScript分类帐抽象接口,用于跨不同分类帐协议进行通信和路由支付。虽然这里定义的确切方法和事件是JavaScript实现特有的,但它可以用作其他语言的分类帐抽象的指南。

要通过新分类账发送ILP付款,必须实施一个分类账插件,该分类账插件公开以下定义的接口。这可以与ILP客户端和连接器一起使用,并且应该可以直接使用。

这个规格取决于ILP规范

类:LedgerPlugin

class LedgerPlugin

方法
  名称
new LedgerPlugin(opts,api)
  connectoptions ⇒ Promise.
  disconnect()⇒ Promise.
  isConnected()⇒ Boolean
  sendDataoptions ⇒ Promise.
  sendMoneyamount ⇒ Promise.
  registerDataHandler(dataHandler)⇒ undefined
  deregisterDataHandler()⇒ undefined
  registerMoneyHandler(moneyHandler)⇒ undefined
  deregisterMoneyHandler()⇒ undefined
常量
  名称
static 版本 = 2
活动
名称 处理器
connect ( ) ⇒
connect ( ) ⇒
error ( ) ⇒

实例管理

新的LedgerPlugin

new LedgerPlugin( opts : object, api? : PluginServices )

创建一个插件的新实例。每个实例通常对应于不同的分类账。然而,一些插件可能偏离严格的一对一关系,并可能在内部充当一个以上对手的虚拟连接器。

第一个参数opts是一个配置对象,其形状是每个插件特有的。插件通常会通过环境变量进行配置,所以建议opts应该使用JSON序列化。但是,插件可能使用不可序列化的值来提供高级功能。

第二个参数api是可选的,用于将附加环境服务传递给插件,例如记录器或键值存储。大多数插件应该工作,即使这个参数是undefined,但可能会提供较少的功能(例如没有持久性)。

InvalidFieldsError如果构造函数被赋予不正确的参数,则抛出opts抛出TypeError如果opts不是对象或被api定义而不是对象。抛出InvalidServicesError如果需要服务,但不提供通过api

参数
名称 类型 描述
OPTS PluginOptions 包含分类帐相关设置的对象。可能包含特定于插件的字段。
const  ledgerPlugin  =  new  LedgerPlugin({

  // auth参数由插件定义

  _Store  {
     //可能需要持久性内部使用一些分类帐插件
    //(例如,当系统中有降低的备忘录功能,我们只能把在备忘录的ID)
    //存储密钥下的值
    put(keyvalue=> {
       //返回Promise。
    },
    
    get  key => {
       //返回Promise。
    },
    //按键删除一个值
    del  key => {
       //返回Promise。
    }
  }
}) 
   
  

有关这些属性的详细说明,请参阅PluginOptions

LedgerPlugin.version

LedgerPlugin.version:Number

始终2为此版本的Ledger插件接口。

连接管理

LedgerPlugin#连接

ledgerPlugin.connect( options:ConnectOptions ⇒ Promise.

options 是可选的。

启动分类帐事件订阅。一旦connect被调用分类帐插件必须尝试订阅并报告分类帐事件。连接建立后,分类帐插件应该发出connect事件。如果连接丢失,分类账插件应该发出disconnect事件。

拒绝,InvalidFieldsError如果凭证丢失,并且NotAcceptedError凭证被拒绝。TypeError如果options.timeout拒绝,但不是Number

LedgerPlugin#断开

ledgerPlugin.disconnect() ⇒ Promise.

取消订阅分类帐事件。

LedgerPlugin#isConnected

ledgerPlugin.isConnected() ⇒ Boolean

查询插件当前是否连接。

事件: connect

ledgerPlugin.on('connect', () ⇒ )

每当连接成功建立时发出。

事件: disconnect

ledgerPlugin.on('disconnect', () ⇒ )

当连接终止或丢失时发射。

事件: error

ledgerPlugin.on('error', ( err:Error ) ⇒ )

致命异常的一般事件。当插件遇到意外的不可恢复状况时发出。一旦被触发,插件的这个实例就不能再被使用了。

发出

LedgerPlugin#送出数据

ledgerPlugin.sendData( data:Buffer ) ⇒ Promise.

将数据发送给帐户的对手方,并异步返回响应。请求数据作为a传入,Buffer响应数据作为a返回Buffer

参数
名称 类型 描述
数据 Buffer 二进制请求数据
返回

Promise. 一个答复,解决何时收到答复。

此方法可能会拒绝任何JavaScript错误。

const  responseBuffer  =  等待 psendData(requestBuffer)

LedgerPlugin#sendMoney

ledgerPlugin.sendMoney( amount:string ) ⇒ Promise.

amount来自主叫方的资金单位转移到帐户的交易方。

所有插件必须支持从一个到一些最大值的范围内的数量。

接收

LedgerPlugin#registerDataHandler

ledgerPlugin.registerDataHandler( dataHandler: ( data: Buffer ) ⇒ Promise ) ⇒ undefined

设置用于处理传入准备好的数据包的回调。该回调应该期望一个参数(数据为Buffer))并返回响应数据包的承诺(如缓冲区)。如果发生错误,回调可能会引发异常。一般来说,回调的行为应该sendData如此。

如果已经设置了数据处理程序,则此方法将引发一个DataHandlerAlreadyRegisteredError为了更改数据处理程序,必须先通过删除旧的处理程序deregisterDataHandler这是为了确保处理程序不会被意外覆盖。

如果插件接收到传入数据包,但没有注册处理程序,则插件应该回应并显示错误。

LedgerPlugin#deregisterDataHandler

ledgerPlugin.deregisterDataHandler( ) ⇒ undefined

删除当前使用的数据处理程序。这与registerDataHandler从未被调用过的效果相同

如果当前未设置数据处理程序,则此方法不执行任何操作。

LedgerPlugin#registerMoneyHandler

ledgerPlugin.registerMoneyHandler( moneyHandler: ( amount: string ) ⇒ Promise ) ⇒ undefined

设置用于处理传入货币的回叫。回调应该期望一个参数(金额)并返回一个承诺。如果发生错误,回调可能会引发异常。一般来说,回调的行为应该sendMoney如此。

如果一个钱处理程序已经设置,这个方法会抛出一个MoneyHandlerAlreadyRegisteredError为了更改钱处理程序,必须先通过删除旧处理程序deregisterMoneyHandler这是为了确保处理程序不会被意外覆盖。

如果传入的资金被插件接收到,但没有注册处理程序,插件应该返回一个错误(并可以返回资金)。

LedgerPlugin#deregisterMoneyHandler

ledgerPlugin.deregisterMoneyHandler( ) ⇒ undefined

删除当前使用的钱处理程序。这与registerMoneyHandler从未被调用过的效果相同

如果目前没有设置货币处理程序,则此方法不起作用。

类:插件服务

class PluginServices

LedgerPlugin 当插件被实例化时,插件服务可选地被传递给构造函数。提供哪些服务可能会因主机环境而异,或根本不可用。

特殊领域
类型 名称 描述
Object 商店 简单的键值存储对象
Object 日志 简单的记录器对象

字段

PluginServices#店面

store:Object

为主机的持久层提供回调钩子。

大多数插件应该工作(可能具有更高的信任度或降级经验),而没有store但是,如果插件无法在没有存储的情况下运行,并且没有提供任何插件,则构造函数必须抛出一个InvalidServicesError

方法名称基于流行的LevelUP / LevelDOWN软件包。

{
   //将一个值存储在一个key 
  put中keyvalue=> {
     //返回Promise。
  },
  //通过键
  get  key => {
     //返回Promise。
  },
  //按键删除一个值
  del  key => {
     //返回Promise。
  }
} 
   
  

PluginServices#日志

log:Object

向主机提供日志钩子。主机可以使用此功能为日志行添加插件实例的标识符。

如果没有提供这个参数,插件应该使用合适的默认日志记录机制。

日志记录方法支持printf样式的格式。以下格式化程序可用:

格式化 表示
%O 在多行上漂亮地打印对象。
%o 在一行中漂亮地打印一个对象。
%s 串。
%d 数字(整数和浮点数)。
%j JSON。如果参数包含循环引用,则替换为字符串'[Circular]'。
%% 单一百分号('%')。这不会消耗一个参数。

日志消息不得包含私钥或其他凭证。

{
   //非常详细的调试信息
  debug message... params=> {}
   //在正常操作过程中可能发生的重要事件
  info message... params=> {}
   //警告表示异常需要用户注意的事件
  warnmessage... params=> {}
   //错误表明出错了
  errormessage... params=> {}
}

类:ConnectOptions

class ConnectOptions

字段
类型 名称 描述
Number 时间到 客户端应该放弃尝试连接之前的时间量(以毫秒为单位)

字段

ConnectOptions#超时

timeout:Number

在放弃之前,插件应尝试连接的毫秒数。

如果错误,使用插件的默认超时。如果Infinity没有超时。

错误

LPI中定义的各种方法抛出错误; 其他人可以拒绝他们带着错误返回的承诺。在这两种情况下,这些错误都需要从JavaScript中派生出来Error.prototype,并且需要将.name字段设置为自己的名称,作为字符串。例:

函数 InvalidFieldsError消息){
     this名称 =  ' InvalidFieldsError '
    这个message  =(message ||  ' '
}
InvalidFieldsError原型 =  错误原型

你可能感兴趣的:(ILP,跨链)