2.区块链的发展历程概要
1.0——2.0——3.0——∞
1.0:2009~2015
以比特币为代表,开创区块链时代
2.0:2014~2017
以智能合约为标志的分布式账本,以太坊等
安全/性能/治理
POC&小规模生产
金融和企业级联盟链
3.0:2018~2019?
高性能低延时
大规模网络,分片和跨链
更强的智能合约,更多应用
安全和隐私保护
∞:数字化经济标准化平台化
02区块链基本工作原理
区块链系统架构
区块链节点间以P2P方式连接节点无差别地对相邻节点广播消息“一传十,十传百,百传千”最终消息全网可达
区块链节点包含超级记账本,记录区块链系统所有交易信息
区块超级记账本
后一个区块包含前一个区块哈希信息
篡改复杂度高:篡改区块i,必须篡改区块后的所有块
区块(Blocks)结构
Previous Block Hash 上一个区块的哈希
Transactions 区块内包含的交易列表
区块链上的记账模型
钱包现金(流水帐)模型
账户余额(总账)模型
03基于流水帐模型的区块链系统(bitcion为例)
Bitcoin地址( Addresses )
创建钱包地址流程:
产生随机数,作为钱包私钥Private Key
通过ECDSA算法由私钥推出公钥Public Key
Public Key = (private key)*G安全性保证
从私钥到公钥再到Bitcoin地址的计算具有单向性
注:G是secp256k1中定义的常量生成点,这里的乘法是椭圆曲线乘法
使用哈希算法,将公钥Public Key转换成Bitcoin地址
基于流水张的交易结构UTXO
UTXO: 未经使用的一个交易输出
要花掉的钱,必须是未花过的
要花的钱必须来自前一个把钱给我的来源,且我能验证这笔交易(用私钥解锁)
给接受者出一道验证题(基于接受者的公钥)
接受者用自己的私钥能解开,则可以继续花这笔钱,以此类推
相关问题
如何找零
双花
交易费
确认时间
所谓余额
交易(Transactions)---Locking/Unlocking script
Transaction Outputs(UTXO)(找零逻辑相关)
amount:UTXO包含的bitcoin数目;
Locking-script: 锁定UTXO的脚本,通常是转账接收者的比特币地址;
Transaction Inputs(花费逻辑)
每个transaction input均指向一个即将被花费的UTXO。Transaction Hash: 包含即将被花费的UTXO的transaction哈希值;
UTXOindex:UTXO在Transaction Hash对应的交易中的索引;
Unlocking-script: 用来花费UTXO的解锁脚本(如用户签名);
实例:
Alice向Bob咖啡店支付0.015比特币,产生0.015比特币输出,锁定脚本为Bob咖啡店比特币账号此时记录在区块链中的0.015比特币成为Bob UTXO的一部分,作为可用余额出现在Bob钱包中;Bob花费该笔钱时,提供包含Bob私钥签名的解锁脚本解锁UTXO
默尔克树(Merkle Trees)
默克尔树作用:交易存在性验证,防双花
应用场景:区块验证、SPV轻客户端交易验证
默克尔树构造原理:基于哈希算法的二叉树,包含一个区块内所有交易,可有效验证指定交易是否包含在某个区块内。
获取交易E默克尔路径示例: 设某个区块内有(A,BCD五个交易,则其构建的默克尔树如下(bitcoin中使用sha256哈希算法)
04基于总账模型的区块系统(Ethereum为例)
基于总账的交易结构:面向账户的交易
交易数据
发起人
目标地址
调用方法
输入数据
执行引擎
帐户数据
地址代码
余额
业务数据
UXTO交易本身没有“余额”的概念,需要进行汇总才能结算出余额帐户体系里,帐户里保存余额等状态
账户(Accounts)
外部拥有账户(Externally Owned Accouts)
持有私钥
不与任何代码关联 && 可创建合约账户
可通过发交易的方式调用合约代码
可向其他外部拥有账户发交易
如Alice创建的Ethereum账户0x64fa644d2a694681bd6addd6c5e36cccd8dcdde3
合约账户(Coutract Accounts)
与代码关联
不能主动发交易,只可被外部拥有账户调用,完成访问账户存储、发送消息或创建合约的功能
如Alice部署合约产生的账户0x73479ed8162e198b9627b962eb4aae7098bdc770
账户地址(Account Address)生成原理
外部拥有账户地址 :(sha3(public key)[12], sha3(public key)[31) 取账户公钥哈希值最后20个字节
合约账户地址:
(sha3(rlp(sender, nonce))[12] , sha3(rlp(sender, nonce))[31])
sender: 部署合约的账户地址(可以是外部拥有账户,也可以是另一个合约账户)
nonce:包含合约部署逻辑的交易nonce(用于防交易重放)
账户状态(State)——存储账户的代码、余额、存储状态等
说明:
nonce
ethereum中,nonce是外部拥有账户发交易的起始序列号、合约账户创建合约的起始序号
balance:账户拥有的ether数目(Wei为单位)
codeHash: 账户合约代码
合约账户:fisco-solc编译器编译后的二进制代码
外部拥有账户:空字符串的哈希值
storageRoot:账户存储内容hash值构成的Merkle Patricia树的根节点哈希值
交易(Transactions)——主要有交易数据和交易签名构成
世界状态树(State)
智能合约
智能合约:以太坊提供的图灵完备的编程语言
部署合约:产生合约账户
以太网虚拟机
调用合约
评论区