你说的这个方案看起来更好,实现起来也比较方便。我目前能想到一个比较直接的实现方式需要修改以下几点。
- 在lock.args的两个pubkey后,添加一个bit的flag,用于代表对应的该pubkey的拥有者是否能提交closing tx,初始化为1。
- 提交closing tx的时候,在witness里额外需要一个对完整tx的签名,暂时叫submission signature,签名只要能被lock.args里的两个pubkey中的一个验证通过即可。
- lock script保证在closing tx的gpc output里,submission signature对应的pubkey后的flag被设置为0。
这样的设计可以保证一方只能提交一次closing tx,而且似乎不会对已有的过程造成影响。这样在设计HTLC的时候,只需要在expiry time中增加closing的最大时间(即两次closing的challenge period)即可。我觉得你说的改进非常棒,这似乎解决了eltoo最大的问题,成功地将closing的ugly case的时间降低到了O(1)。