全节点:一直在线
在本地硬盘上维护完整的区块链信息
在内存里维护UTXO集合,以便快速检验交易的正确性
监听比特币网络上的交易信息,验证每个交易的合法性
决定哪些交易会被打包到区块里
监听别的矿工挖出来的区块,验证其合法性
挖矿:决定沿着哪条链挖下去,当出现等长的分叉的时候选择哪一个分叉
轻节点:不是一直在线
不用保存整个区块链,只要保存每个区块的块头
不用保存全部交易,只保存于自己相关的交易
无法检验大多数交易的合法性,只能检验与自己相关的交易的非法性
无法检验网上发布的区块的正确性(不保存交易)
可以检验挖矿的难度(保存块头)
只能检测哪个是最长链,不知道哪个是最长合法链
挖矿的安全基础:一是密码学基础,二是共识机制。前者是建立再后者的基础之上。倘若矿工不遵守公识,对非法交易等视而不见,再多加密算法也无用。
挖矿设备:CPU-->GPU-->ASIC(专用集成电路 Application Specific Integrated Circuit)
由通用趋于专用化,最初的普通计算机设备,到专于计算功能的设备,再到仅用来挖矿的设备
专用于挖矿的芯片迭代速度较快,往往当出现计算机突然上涨的情况,可能是新型芯片投入使用。因此可能芯片厂商完成芯片后,先自己挖矿,由于计算力优势,赚取一波红利后再出售给矿工。
矿池:pool
挖矿本身具有memoryless的特点,当新的区块被挖出来后,其他正在计算的矿机相应的计算结果就会作废,因此一个矿机可能一两年才能挖出一个区块来,导致矿工的收入极不稳定。因此,演化出矿池的概念。矿池由矿主(pool manager)来管理,矿主给手下的矿工分布任务,出块后给矿工分红,自己收取管理费用。矿工的任务是计算哈希值,矿主进行发布区块,验证管理等一系列顶层操作。
为了解决吃大锅饭现象的矿工不作为现象,矿主需要矿工提供工作量证明。矿工在给定的nonce范围内计算哈希值,当计算出与目标target相似的目标值时,将其提供给矿主作为proof of work,矿主收到提交值后,仅能将其作为工作量证明,别无他用,最后出块时,根据手下矿工提交的近似值按比例分配奖励。矿池的出现使得原本的个人矿工很难获得一大笔奖励,变成定期获得一小笔奖励。
对于矿工可能的安全因素,因为要计算的区块包含收款方即为矿池,因此矿工不可能私自盗窃区块或者提交不符的近似值。由于miner被分配到各自的nonce尝试范围,因此若有恶意miner计算出目标值后,故意不提交给矿池,尽管他自己也无法获得该出块奖励,但是这可能是来自矿池间的恶意竞争。
矿池的出现更容易造成恶意的集群的攻击。由于矿工只负责底层的计算工作,因此矿池顶部对区块进行的一系列操作对miner是不可见的,矿主可能让一群不明真相的矿工来完成自己的攻击,例如51%攻击。值得注意的是,51%并非实际发动攻击的必要因素。本身出块等等操作都是概率问题,51%只是必然攻击成功的数字。本身矿池的计算力比例就在不断地浮动中。
中国矿池占总矿池的绝大比例