Interledger Payment Request(IPR)
Interledger Payment Request(IPR)传输协议是端到端协议,Interledger支付的接收方首先向发送方传达付款请求。该文件还建议接收方生成支付请求的方法,以便他们可以验证传入支付而不存储所有未完成的请求。
介绍
动机
Interledger Protocol使用基于加密条件和期限的暂停,以确保发件人的资金被交付到目的地或返回到发件人的帐户。
一种方法是由Interledger付款的接收方生成和满足条件。当付款的发件人收到履约时,他们可以确定收件人收到付款。
接收器生成的条件在构建不可应用的应用层协议时也很有用。接收方将生成条件并以加密方式签署声明,指明散列的预映像指示发件人已解决特定债务。接收者只会在收到付款后才会公开哈希原像。一旦发件人获得了原像,他们将能够向第三方证明他们使用原像和原始签名声明支付了接收者。
在大多数情况下,不可否认性是不必要的,因为即使证据不能用于说服第三方,发件人也可以证明收件人已收到付款。在这种情况下,建议使用预共享密钥传输协议,因为它不需要每次付款的端到端通信。
范围
该文件定义了表示支付请求的建议格式和接收方生成条件的方法。构建在IPR之上的协议可以使用这里提供的格式,尽管它们可以使用他们选择的任何格式。
虽然本文件还提供了产生转让条件的建议,但条件往往不适用于除接收方之外的所有各方。接收者可以使用他们选择的任何条件,但是这个规范包括了接收者应该考虑的最佳实践。
这份文件并没有指定付款请求如何从接收到发送者沟通。
操作模式
Interledger支付请求旨在用于更高级别的协议,如下所示:
- 接收器创建ILP数据包并使用条件生成建议中概述的算法之一生成条件。
- 接收方将包括ILP数据包和条件的支付请求传送给发送方。
- 发件人引用请求的ILP数据包,并从支付请求中启动包含数据包和执行条件的ILP支付。发件人使用
account
和amount
从数据包,但他们必须data
视为不透明。发送者根本不必修改数据包,否则接收者将拒绝付款。 - 当接收者收到传入转账的通知时,他们检查与ILP包的转账金额,并检查付款请求未过期。
- 接收器使用与之前相同的算法,从附加到传入传输的ILP数据包中重新生成条件和满足条件,并满足传输条件。
- 如果接收方生成的条件与传入传输中的条件匹配,则他们提交履行以执行传输。如果条件不匹配,则意味着ILP数据包已被篡改,并且接收方拒绝传入的传输。
条件生成建议
建议接收方使用预共享密钥传输协议的实现来生成数据包和条件,因为它已经包含了生成条件的最佳实践,并使接收方能够避免保留所有未完成支付请求的状态。
请注意,接收方在ILP数据包中生成条件或编码数据的方法与发送方无关。发件人将data
ILP数据包中的数据视为不透明,并使用支付请求中的条件,而无需知道如何生成履行。
使用PSK实现
所述预共享密钥协议通过设置履行成为ILP分组的HMAC与来自秘密发送者和接收者之间共享派生的密钥使用的付款条件为的付款细节的MAC。在IPR中没有共享的秘密,并且该条件仅由接收器产生。尽管如此,IPR接收器可以使用相同的方法生成条件并在接收到传输时重新生成履行。
为了使用PSK实现,接收器遵循以下步骤:
- 接收器可以派生出一个接收者秘密和地址,详见PSK:共享密钥生成,但在IPR中,接收者不得共享密钥。
- 接收方使用通常由发件人执行的步骤创建付款数据包和条件:PSK:支付创建。
- 接收方将付款请求(包括数据包和条件)传送给发件人。
- 如果接收方使用了步骤1中派生的秘密,则它们按照PSK:共享密钥再生中指定的方式从分组中重新生成该秘密。
- 接收方根据PSK:Payment Fulfillment中指定的秘密和数据包生成履约。
替代方法和一般最佳做法
接收者可以使用他们选择的任何方法来生成条件,例如对每个请求使用随机满足。接收方必须能够识别和验证每笔未付款项的ILP数据包并产生相应的履行。PSK实现通过将条件用作支付请求的消息认证码(MAC)来处理这些要求,而不将每个履行和分组存储在数据库中。
如果实现定制系统,接收机应该遵循以下准则:
- 接收者应该在ILP数据包中包含一个支付请求特定的随机数,以确保条件是唯一的,即使多次付款的数据包都是相同的。
- 接收者应该包括一个失效日期,以便他们不接受在创建后支付太久的收款。
Interledger付款申请格式
以下是Interledger付款申请格式中的字段摘要:
领域 | 类型 | 简短的介绍 |
---|---|---|
version | UINT8 | 知识产权版本,2 现在 |
packet | OCTET STRING | ILP支付包包括目的地地址和金额 |
condition | UInt256 | 付款的执行条件 |
版
UInt8 ::= INTEGER (0..127)
IPR版本。该文件指定版本2。
包
OCTET STRING (SIZE(0..65535))
该ILP付款包。
在IPR发件人只使用account
并amount
从ILP包,并必须把data
为不透明。
发送方根本不必修改ILP数据包,否则接收方将拒绝付款。
条件
UInt256 ::= OCTET STRING (SIZE(32))
ILP支付条件,即用于触发付款执行的履行协议的SHA-256哈希值。