Interledger协议是用于跨多个不同结算系统进行支付的协议套件。
该规范为Interledger客户端和连接器定义了一个JavaScript分类帐抽象接口,用于跨不同分类帐协议进行通信和路由支付。虽然这里定义的确切方法和事件是JavaScript实现特有的,但它可以用作其他语言的分类帐抽象的指南。
要通过新分类账发送ILP付款,必须实施一个分类账插件,该分类账插件公开以下定义的接口。这可以与ILP客户端和连接器一起使用,并且应该可以直接使用。
这个规格取决于ILP规范。
class LedgerPlugin
名称 | |
---|---|
new |
LedgerPlugin(opts,api) |
connect(options )⇒ Promise. |
|
disconnect()⇒ Promise. |
|
isConnected()⇒ Boolean |
|
sendData(options )⇒ Promise. |
|
sendMoney(amount )⇒ Promise. |
|
registerDataHandler(dataHandler)⇒ undefined |
|
deregisterDataHandler()⇒ undefined |
|
registerMoneyHandler(moneyHandler)⇒ undefined |
|
deregisterMoneyHandler()⇒ undefined |
名称 | |
---|---|
static |
版本 = 2 |
名称 | 处理器 |
---|---|
connect | ( ) ⇒ |
connect | ( ) ⇒ |
error | ( ) ⇒ |
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:(key,value)=> {
//返回Promise。
},
get :( key) => {
//返回Promise。
},
//按键删除一个值
del :( key) => {
//返回Promise。
}
}
})
有关这些属性的详细说明,请参阅PluginOptions
。
LedgerPlugin.version:Number
始终2
为此版本的Ledger插件接口。
ledgerPlugin.connect( options:ConnectOptions ⇒ Promise.
options
是可选的。
启动分类帐事件订阅。一旦connect
被调用分类帐插件必须尝试订阅并报告分类帐事件。连接建立后,分类帐插件应该发出connect
事件。如果连接丢失,分类账插件应该发出disconnect
事件。
拒绝,InvalidFieldsError
如果凭证丢失,并且NotAcceptedError
凭证被拒绝。TypeError
如果options.timeout
被拒绝,但不是Number
。
ledgerPlugin.disconnect() ⇒ Promise.
取消订阅分类帐事件。
ledgerPlugin.isConnected() ⇒ Boolean
查询插件当前是否连接。
connect
ledgerPlugin.on('connect', () ⇒ )
每当连接成功建立时发出。
disconnect
ledgerPlugin.on('disconnect', () ⇒ )
当连接终止或丢失时发射。
error
ledgerPlugin.on('error', ( err:Error ) ⇒ )
致命异常的一般事件。当插件遇到意外的不可恢复状况时发出。一旦被触发,插件的这个实例就不能再被使用了。
ledgerPlugin.sendData( data:Buffer ) ⇒ Promise.
将数据发送给帐户的对手方,并异步返回响应。请求数据作为a传入,Buffer
响应数据作为a返回Buffer
。
名称 | 类型 | 描述 |
---|---|---|
数据 | Buffer |
二进制请求数据 |
Promise.
一个答复,解决何时收到答复。
此方法可能会拒绝任何JavaScript错误。
const responseBuffer = 等待 p。sendData(requestBuffer)
ledgerPlugin.sendMoney( amount:string ) ⇒ Promise.
将amount
来自主叫方的资金单位转移到帐户的交易方。
所有插件必须支持从一个到一些最大值的范围内的数量。
ledgerPlugin.registerDataHandler( dataHandler: ( data: Buffer ) ⇒ Promise
设置用于处理传入准备好的数据包的回调。该回调应该期望一个参数(数据为Buffer))并返回响应数据包的承诺(如缓冲区)。如果发生错误,回调可能会引发异常。一般来说,回调的行为应该sendData
如此。
如果已经设置了数据处理程序,则此方法将引发一个DataHandlerAlreadyRegisteredError
。为了更改数据处理程序,必须先通过删除旧的处理程序deregisterDataHandler
。这是为了确保处理程序不会被意外覆盖。
如果插件接收到传入数据包,但没有注册处理程序,则插件应该回应并显示错误。
ledgerPlugin.deregisterDataHandler( ) ⇒ undefined
删除当前使用的数据处理程序。这与registerDataHandler
从未被调用过的效果相同。
如果当前未设置数据处理程序,则此方法不执行任何操作。
ledgerPlugin.registerMoneyHandler( moneyHandler: ( amount: string ) ⇒ Promise
设置用于处理传入货币的回叫。回调应该期望一个参数(金额)并返回一个承诺。如果发生错误,回调可能会引发异常。一般来说,回调的行为应该sendMoney
如此。
如果一个钱处理程序已经设置,这个方法会抛出一个MoneyHandlerAlreadyRegisteredError
。为了更改钱处理程序,必须先通过删除旧处理程序deregisterMoneyHandler
。这是为了确保处理程序不会被意外覆盖。
如果传入的资金被插件接收到,但没有注册处理程序,插件应该返回一个错误(并可以返回资金)。
ledgerPlugin.deregisterMoneyHandler( ) ⇒ undefined
删除当前使用的钱处理程序。这与registerMoneyHandler
从未被调用过的效果相同。
如果目前没有设置货币处理程序,则此方法不起作用。
class PluginServices
LedgerPlugin
当插件被实例化时,插件服务可选地被传递给构造函数。提供哪些服务可能会因主机环境而异,或根本不可用。
类型 | 名称 | 描述 |
---|---|---|
Object |
商店 | 简单的键值存储对象 |
Object |
日志 | 简单的记录器对象 |
store:Object
为主机的持久层提供回调钩子。
大多数插件应该工作(可能具有更高的信任度或降级经验),而没有store
。但是,如果插件无法在没有存储的情况下运行,并且没有提供任何插件,则构造函数必须抛出一个InvalidServicesError
。
方法名称基于流行的LevelUP / LevelDOWN软件包。
{
//将一个值存储在一个key
put中:(key,value)=> {
//返回Promise。
},
//通过键
get :( key) => {
//返回Promise。
},
//按键删除一个值
del :( key) => {
//返回Promise。
}
}
log:Object
向主机提供日志钩子。主机可以使用此功能为日志行添加插件实例的标识符。
如果没有提供这个参数,插件应该使用合适的默认日志记录机制。
日志记录方法支持printf样式的格式。以下格式化程序可用:
格式化 | 表示 |
---|---|
%O |
在多行上漂亮地打印对象。 |
%o |
在一行中漂亮地打印一个对象。 |
%s |
串。 |
%d |
数字(整数和浮点数)。 |
%j |
JSON。如果参数包含循环引用,则替换为字符串'[Circular]'。 |
%% |
单一百分号('%')。这不会消耗一个参数。 |
日志消息不得包含私钥或其他凭证。
{
//非常详细的调试信息
debug :(message,... params)=> {}
//在正常操作过程中可能发生的重要事件
info :(message,... params)=> {}
//警告表示异常需要用户注意的事件
warn:(message,... params)=> {}
//错误表明出错了
error:(message,... params)=> {}
}
class ConnectOptions
类型 | 名称 | 描述 |
---|---|---|
Number |
时间到 | 客户端应该放弃尝试连接之前的时间量(以毫秒为单位) |
timeout:Number
在放弃之前,插件应尝试连接的毫秒数。
如果错误,使用插件的默认超时。如果Infinity
没有超时。
LPI中定义的各种方法抛出错误; 其他人可以拒绝他们带着错误返回的承诺。在这两种情况下,这些错误都需要从JavaScript中派生出来Error.prototype
,并且需要将.name
字段设置为自己的名称,作为字符串。例:
函数 InvalidFieldsError(消息){
this。名称 = ' InvalidFieldsError '
这个。message =(message || ' ')
}
InvalidFieldsError。原型 = 错误。原型