原文作者:Luke Zhang
原文链接:https://medium.com/loom-network/your-crypto-kitty-isnt-forever-why-dapps-aren-t-as-decentralized-as-you-think-871d6acfea
当以太坊的新用户跑来问为什么要用DApp,而不是传统的web服务时,我们总会说“去中心,去中心,因为去中心啊。”集中式网络服务受到相关部门监管,DApp就更为便捷。集中式网络可能在一夕之间丢失所有数据,但是DApp可以和以太坊一样长寿。默认情况下,集中式服务是受限的,而dapp可以自己发币,并在交易所公开交易。
但人们不会告诉你,Dapp比以太坊的痛点更多,且更容易受到攻击。并且,仅仅靠在分布式区块链上运行,并不能使DApp免受其发布者决策的影响。
随着近期CryptoKitty的火爆,很多人没理解清楚DApp是什么就参与进来。在此,我将以CryptoKitty为例,谈谈隐藏在DApp背后的隐患。
一人一指令,引来这款游戏的冰河世纪
小猫的所有权存储在一个单独的合约里—— KittyOwnership —— 再上传至以太坊主链。谢天谢地,这个合约没有自毁功能,所以所有者不能自行杀掉小猫。但是,只要他想,他也可以做出同样具有破坏性的事。
function pause() external onlyCLevel whenNotPaused {
paused = true;
}
合约所有者可以暂停该合同(不需要任何节点同意)。如果其他节点也使用“合约升级”(upgradeContract)功能,则当前的合同暂停,永远不能被解冻。这也意味着小猫将永远沉睡。
DApp不是区块链——在区块链里,你的一个指令不足以对以太坊网络构成任何威胁,就算单个节点做出自杀性的毁灭行为,整个网络仍然可以完整运行。但是,以太坊有这些功能,并不能代表基于以太坊的CryptoKitties也具备这个功能。就以太坊而言,只有一个版本的KittyOwnership合约,而这合约由单个的钱包所有。这是非常集中的表现了
数字猫可能没那么稀有
CryptoKitty的核心概念之一是,你有机会培育出一只稀有且市价很好的猫。比如,一个人花了246以太(按当时价算11.5万美元)买了一只Geno猫—— 创世猫。他可能觉得这种猫很独特,他对猫的所有权将记录在链,并将永久保存。现实也确实如此。
但是,控制数字猫性行为的基因科学合约不仅来源不明(以太坊上未核实),而且也可以被CEO取代。
function setGeneScienceAddress(address _address) external onlyCEO {
GeneScienceInterface candidateContract =
GeneScienceInterface(_address);
这意味着,CryptoKitties的CEO随时可以通过改变繁育算法,来创造更多创世型猫,或者采取其他方式来影响数字猫的稀有性。一个人的猫本来是独一无二,可能转眼间就出现许许多多同款。
虽然CryptoKitty合约所有者不太可能这样做,但将来总有人这样做。真正独特的东西和社会协议所特有的东西,在价值上是有区别的。
数字猫可能长出另一条尾巴——分叉
以太坊运行和存储的成本很高,所以DApp存储的逻辑和数据会尽可能简洁。数字猫的唯一性体现在它的无符号整数(unsigned integer):
uint256 genes
读取这些毫无意义的整数,并将其转换为数字猫。这些数字猫的外观、颜色、描述等的代码,都被存储在集中式服务器、封闭源代码中。
区块链中,软件由每个节点运行,每次升级都会出现硬/软分叉。但与区块链不同,CryptoKitties分叉,可以在任何时候、单边地改变基因序列的解释方式——可以给小猫增加一个尾巴,改变它的颜色,调整它的描述,甚至,把这只小猫变成一只汪星人。
如果个人拥有一只猫及其基因的ERC 721 token,但他依然没有生成猫的全部数据。这样,你的猫就不会因为一个人的决策而发生改变。
但不必如此...
我必须明确指出,CryptoKitties的制造者这么做并不是出于恶意或恶意。他们利用当时可用的非常有限的基础设施,已经尽可能使DApp完美,并且成功吸引到许多新用户。
但人们真正需要的是一种运行成熟的app,整个代码都在节点中运行。它的数据不仅是分布式的,也是可以拥有的。那些愿意自己运行节点的人都可以拥有这些数据。
只有实现这些的时候,我们才真正拥有了完全意义上的DApp。