基本工作流程
新交易发起流程
- 用户通过公/私钥与区块链网络进行交互
- 处理用户交易的节点向网络邻节点广播用户交易
- 邻节点验证交易的有效性;可信,继续向其它邻节点广播;不可信,丢弃。
新区块产生流程
- 矿工尝试将一个时间区间内的交易进行打包形成新区块(怎么打包,看下文)
- 生产出新区块的矿工节点向网络广播新区块
- 收到新区块的网络节点验证该区块的有效性
网络共识
所有区块链网络节点需要对交易以及其在新区块里面的顺序达成一致(交易的有效性以及交易的打包顺序)。
可能出现:
- 女巫攻击——单一实体以多重身份重复对新区块结果进行表决(少数人抓住了网络的投票权)
- 拜占庭将军问题——分布式对等网络的通信容错问题
- 不同的计算机通过通讯交换信息达成共识而按照同一套协作策略行动
- 成员计算机可能出错而发送错误信息
- 网络的不可靠性
- 从而影响网络共识的达成,破坏一致性。
- 不解决的话可能导致——区块链分叉
- 不同的计算机通过通讯交换信息达成共识而按照同一套协作策略行动
解决方案:
- 工作量证明(proof-of-work, PoW),权益证明(proof-of-stake, PoS),白名单机制(仅适用于私有网络)等
- 实用拜占庭容错算法
局限
网络共识机制的实现导致了:
- 交易吞吐量
- 更高的交易时延。交易确认时间(只有打包的新区块中才交易才会被承认)。
共识机制的伸缩可以一定程度上解决上述问题
资产交易
简单交易状态描述,以集中式数据库为例
假设初始状态为
-------------------------
| 资产类型 | 所有者 | 数量 |
-------------------------
| CNY | 防风 | 10 |
-------------------------
| CNY | 红薯 | 0 |
-------------------------
防风 向 红薯 转账 2 CNY
-------------------------
| 资产类型 | 所有者 | 数量 |
-------------------------
| CNY | 防风 | 8 |
-------------------------
| CNY | 红薯 | 2 |
-------------------------
数据库中相应记录的更改完成了资产的交易过程。
在区块链中,仍然将分布式链看作是一个达成共识的集中式数据库
那么现在的初始状态可以表示成
---------------------------------
| 资产类型 | 所有者 | 数量 |
---------------------------------
| IOTA | 防风 pub_key | 10 |
---------------------------------
现在的所有者由公钥表示,想要修改记录必须提供对应的密钥。
例如,防风 向 红薯 转账 2 IOTA ,需要提供防风的私钥和红薯的公钥。交易记录修改结果:
---------------------------------
| 资产类型 | 所有者 | 数量 |
---------------------------------
被删除了 | IOTA | 防风 pub_key | 10 |
---------------------------------
| IOTA | 红薯 pub_key | 2 |
---------------------------------
| IOTA | 防风 pub_key | 8 |
交易的概念流程:
- 定位防风所有的资产记录行
- 删除该行前验证密钥
- 确认该记录没有被别的交易使用(双花问题,双重交易)
- 写入新的正确的记录(红薯获得的资产 & 防风剩余的资产),确保交易前与交易后资产总额不变
上面的模型 —— 基于比特币的交易模型(UTXO model)
适合于数字标记资产的传输与追踪
- 概念:UTXO (unspent transaction outputs) 未花费的交易输出:数据库现有的记录
-——————————–
另一种模型常用于智能合约 —— 基于账号的模型(account-based model)
提供了建立多步骤执行的基本机制
资产如何产生
- 比特币:
- 矿工节点允许在挖出的新节点中加入一种 coinbase 类型的交易(不存在交易输入,新资产数额有比特币链提前定义)
- 在创始新代币的时候全额发行
- 其它机制
区块链特性
- 一种健壮的、真正的分布式对等系统,它能容忍节点故障。
- 能够识别冲突和分叉并自动解决的网络,以便收敛到单一的、公认的唯一状态。(区块链永远选择最长的分支来达成网络上的共识)
- 网络活动的透明性、可验证性、可审计性。我们能获取可验证的过程,无论它们是否交换和跟踪数字资产,还是数据驱动的交互。每一个行为,都存有公开的与网络交互的记录,并以此来消除人为的矛盾。
- 这是一种可以标记不同信息的触发者的方法,并且能够在没有中央权威的情况下强制执行。
- 这是一个使得不信任双方根据可预测的、确定性的方式交互的系统。
智能合约
自动化地执行一系列合约条款的交易协议
智能合约是存储在区块链中的脚本(认识上可以与关系型数据库的存储过程类似)。
以基于账号的模型为例对合约执行进行描述:
假设定义一个合约,包括三个方法
(1) “存储”——合约的“存款”功能允许 防风(通过防风的密钥验证)将若干单位的X存入合约中;
(2) “交易”——“交易”功能允许任何人向合约发送5单位Y,并从合约持有的X中返回1单位给交易方;
(3) “撤销”——“撤销”功能允许 防风 取出合约中存有的所有资产。
请注意,上述“存款”和“撤销”功能被限制为只允许被 防风(实际上是防风的私钥)调用。当然,这只有由于上述合约由防风制定。若人为的制定一个所有人都能调用任何功能的合约也是允许的(虽然这在事实上没有意义)。
那么在基于账户的模型下,可以认为 拥有“存储”、“交易”、“撤销”方法的合约持有一个单独的账户(与用户所持有的账户等价)。
在上述合约下,这个账户将可能持有一定数量的资产。除了只能按照预定的合约步骤对资产进行处置之外,其它与用户持有的账户别无二致。
__ __
/ _| __ _ _ __ __ _ / _| ___ _ __ __ _
| |_ / _` | '_ \ / _` | |_ / _ \ '_ \ / _` |
| _| (_| | | | | (_| | _| __/ | | | (_| |
|_| \__,_|_| |_|\__, |_| \___|_| |_|\__, |
|___/ |___/