侧边栏壁纸
博主头像
聆尘风博主等级

欲买桂花同载酒,终不似,少年游

  • 累计撰写 56 篇文章
  • 累计创建 17 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

2.区块链网络原理

聆尘风
2023-11-05 / 0 评论 / 0 点赞 / 12 阅读 / 18205 字

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)——主要有交易数据和交易签名构成

说明

m_randomid

nonce,交易随机数,用于防止交易重放

m_gasPrice

gasPrice,每个单元的价格(wei为单位)

m_gas

可用gas(wei为单位)

m_blockLimit

区块链块高限制

FISCO BCOS改造,支持同一账户并发发交易

m_receiveAddress

transaction接收者地址

m_type

标志transaction类型:

1.Contract Creation:标志transaction用于创建合约;

2.Message Call:标志transaction用户调用消息

m_value

要转移的eth数量

m_data

交易相关的数据(如消息内容或合约二进制代码)

m_strCNSName

合约命名服务(CNS)支持,记录合约名称

FISCO BCOS改造,支持合约命名服务

m_strCNSVer

合约命名服务(CNS)支持,记录CNS服务版本号

m_cnsType

合约命名服务(CNS)支持,CNS类型

m_vrs

(签名相关的数据结构)

非国密(ECDSA签名相关):v,r,s


国密(SM2签名相关):pub,r,s

FISCO BCOS改造,支持国密算法

世界状态树(State)

智能合约

  • 智能合约:以太坊提供的图灵完备的编程语言

  • 部署合约:产生合约账户

以太网虚拟机

调用合约

0

评论区