全节点和轻节点
全节点 | 轻节点 |
---|---|
一直在线 | 不是一直在线 |
在本地硬盘中维护完整的区块链信息 | 不用保存整个区块链,只要保存每个区块的块头 |
在内存里维护UTXO 集合,以便快速检验交易的正确性 |
不用保存全部交易,只保存与自己相关的交易 |
监听比特币网络的交易信息,验证每个交易的合法性 | 无法检验大多数交易的合法性,只能检验与自己相关的那些交易的合法性 |
决定哪些交易会被打包到区块里 | 无法检测网上发布的区块的正确性 |
监听别的矿工挖出来的区块,验证其合法性 | 可以验证挖矿的难度 |
挖矿:决定沿着哪条链挖下去;当出现等长的分叉的时候,选择哪一个分叉 | 只能检测哪个是最长链,不知道哪个是最长合法链 |
如果只是想进行转账操作,轻节点就可以进行验证。 全节点用于挖矿,在挖矿过程中,如果监听到别人已经挖出了区块并在最长合法链上,此时应该在本地接受这个区块并重新开始挖矿。
比特币是如何保证安全的?
- 密码学的保证:私钥保证了无法伪造身份。
- 共识机制的保证:恶意交易不被系统承认。
挖矿设备
挖矿设备逐渐专业化,设备内部逐渐没有多余部件。
- CPU
- GPU
- ASIC: Application Specific Integrated Circuit
矿池
矿池的出现是因为单个矿机挖矿收益并不稳定。 加入矿池可以提高挖到区块的概率,并共享挖矿收益。
矿池有两种组织形式:
- 大型数据中心:一般是属于同一个机构,在同一个地方,没有信任问题。
- 分布式加入矿池:可以按照协议远程加入矿池,矿主分配任务,矿工进行计算。
利益分配
- 平均分配:有的矿工就不干活了
- 按贡献分配:按工作量分配。矿主设置一个低难度的挖矿,然后分配给矿工,矿工提交答案来作为工作量证明,矿主根据工作量来分配真正的挖矿收益。
问题:
- 会不会出现一个矿工挖到了区块然后自己偷偷提交出去?
- 不可能,矿主分配任务,区块的地址是矿主的。
- 矿工有没有可能捣乱,挖到了区块但是扔掉了。
- 有可能。竞争对手有这样的动机。
缺点
- 有可能。竞争对手有这样的动机。
矿池的缺点: 矿主并不一定自己要有大部分的算力,矿池可以吸引不明真相的算力来构成攻击。
占有51%算力的矿池能具体发动什么攻击?
- forking attack
- boycott: 抵制某些交易地址