说一说重放, 重放保护, 以及分叉期间我们该怎么做
何为重放
先说重放, 重放指的是分叉过后, 由于新链和旧链所运行的协议可能完全兼容, 导致在旧链上发生的交易拿到新链上也是合法的. 以本次的即将上演的 BTC/BTG 分叉为例:
在高度 A 左右我们生成了两个新地址 a, b. 然后在高度 B 的时候, BTC 链分出了 BTG 链 (也就是三角形那条, 图里忘了标了). 重放是怎么发生的呢?
假如我们现在在 BTC 链上发起交易 a -> b, 由于 BTC 网络的交易是明文全网广播的, 所以 b 很容易在 BTC 网络截获到这个 a -> b 交易广播, 然后 b 只要把这个广播全文拿到 BTG 网络上再进行一次广播, 这就达成了重放. 可以说是 b 对 a 做了一次重放攻击.
同理, 如果 a -> b 的交易最初是在 BTG 链上发起的, 那么这次交易广播也很容易被拿来在 BTC 链上重放. 这就是双向重放.
总之重放的后果是显而易见的, 如果上例中 a 是你, b 是我, 那么原本在另一条链上属于你的钱, 就会被一并转给我. 很严重.
重放保护
既然分叉可能会引发重放而且后果这么严重, 那么引起分叉的一方或者双方就应当想办法避免重放, 也就是重放保护.
仍以这次 BTG 分叉为例, 一种可能不专业的解决方案是, BTG 定义一种新的交易广播格式, 然后从高度 B+1 的区块开始, 拒绝接受 BTC 的交易广播. 如此一来在 BTC 上发生的交易就不能被拿到 BTG 上来重放.
但这只是解决了一个方向. 另一个方向上, 在 BTG 链上发生的交易, 仍然可以被拿到 BTC 上重放. 怎么解决呢?
一种方法是 BTC 采取和 BTG 类似的方式, 拒绝接受 BTG 格式的交易广播, 但是众所周知, BTC 由 core 团队维护, 作为正统比特币协议, 主动对分叉币做重放保护相当于是向分叉比妥协, 这种事 core 是不会干的.
所以另一个方向上的重放保护还得是 BTG 来干. 事实也正是如此, 目前 BTG 团队正在悬赏找懂 core 代码的开发者解决双向重放保护的问题呢 :😂
所以到底怎么做呢, 我觉得可以研究一下 BTC 代码, 看看它不接受什么样的交易广播格式, 那我 BTG 就采用什么格式, 同时 BTC 接受的广播格式, 我 BTG 统统拒绝, 这就解决了双向重放问题.
不过我没有看过 core 的代码, 以上重放保护方案属于我的意淫, 未必可实施. 感兴趣的话可以查一下 BCC 的重放保护方案.
持币者该怎么做
很多人建议是如果你的币在一些可信赖的交易所, 你可以什么也不需要干.
但我的建议, 最安全的建议是, 从所有交易所里把币提出来放自己钱包, 不要进行任何交易. 直到双向重放保护被确认部署了, 再进行交易.
真的吗?这简直了。。。
哈是的 这是最新进展:https://bitcoingold.org/bitcoin-gold-dev-update-1/