# 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 没有提供主动的方法,而是在出错或者超时的时候自动取消。