# Fiber Cross-Chain HTLC and PTLC
## Metadata
**Status**:: #x
**Zettel**:: #zettel/fleeting
**Created**:: [[2024-03-15]]
**Notion**:: [notion.so](https://www.notion.so/cryptape/PTLC-PTLC-129e8c9c9a004fe99771e7ad4ef720a9?pvs=4)
## BTC HTLC 收款,CKB PTLC 付款
HTLC 收款方 Bob 提供 `H(s)`,付款方 Charlie 将 Invoice 提交给中间人 Ingrid 生成 CKB Invoice。Ingrid 需要提供 `zG` 给付款方 Charlie。
为了保证原子性,Ingrid 需要满足下面的条件
- 不能在知道 s 之前知道 z,因为知道了 z,Ingrid 就可以直接收下 Charlie 的支付而不转发给 Bob。
- 在知道了 s 之后可以推算出 z,这样才能收下 Charlie 的支付。
但是 `H(s)` 和 `zG` 是不同的算法,无法相通,暂时想不到纯密码学上的解决方法。
如果在 BTC 能加上一个扩展的话可以支持。Bob 生成 Invoice 的时候,在提供 `H(s)` 同时,要添加一个扩展字段同时返回 `sG`,Ingrid 使用 `sG` 作为 `zG` 来生成 PTLC 的 Invoice。这样 Ingrid 在 Bob 收款确认只前都无法知道 s,而知道了 s 之后,因为 s 和 z 相同也就得推算出 z 了。
## BTC HTLC 付款,CKB PTLC 收款
和以上情况类似,不过因为是用 CKB 侧先提供 Invoice,所以扩展要加在 CKB 这边。Invoice 里除了包含 `zG`,同时要加一个扩展字段返回 `H(z)`。这样中间人 Ingrid 收到 PTLC 的支付后获得 z 后,就可以作为 hash preimage 完成 BTC 侧的收款。