794 large

TheDAO 硬分叉具体方法是什么?是否基于智能合约交易规则的改进提升?

deepfish · 于 发布 · 最后由 deepfish回复 · 791 次阅读

设想中的TheDAO硬分叉方法,参见:Christoph Jentzsch原文译文
似乎是打算写一段针对特定地址(即此次攻击者存“赃款”的地址)的代码,将其中的金额“转移”出来。这无疑是赤裸裸地局部违反“私钥是转移金额的唯一依据”这个区块链最根本的铁律。如果是这样硬编码,基本上可以相信,这样的代码只会生效一次。但是以后再出现问题呢?谁能保证不?事实上,把承诺寄托在“现有规则与程序完美无暇的假设”这种前提上,是一个错误。这个以后可以慢慢论证。

放弃这种“完美性假设”的伪前提,在现有的规则里加如某种错误及意外处理的机制(规则和相应的代码)的必要性就凸显出来,例如增加啊某种智能合约交易的对冲规则和实现机制。即,当一个合约出现问题时,启动相应的程序,按照规则对冲合约的操作(而不是取消/更改任何区块链上确认了的历史记录)。这背后需要一些精细的规则设置,主要就是如何得到这一操作的授权。总有可行的办法,好过任何临时性硬编码的补丁。某种地址黑名单机制可能也是有用的,也值得讨论。

在终端/节点发起的交易上,不提供这种机制,是比较有道理的,因为我们假设这种交易是人工直接控制的,其正确与否,是“区块链空间”之外的事情。

然而,对于“智能合约”发起的交易,例如TheDAO攻击合约的交易,我认为很有必要。甚至可以断言,没有这样一个机制的可编程交易系统是不完备的

我觉得,如果这次以太坊真的要“硬分叉”,千万别照前述简单方法打个补丁。应当讨论做出类似这样的一个永久性的规则补充。它本质上是增加了一个新的规则,但并未改变软件向前兼容的原则。

也许大神们早已在谋划;否则就当抛砖引玉,希望能引起社区内建设性的讨论。

  • 128
    mr_linzi

    社区,qq群大家关心的是自己的币,谁关心以太坊死活?

    对冲,黑名单都是好主意,任何修改数据的方案,必将失去人心,最后导致骨干离去,新人止步,变成一潭死水,直至枯竭。

  • 794 large
    deepfish

    炒币的人属于另一个世界。咱的兴趣是区块链的应用。:-D

  • 55 large
    rink1969

    因为以太坊网络上的不同节点都在生成交易,其实区块链上数据是一直在分叉的。
    主链只不过是把不同分叉上的交易merge到一起。
    merge的时候可能会有冲突,需要互斥,这个互斥就是通过pow来实现的。

    互斥并不针对每笔交易,因为这样分叉太厉害,会消耗很多不必要的计算资源。
    所以出现了block,以太坊是把17s内的交易(按现状,大概是一两百笔交易)打包成block。
    在block这个层面互斥。

    17s之内的交易都有可能被判定为无效,所以需要等待多个确认才能保证交易达成。

    因此有一种方法就是再加一层big block(一小时内的区块打包),甚至再加一层super block(天级别)。
    这样就有一个机会可以回退一个小时或者一天内的某笔交易。
    当然这会对交易确认时间影响。因为可能一天之后,在super block级别上,交易又被回退了。

    但是就像雷电网络一样,如果把这个机制加上严格的控制,不到万不得已不使用,只是当做一个威慑,感觉还行。

  • 794 large
    deepfish

    @rink1969 这么解释块操作机制挺有意思。你所说大级别的快,是相当于把现在一次打包变成二次甚至更多次吗?雷电网络我还没看过。现在有这样做的区块链吗?

  • 55 large
    rink1969

    @deepfish 雷电网络的思路其实很容易理解。
    就好比八个朋友一起去饭店吃饭,最后结账200元,然后大家决定AA,每个人25元。
    如果是这8个人挨个找老板付25元,就太麻烦了,有的人可能没零钱,有的人可能没带钱想赊账,万一溜走了一个人。。。
    所以老板说,你们八个人内部解决找零赊账这些问题,最后给我200元就好了。我没收到钱,八个人谁都不能走。

    只要把雷电网络的思路用在全网上,以固定的时间周期对账就行了。
    就像银行每天营业结束之后要对账一样。

    在对账周期内可以提出异议,对账时进行裁决。

    不过怎么举证是个比较麻烦的事情,谁来裁决以及裁决的效率也是个问题。

    这些都是我自己开的脑洞,很多细节还没考虑
    应该没有区块链这么做吧。。。

  • 794 large
    deepfish

    @rink1969 把块的打包周期看作是交易的“对账周期”,是个很有意思的视角。我对闪电网络(或各种侧链方案)理解首先就是增加了一个层级,这个策略是很有效的。但另一面这也带来复杂性。区块链仍然有无限可能,大可以自由想象。

    我在主贴中提的问题和你设想的层面有点不同。我考虑对于区块链上已经确认的交易的对冲,原有交易仍然有效(并非回滚或者作废已经确认的交易记录),而对冲交易等于一种超级交易抵消原有交易,使其事实上作废,但从可追溯性的角度看,原有记录仍然可查。如果私钥控制的地址,等于触及了区块链也许是最根本的原则,暂不去考虑。但以太坊的合约地址是合约代码操作的,我认为增加另一个独立的合约交易反冲机制是目前可以探讨的。The DAO事件就是最好的注脚。无论如何,如你所说,“裁决”的实现是个关键——这终究是投入实际应用不可能逃避的。

  • 55 large
    rink1969

    @deepfish 没太理解你说的对冲机制具体怎么实施?如果合约里面的币被提走,然后扩散触发了很多后续交易,如何对冲呢?

    不过说起对冲,想起另外一件事情。
    以前公司用IC卡做饭卡,经常碰到IC卡丢失的事情。
    IC卡是不记名,不挂失的。
    当时也在公司里面引发了大范围的讨论,结论是只能通过保险来解决。每个人缴纳少量的保费,丢失之后由保险公司进行赔偿。
    不过这只对小额的资金有效,像DAO这么大的资金量,很难投保。
    而且如果这么做的话,以太坊就变成全球最大的保险公司了。。。又有中心化的问题了。

  • 794 large
    deepfish

    @rink1969 具体机制需要研究。我没去想(咱费脑筋想也没用哈:-d)——只是从道理上说。作为以太坊“世界计算机”的立意,必须从类似的层面上去考虑。发个帖子在这里,也是出于学习探索,抛砖而已。

    作为通用计算平台,必须基于开放可演化的架构,遇到DAO这样的问题,纠缠于软硬分叉,就已经是小家子气了,那本来就是封闭加密货币功能系统的思维。立志于发展成为一个数字货币,当然应该尽快收敛形成封闭稳定的系统。这不是什么对错,是自身的目标决定的。通用计算平台,和一个货币功能系统,几乎不可同日而语。这几日借助The DAO事件学习观察,收获良多,但似乎很难看到对太坊从一个比较高的战略和深度去着眼的……