以太坊是什么(技术篇)
原文:https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369
以太坊到底是什么
可能大家也从网络,报刊,杂志上看到了区块链,那区块链到底是什么呢。简而言之,区块链就是一个网络上开放的数据库,可以永久的记录大家的交易。重点是这个数据库,是不用任何中心化的组织来维护,以及保护它的安全(比如防止黑客篡改其中的数据)。与之相应的,它的运作方式就是一个无需互信的交易系统,一个框架,其中的每个个体,可以与其它人进行p2p交易,中间不需要信任任何第三方或者任何人。
嗯,仍然没有明白?本文会从技术角度来说明它到底是什么,当然会尽量用浅显易懂的方式。如果你是技术人员,或者你不是技术人员,都希望你们能看懂。
技术同学可以生啃:
以太坊白皮书:https://github.com/ethereum/wiki/wiki/White-Paper
以太坊黄皮书(技术架构实现,最近开源):http://gavwood.com/paper.pdf
后文是对黄皮书的内容的拆解,但加入了一些自己的理解。
区块链定义
区块链是“cryptographically secure transactional singleton machine with shared-state.” 我们来把这里面定义的概念拆解一下。
- “Cryptographically secure” 这里是指电子货币由复杂的数据算法保障,算法是难以攻破的。比如,你不能创建一个假交易,或者抹掉自己曾经的交易。
- “Transactional singleton machine”在系统中创建的所有交易,只有单一实例。换句话说,整个系统只会存在一个全网络的共识(比如,某人花没花过某笔钱,某账户的余额是多少)。
- “With shared-state”意味着系统中的状态是共享的,且对所有人开放。
以太坊就是上述区块链定义的一个实现。
以太坊区块链实现说明
以太坊区块链根本上说是一个基于交易的状态机。状态机1,是一个计算机术语,是指基于读入一系列不同输入,从一个状态转为不同的另一种状态。
以太坊的状态机,从一个“创世状态”开始。这与一个完全空白的状态一样,在整个网络中没有发生过任何交易。当交易执行时,创世态转换成某些最终态。在任何这些时间点,这些最终态即代表以太坊的当时的状态。
以太坊的状态是由数以百万计的交易组成的。这些交易会打包成一个个的区块。一个区块包含有一系列的交易,每个区块又由之前的区块一个个的串联起来。
为了能让一个状态转换到另一个状态,一个交易必须是有效的。一个交易是否有效是通过校验流程,也就是大家熟知的挖矿。挖矿是一组节点服务器花费其算力来创建一个有效的交易块的过程。
任何一个节点都可以在网络上,声明自己是一个矿工,从而尝试来创建并校验一个区块。全球同一时间有非常多的矿工在同一时间尝试来创建并检验区块。每个矿工需要在提交一个区块到区块链上时,提供一个数学证明作为一个证明:如果证明有效,而区块一定是有效的。
当一个区块被添加到主链上,矿工必须证明这个块比其它竞争者都要快。通过让每个矿工提交一个数据证明来校验每个块的有效性的过程,即是大家所知的工作量证明(proof of work或POW)。
一个成功验证一个新区块矿工,将能获得奖励。以太坊区块链有一个内置的代币叫ether。每个产生新区块的矿工,将会奖励被奖励新生成的代币。
你也许会想:谁能保证每个人都在同一条链上?会不会有少部分的矿工试图创建他们自己的区块链?
前面,我们已经定义了区块链是一个“ transactional singleton machine with shared-state”。通过这个定义,我们可以知道,全网只会有一个共识,每个人都必须认可。如果有多个状态(多个链)将会毁掉这个系统,这样将不知道哪个状态是对的。举例来说,如果链出现了分叉,你可能在一个链上有10个币,而在另一个链上却有20个币。在这样的场景下,我们将没办法确定哪个链上的数据是有效的。
当多个路径生成时,如下图。我们就产生了一个分叉。我们希望能避免分叉,因为他会摧毁这个系统,来强制人们选择他们相信哪条链。
为了确定哪条路径是最有效的,从而来阻止多链的产生,以太坊使用了一个机制叫GHOST protocol。
“GHOST” = “Greedy Heaviest Observed Subtree”
简单来说,GHOST协议是找到那条花费了最多算力的那条链。一个办法是使用最近区块的区块高度(叶子节点),实际代表的是当前链的总区块数。区块数越大,挖矿的证明一定是最大的,才能最终到达这个节点。通过这个方式可以允许我们在当前的状态