区块链的通用元素
现在,让我们来看看区块链的通用元素。 如果您需要查阅提示区块链的不同部分,可以将本章用作便利的参考章节。 更精确的元素知识将在后面章节中各自的区块链的上下文中讨论,例如,以太坊区块链。 借助下图可以显示通用区块链的结构:
这里一个接一个地描述通用区块链的元素。 这些是与区块链相关的元素:
地址:地址是区块链交易中用于表示发件人和收件人的唯一标识符。地址通常是公钥或从公钥派生。虽然地址可以由同一用户重用,但地址本身是唯一的。然而,在实践中,单个用户可能不会再次使用相同的地址并为每个交易生成新的地址。这个新创建的地址将是唯一的。事实上,比特币是一个假名系统。最终用户通常无法直接识别,但一些关于移除比特币用户匿名性的研究表明,他们可以成功识别。一种好的做法是让用户为每个交易生成一个新地址,以避免将交易链接到公共所有者,从而防止识别。
交易:交易是区块链的基本单位。交易表示从一个地址到另一个地址的价值转移。
块:块由多个交易和其他元素组成,例如前一个块哈希(哈希指针),时间戳和随机数。
对等网络:顾名思义,对等网络是一种网络拓扑,其中所有对等体可以相互通信并发送和接收消息。
脚本或编程语言:脚本或程序对交易执行各种操作以便于实现各种功能。例如,在比特币中,交易脚本是在一种名为Script的语言中预定义的,它由一组命令组成,这些命令允许节点将令牌从一个地址转移到另一个地址。然而,脚本是一种有限的语言,它只允许执行交易所必需的基本操作,但它不允许任意的程序开发。可以将其视为仅支持标准预编程算术运算的计算器。因此,比特币脚本语言不能称为图灵完备的。简单来说,图灵完备语言意味着它可以执行任何计算。它以Alan Turing的名字命名,他提出了图灵机的概念,可以运行任何复杂的算法。图灵完备语言需要循环和分支功能来执行复杂的计算。因此,比特币的脚本语言不是图灵完备的,而以太坊的Solidity语言则是。
为了促进区块链上的各类程序开发,需要图灵完备的编程语言,现在它是区块链上非常理想的特性。 可以将其视为允许使用编程语言开发任何程序的计算机。 然而,这些语言的安全性是一个至关重要的问题,也是一个必不可少的持续研究领域。 我们将在本书后面的第5章,比特币介绍,第9章,智能合约和第13章,开发工具和框架中更详细地讨论这个问题。
虚拟机:这是前面介绍的交易脚本的扩展。 虚拟机允许图灵完备代码在区块链上运行(作为智能合约); 而交易脚本的操作受到限制。 但是,并非所有区块链都提供虚拟机。 各种区块链使用虚拟机来运行诸如以太坊虚拟机(EVM)和链虚拟机(CVM)之类的程序。 EVM用于以太坊区块链,而CVM是为称为Chain Core的企业级区块链开发和使用的虚拟机。
状态机:一个区块链可以被看作是一个状态转换机制,通过一个交易执行、验证和最终化过程的处理,一个状态被从它的初始形式修改为下一个,最后被区块链网络上的节点修改为最终形式。
节点:区块链网络中的节点根据其所承担的角色执行各种功能。 节点可以提出并验证并执行挖掘以促进共识并保护区块链。 通过遵循共识协议(最常见的是PoW)来实现该目标。 节点还可以执行其他功能,例如简单的支付验证(轻量级节点),验证和许多其他功能,具体取决于所使用的区块链的类型和分配给节点的角色。 节点还执行交易签名功能。 交易首先由节点创建,然后由节点使用私钥进行数字签名,若他们希望转移资产到区块链网络上的其他人,这要作为资产合法所有者的证据。 此资产通常是令牌或虚拟货币,例如比特币,但它也可以是使用令牌在区块链上表示的任何真实资产。
智能合约:这些程序在区块链之上运行,并封装了在满足某些条件时要执行的业务逻辑。 这些程序是可强制执行的并且可以自动执行。 智能合约功能并非在所有区块链平台上都可用,但由于其为区块链应用程序提供的灵活性和力量,它现在正成为一项非常理想的功能。 智能合约有许多用例,包括但不限于身份管理,资本市场,贸易融资,记录管理,保险和电子政务。 智能合约将在第9章智能合约中详细讨论。