交易
从行为的角度解释,交易等同于操作(Operation)。比如在以太坊中,一个操作可能就是执行了智能合约中的一个方法。
而如果我们从计算机技术的角度分析,交易实质就是原子事物,要么成功要么失败,不可能存在成功了一半的情况。
交易哈希
from和to是指交易的发起和接收方,
智能合约表示这笔交易要执行的智能合约的名称(智能合约在第9讲)
附带了执行智能合约对应的方法以及执行该方法时应该附带的参数列表
时间戳字段表示该交易在客户端构建的时间
最后是一个签名,一般是from字段的账户签发的,代表不是其他人伪造
区块链中所有的交易基本上都是从区块链网络外发起的,区块链网络只接收交易而不生产交易,且不对交易做任何改动
区块
你可以这样理解交易和区块的关系,交易相当于是货物,而区块则是能够容纳多个交易的集装箱。
区块是指将节点一段时间内收到的所有交易打包而形成的一种数据结构
区块哈希
区块结构
区块头包含该区块的基础属性,重要的属性主要有 4 个:前置区块哈希用于区块间的关联,交易根哈希用于区块与交易的关联,区块高度用于标记当前区块在区块链中的位置,方便定位,而时间戳记录了区块打包的时间。
区块体则只有交易,且交易是有先后顺序的,一般是按照交易的时间戳字段进行排序
区块间关联
每一个区块都会包含前置区块哈希作为逻辑关联两个区块的那个锚点。
区块哈希跟交易哈希类似,是区块的外置属性,在区块构建完成后才能得到。如果我们从当前区块一步一步往前追踪,最终会找到创世区块,而创世区块也是有前置区块哈希的,
区块与交易
主要是因为引入了一个不常见的数据结构:默克尔树,我们可以先了解一下它。
默克尔树是一种树状结构,一般情况下至少有三层,分别是叶子节点,中间节点以及根节点,中间节点的层数取决于叶子节点的数量,叶子节点的数量越多,默克尔树的深度就越高。
对照前面的区块示意图我们可以发现,区块体中包含的交易所对应的交易哈希,可以作为默克尔树的叶子节点,然后依次往上进行哈希计算,最后得到的根哈希就是区块体所有交易的交易根哈希,这个数据将会记录在区块头中。
如果我们使用了默克尔树,叶子结点哈希的任何变化都会一层层传递到父节点、根节点,防止篡改很容易找到出错的分支
区块链之所以叫区块链,从字面理解,正是因为区块这种特殊的数据结构决定的。
状态
在区块链中执行的每一笔交易都有一个输出,而状态就是交易执行后输出的累积
有限状态机
有限状态机的概念,即在一个封闭的系统中,如果状态起始条件一致,状态改变条件顺序一致,最终一定会得到一致的结果。
与数据库的异同
数据库更看重状态,而区块链却以记录历史区块为主,状态为辅。正所谓一个活在当下,一个怀念过去。
状态模型
大致可以将状态模型的设计归纳为三种模型。
1、以比特币为首的专注于数字货币的区块链使用 UTXO 模型,即未花费的交易输出。未花费的交易输入告知货币是从哪里来的,未花费的交易输出告知货币往哪里去。
2、以太坊区块链采用的账户模型,通过数字的加减表示账户余额的变化。
3、最后一类通用模型在账户模型的基础上更进一步,没有内置状态属性,可存储任意自定义数据,被广泛应用在联盟链中。联盟链的定位是支持企业级应用的区块链平台,而企业业务的种类及模式是无法预知的,因此无法在设计中内定状态模型。
网友评论