# How Fiber Can Safely Remove a Channel ## Metadata **Status**:: #x **Zettel**:: #zettel/fleeting **Created**:: [[2025-03-20]] **Reference**:: [[How LND Aborts the Funding Process]] ## Synopsis 基于 Fiber Channel 的状态: 1. 在已方没有给对方发送过任何版本 Funding Tx 的签名之前: - 可以直接取消 Funding 流程 - 可以在出错和超时之后自动取消 - 取消后可以释放被锁定的用于 Funding 的 Live Cells - 取消后可以主动发一个消息通知对方,对方不在线的话可以在对方下次上线时通知对方。 2. 在已方已经给对方发送过任何版本 Funding Tx 的签名之后,但是 Funding Tx 还没有在 CKB 链上被确认之前: - 无法取消 Funding 流程 - 可以做软删除,就是释放被锁定的用于 Funding 的 Live Cells,但是要继续监控 Funding Tx,如果 Confirmed 了,需要恢复成 Active Channel。在目前的实现中,只需要在 Channel State 中记录一个 flag。如果进入这个状态,只需要释放 Live Cells,并且在 reestablish channel 的时候跳过 Live Cells 的锁定,其它的逻辑和正常的 Channel Actor 是一样的。 - 如果 Funding Tx 中有任何 inputs 在链上确认被另外的交易花费了,才能安全的取消 Funding 流程。 3. 如果 Funding Tx 已经在链上被确认,走 Closing Workflow 如果需要实现对应的功能,需要考虑的问题: 1. 是提供一个统一的接口,自动根据当前状态,安全的去取消一个 Channel,还是提供不同的接口? - LND 提供了两个 RPC, CloseChannel 用于状态 3,而 AbandonChannel 主要是用于开发和测试直接删掉一个 Channel 并不再做任何后续处理。对于状态 1 和 2 没有提供主动的方法,而是在出错或者超时的时候自动取消。