(1)P2P网络层
完成P2P的组网,网络连接管理,节点状态的维护,为比特币提供数据传输服务;
(2)安全与共识层
这一层主要向上层提供安全与数据共识服务,保证比特币中的交易数据的安全与区块链(账本)的一致性,又可以细分成三个主要模块:
加密算法:提供各种加密算法,如SHA,ECDSA数据签名算法,hash算法以及Base58编码算法等等。
认证模块:merkle树用来快速验证交易是否包含在区块中;通过加密算法对交易进行签名,生成锁定和解锁脚本;脚本引擎负责解析并执行脚本;
共识模块:比特币中采用的是PoW。
(3)数据层
比特币中的数据,例如交易,区块,区块链等等。另外该层还包括了数据的存储,例如通过level db存储与加载区块链,内存交易池等。
(4)RPC
RPC服务端的实现,提供JSON API供客户端访问区块链 。
以上4层构成了bitcoind。
(5)应用层
各种比特币的应用,例如比特币核心提供的bitcoind client。该层主要是作为RPC客户端,通过JSON API与bitcoind交互,享受各种区块链的服务(查询交易信息、挖矿等等)。
从图中可以看出,区块链实际上并没有用到什么创新的技术,实际上用的还是密码学、共识算法、P2P等一些已有的技术,但是区块链巧妙的将这些已有技术组合起来,形成了一个能够在金融、物联网、医疗、教育等多个行业都能广泛应用的技术体系。
Eth架构:
Eth核心知识点:
区块:可以定义为记录一段时间内发生的交易和状态结果的数据结构,是对当前账本状态的一次共识。
区块主要由区块头、交易列表和叔区块头三部分组成:
区块头包含:父块的散列值( Prev Hash )、叔区块的散列值( Uncles Hash )、状态树根散列值( stateRoot ) 、交易树根散列值( Transaction Root ) 、收据树根散列值( Receipt Root )、时间戳( Times tamp )、随机数( Nonce )等;交易列表是由矿工从交易池中选择收入区块中的一系列交易;不在主链上的且被主链上的区块通过Uncles 字段收留进区块链的孤块叫做“叔区块” 。
以太坊中每个外部账户都由一对密匙定义,即一个私钥和一个公钥。
帐户:在以太坊系统中存在两种类型的账户,分别是外部账户和合约账户。外部账户存储以太币余额状态,而合约账户除了余额还有智能合约及其变量的状态。外部账户( Externally Owned Account, EOA )由私钥来控制,是由用户实际控制的账户。存储以太币余额状态;合约账户是一个包含合约代码的账户
数据库:区块、交易等数据最终都是存储在Level DB数据库中。Level DB数据库是一个键值对( key-value )数据库, key一般与散列相关,value则是存储内容的RLP编码。
以太坊共识:以太坊由于安全事件,分为Etc(经典以太坊)和Eth(以太坊)。Etc使用PoW达成共识,POW即通过工作结果来证明你完成了相应的工作,Eth中的Pow算法是Ethash(Ethash 算法的特点是挖矿的效率基本与CPU 无关,而与内存大小、带宽正相关,目的是去除专用硬件的优势,抵抗ASIC)。
算法流程:
1.对于每一个区块,都能通过扫描区块头的方式计算出一个种子( seed ),该种子只与当前区块有关。
2.使用种子能产生一个16MB 的伪随机缓存,轻客户端会存储缓存。
3.基于缓存再生成一个1GB 的数据集,称其为DAG 。数据集中的每一个元素都只依赖于缓存中的某几个元素,也就是说,只要有缓存,就可以快速地计算出DAG 中指定位置的元素。挖矿者存储数据集,数据集随时间线性增长。
4.挖矿可以概括为“矿工”从DAG 中随机选择元素并对其进行散列的过程, DAG 也可以理解为一个完整的搜索空间,挖矿的过程就是从DAG 中随机选择元素(类似比特币挖矿中试探合适nonce 的过程)进行散列运算。
5.验证者只需要花费少量的内存存储缓存就可以了,因为验证者能够基于缓存计算得到DAG 中自己需要的指定位置的元素,然后验证这些指定元素的散列是不是小于某个散列值,也就是验证“矿工”的工作是否符合要求。
Eth使用PoS进行共识计算。PoS 即基于网络参与者目前所持有的数字货币的数量和时间进行利益分配,是一种对货币所有权的证明。主要为两种类型:基于链的PoS 和BFT (Byzantine Fault Tolerant ,拜占庭容错)风格的PoS 。
在基于链的PoS 中,该算法在每个时隙内伪随机地从验证者集合中选择一个验证者(比如,设置每l0s 一个周期,每个周期都是一个时隙),给予验证者创建新区块的权利,但是验证者要确保该块指向最多的块(指向的上一个块通常是最长链的最后一个块) 。因此,随着时间的推移,大多数的块都收敛到一条链上。
在BFT 风格的PoS 中,分配给验证者相对的权利,让他们有权提出块并且给被提出的块投票,从而决定哪个块是新块,并在每一轮选出一个新块加入区块链。在每一轮中,每一个验证者都为某一特定的块进行“投票”,最后所有在线和诚实的验证者都将“商量”被给定的块是否可以添加到区块链中,并且意见不能改变。
1. Btc以虚拟货币 P2P为核心,不需要智能合约。Eth需要做智能合约。
从交易报文中的字段可以看到,Eth可以在「Input Data」栏位输入程式码,部署或操作智慧合约;Btc则只能在「OP_RETURN DATA」栏位单纯做备注。
2.从交易模型来看。Eth更像是Account Model(银行账本),Btc则是UTXO(Unspent Transaction Output)的架构。
以太坊的架构类似银行帐户,有资料库在记录每个帐号和帐号的余额,透过交易来更新。如下图所示,地址14c5f8ba在一笔交易中发送了10个eth给地址bb75a980 ,于是在交易过后双方的以太币数量便被更新了。
比特币类似钱堆,我们的地址比较像是能够操控这些钱堆的钥匙。可以把钱堆凑在一起做交易;也可以把一坨钱堆拆开来交易。每一笔交易可以有多个input(钱堆),交易后也可以变成一或多个新的钱堆。
Btc的UTXO的架构,其实是解决了Account model同一个地址(帐户)无法同时进行两笔交易的问题(Account model一定会有先后顺序,即Nonce)。Eth以太币为了避免双重花费(Double Spending:同一笔钱被花了两次),会以Nonce来标注每一笔交易的先后次序,若同时发送多笔交易,一但前面有一笔交易卡住,则后面的交易也都会跟着塞住。
那么明显可见,打个不恰当的比喻:Btc可以同时多线程 异步的,Eth是单线程 同步的(类似于io模型中,异步IO和同步阻塞IO)
3. Btc的算法注定通货紧缩,看起来他的货币不是用来流通
4. POS机制让ETH持币人终于有了发言的机会,ETH的拥有者能够决定它未来的发展方向。
5. 比特币的hash算法很容易通过ASICs(应用型专用集成电路)进行优化,经过定制的ASICs唯一能做的事情就是挖矿,但挖矿效率却比普通GPU高好几个数量级。以太坊平台的Ethash算法是memory hard的,几乎无法通过ASICs进行优化,大矿池和普通人相比并没有明显的优势。
6. 应用落地及普及方面,似乎Eth得到了更广泛的支持。微软、摩根大通、英特尔牵头成立的EEA(企业以太坊联盟)旨在开发企业级区块链解决方案,用于供应链来源跟踪、银行间支付、参考数据、证券结算等多个领域。
7. 社区可编程性:以太坊致力于将自己发展为一个计算平台。以太坊上可以运行各种各样的分布式应用,并且为此提供了开发框架,稍有编程基础的人就可以在以太坊上开发出属于自己的应用。