Casper的最终抑制机制是将合同分叉,导致攻击者的股份损失。这种机制可以与任何聪明的合同吗?
我试图写一份甲骨文合同,激励人们就一些现实世界的数据达成共识,并希望能够在受到攻击的情况下促成这份合同。
发布于 2017-11-14 03:23:04
正如您所建议的,分叉系统通常是为协商一致的系统提供一层安全性的一种好方法。其思想是,如果有人花费一些资源攻击系统,并将其置于用户认为错误的状态,则可以部署该系统的新版本,理想情况下,攻击者保留的任何资源都会被删除或重新分配,用户只会忽略旧系统,转而使用新系统。
在实践中,分叉可能意味着一些不同的事情。
如果您有自己的网络,如比特币网络或Ethereum网络,则可以通过更改某些节点遵循的规则进行分叉。这就将系统分成两个不同的网络,它们在分块前共享相同的状态,但随后具有发散状态。
如果您的代码打算运行在一个现有的网络上,比如Ethereum,那么您不能在分叉时更改该网络的规则,并且您的所有数据都存储在一个单一的、一致的分类账中。因为你不能分叉分类账,所以你必须在现有的分类账上创建一个新的数据结构。
一种选择是,如果您的资源都由同一契约持有,您可以简单地部署该契约的一个新版本,并且每个人都会使用该协议。如果合同管理的主要内容是令牌,并且您(分叉社区)能够说服任何对该令牌感兴趣的人迁移到新的合同中,这是可行的。如果这是一个正常的ERC20令牌,这可能不能很好地工作,因为一些与令牌交谈的合同可能不知道分叉,这可能会导致资金的损失,但对您的目的来说可能已经足够好了。这里有更多关于这方面的实际情况:https://medium.com/@edmundedgar/what-happens-when-you-try-to-fork-an-ethereum-token-863e3defcf7
另一种选择是管理单个契约中的所有分支,并且总是强制用户指定分支。这是我们在这里描述的契约中使用的策略:https://decentralize.today/get-the-facts-hard-fork-all-the-things-3ea2233da0fd
第三种选择是将叉子保留在单一的合同中,但试图在它们之间做出裁决,以创建“真正的”叉子。这是奥古尔使用的策略:当触发叉子时,用户需要将他们的令牌(" REP ")迁移到一个分支或另一个分支,系统最终将迁移最多REP的分支视为“真”分支。这具有将单个令牌接口暴露给其他契约的优点,并且不需要其他契约与其合同对话来指定分支,因为存在“最佳”分支。缺点是,这一过程具有相当大的破坏性,因此必须通过一个债券体系来保护它,这就增加了复杂性,如果债券被设定在错误的水平,它可能无法触发。它本身也可能被博弈(代价),因此系统最终会陷入特权分支被破坏的状态。
请注意,在所有没有“真”分支的情况下,系统很可能无法管理外部资源,比如(对于运行在ETH之上的系统)ETH。所有这些系统都依赖于拥有一个本地令牌,该令牌可以由使用它的社区随意重新定义。
发布于 2017-11-12 03:48:03
这里有几个混杂在一起的误解。看看我能不能解开他们。(1) Casper的抑制措施不是“分叉合同”,事实上,我甚至不知道“分叉合同”是什么意思。卡斯珀有时会“砍掉”验证者的股份,如果他们做错了什么,但我不会称之为“分叉合同”。
当您说“分叉合同”时,听起来就像是在考虑Linux,在Linux中,一个可以分叉一个程序,并且有两个运行版本的程序。分叉不是那样的,但我不确定你是这么说的。
“甲骨文合同”这个词也有点陌生。至少据我所知,区块链世界中的“甲骨文”(Oracle)是一种脱链软件,它定期将数据写入链(即进入智能契约),作为为智能契约提供数据的一种方式。我不认为大多数人认为神谕是连锁的。(并不是说你不能从另一个聪明的合同中向其他合同提供数据,但总的来说,我认为人们在说“甲骨文”时并不是这个意思。)
最后,我们还不清楚你的意思是“当合同受到攻击的时候,就用叉子”。你的意思是,如果有人想要破解,你想让聪明的合同本身做出某种反应吗?有些人用“杀死”或“暂停”开关来写聪明的合同,但听起来不像你说的那样。
总的来说,你的问题有点让人困惑。也许你可以澄清一下。
https://ethereum.stackexchange.com/questions/30508
复制相似问题