区块链基础模型
1.区块
图中的每个区块分为 block header 和 block body 两部分
包含着账户信息以及交易信息 具体信息如何存储后面再介绍以太坊中的数据结构h会具体介绍。
2.区块链
区间指针通过链式结构结合而成的就是我们经常说的区块链,只不过这个链表指针中存储的并非我们通常说的地址,而是存储了上一个区块的hash值。
3.全节点和轻节点
区块链是去中心化的。如何体现去中心,整个以太坊网络包含着多个很多个节点。
全节点存储着完整的区块链,每次数据的变更,需要通过共识机制,广播给所有全节点。轻节点存储着区块链中的block header部分(也是区块组成的链,只不过每个区块只包含block header)。
轻节点的作用只是用来查询,不对区块链中数据合法性负责,可以把我们自己的钱包理解为1个轻节点(这种理解在目前的市面上的钱包并不对,但可以先这样理解)。
基于账户模型的以太坊
这个是大部分区块链的通用模型。并没有体现出何为基于账户的模型。那是否还有其他模型?
重点是刚刚有说,我们的区块block body中会存储账户信息。另外一种更著名的区块链应用-比特币并没有采用这种“基于账户的模型”, 而是采用基于交易的模型。
基于交易的模型
如上图所示,比特币并不存储账户余额,而是存储每一笔交易。
我们再看下比特币是如何转账的。
当转账的时候,需要解释钱从何而来。
比特币在转账的时候会要求一次性全部转出,即需要把交易后的余额转入自己的另外1个账户(很多人的比特币因此丢失)。
比特币和以太坊2种不同的设计思路取决于其设计目的:
比特币是纯金融货币属性。所以更注重安全性,每次转账都进行账户切换。
以太坊为了要支持智能合约,合约是1个持续的过程,所以需要稳定的账户。
应对攻击
我们可以看看2种设计在面对一些常见攻击时是如何应对的。
1.双花攻击
双花攻击即一份钱花2次。为什么会出现双花攻击呢?主要原因是数字货币和纸币不同,复制是无成本,不可校验的。
比特币如何解决双花攻击,就是需要每次在花钱的时候说明钱从何而来,这样相当于用交易链去溯源。
以太坊面对双花攻击是自然屏蔽的,因为有了账户的概念,每花一次钱都需要将账户余额减小对应值。
2.重放攻击
重放攻击即将同一次交易多次发布。
比特币中由于使用了基于交易的模型,每次转账完成,钱都会到1个新的账户,所以重放攻击对比特币是无效的。
以太坊由于要维护账户的稳定,所以重放对以太坊是有威胁的,以太坊为了解决这个问题,引入了交易次数,每次交易的时候都会将交易次数一并签名,这样重放攻击者无法修改交易次数攻击无效。
可以看到由于最开始设计理念的不同,在遇到不同的攻击方式时,需要采用不同的策略去应对。
以太坊账户分类
以太坊中包含2种账户
1.外部账户,可以把钱包理解为1个外部账户,里面放着我们每个用户的余额。
2.合约账户,因为以太坊支持了智能合约,所以合约账户里面不仅包含着余额 还包含着代码和需要存储的数据。
我们在调用智能合约的过程,其实就是在和合约账户交互的过程。
结尾
后续会继续用几篇文章来介绍以太坊技术,原因在于以太坊作为web3的基础所在,有必要学习内部原理,帮忙我们去更好地去深入讨论思考web3的后续发展。