# Venus: Payment channels
这里将会介绍Payment channels是如何在Venus中工作的,同时也提供了一些案例来帮助理解它的运行流程。如果需要理解详细概念,可以跳转至Filecoin Spec Payment Channel (opens new window)
Payment channels 的作用是在2个actor之间转移filecoin。
例如:客户端创建了一个payment channel以从服务端抓取数据。客户端通过在payment channel中发送vouchers 给服务端,然后服务端会发送响应数据。 payment channel 和 voucher 的概念适用于任何客户端与服务端链下周期性多次交易的场景。
# 运行用例
- payment channel 在链上创建并需要初始化一个Fil量(量的大小自行定夺)
- voucher 可以使客户端和服务端在链下陆续的交易资金,服务端在任何阶段都可以提交voucher到链上。
- 关于两端之间的payment channel其中任意一端都可以settle到链上。
- payment channel在settle到链上之后的一个时间段内(目前为12小时),任何一端都可以在链上执行collect。
- collect之后,payment channel中的多个voucher中提交的Fil会被发送到payment channel的接受者(服务端),创建payment channel中的Fil除去voucher中的Fil之后剩余的Fil将会被退还到payment channel的创建者(客户端)。
- voucher下有lane的概念,lane有nonce(递增)和value(Fil)的概念,在同一个lane中,高nonce的voucher为最终有效voucher。 (每个deal依赖于一个新创建的lane)
# CLI 范例
为了快速的理解,我们通过使用Venus的CLI来介绍payment channel是如何工作的。Venus CLI是一个基于Venus守护进程的客户端,同时也可以通过对应的JSON-RPC API调用。
创建一个初始额度为10FIL的payment channel:
$ venus paych add-funds <form_addr> <to_addr> 10
<channel addr>
客户端在指定的<channel addr>中穿件一个nonce默认为1,额度为2FIL,lane为0的voucher:
$ venus paych voucher create <channel addr> 2 0
<voucher>
客户端将生成的voucher发送给服务端,服务端将其添加到本地存储中:
$ venus paych voucher add <channel addr> <voucher>
服务端发送一些数据给客户端。 客户端创建一个lane为0,nonce为2(默认在之前的1的基础上自增后),额度为4Fil的voucher:
$ venus paych voucher create <channel addr> 4 0
<voucher>
客户端将生成的voucher发送给服务端,服务端添加voucher后发送更多的数据给客户端。
客户端可以通过“paych add-funds”给已经创建好的payment channel添加FIL额度:
$ venus paych add-funds <client addr> <provider addr> 5
<channel addr> #和之前的的地址一样,现在这个channel的额度已经是15了
一旦客户端收到了所有的数据,他们需要settle掉这个通道,这个settle的动作不需要马上执行,例如客户端可以继续保持这个通道,只要他想继续与服务端进行交易。
$ venus paych settle <channel addr>
服务端可以提交voucher到链上(venus检测到链上的settle后会自动执行提交)。服务端可能收到许多FIL额度递增的voucher,它需要提交最优的voucher,需要注意的是每个lane中只有一个最佳voucher:
$ venus paych voucher best-spendable <channel addr>
<voucher>
<voucher>
<voucher>
$ venus paych voucher submit <channel addr> <voucher>
一旦settle后的保护周期结束,客户端或者服务端都可以提交collect将资金归属结算。
$ venus paych collect <channel addr>
← 多签钱包 Chain api v0 →