区块链技术与应用视频笔记(5-)

第5讲 BTC-实现

基于交易

transaction-based ledger
比特币全节点需要维护一个UTFO(Unspend Transaction Output)的数据结构,用于检测 双花攻击

费用

每次交易可以设置交易费(可选),交易费越高,记账优先级越高
每隔10分钟产生一个新区块,每隔4年出块奖励减半
在这里插入图片描述

block例子

来源:https://www.blockchain.com/btc/block/0000000000000000001e11d32315a87083514934f85c538c1efcd54a09a3284f
在这里插入图片描述
在这里插入图片描述

Block header数据结构

在这里插入图片描述
随着时间增加,仅仅更改nonce无法满足调整挖矿难度的需求(搜索空间不够大),需要调整merkle root hash。
在这里插入图片描述
调整merkly root的过程示例
在这里插入图片描述
将输入脚本和前一个交易的输出脚本配对
外层循环调整noce,内层循环调整coinbase
在这里插入图片描述

挖矿分叉和验证

Bernoulli trial: a random experiment with binaty outcome
Bernoulli process: a sequence of independent Bernoulli trials
memoryless 无记忆
Poisson process
exponential distribution
整个系统的出块时间,平均时间为10min,呈指数分布
process free将来还要挖多少时间和已经挖了多少次是无关了,就像掷硬币,下一次结果不受上一次的影响。保证了挖矿的公平性,算力优先
在这里插入图片描述
geometric series比特币数量构成几何序列,未来极限是2100w个比特币
Bitcoin is secured by mining
在这里插入图片描述

  • 如果存在10%的矿工是恶意的,会不会出现偷币的现象?
    诚实的节点会不验证
  • 防范double spending
    诚实节点不会在非法分支继续(诚实节点算力大的情况下)
    confirmation,一般要等6个
  • 不可篡改性是概率上的,刚写入的区块链存在被篡改的可能,随着时间篡改的概率指数级下降

验证

在这里插入图片描述
在这里插入图片描述
zero confirmation:诚实节点会优先接受首个被挖出的新区块;交易过程有时延,如购物到发货有时间间隔,卖家发现钱没有到账还是可以取消发货

selfish mining

挖到多个区块之后再发布,会存在被抢先发布的风险

基于账户(以太坊)

accounted-based ledger

第6讲 BTC-网络

第8讲 挖矿

全节点和轻节点

在这里插入图片描述
在这里插入图片描述
轻节点假设矿工不会挖出非法的交易区块
仅需要转账,轻节点就够了

扫描二维码关注公众号,回复: 9091838 查看本文章

比特币安全性的保证

  • 密码学上的保证,无法伪造签名
  • 共识算法

挖矿设备:

  1. 普通PC(CPU),CPU闲置
  2. GPU,主要用于大规模通用并行计算。噪音大,部件闲置,比如用于深度学习的浮点数。比特币挖矿需要整数。当前挖矿难度超过GPU的算力
  3. ASIC: Application Specific Intergrated Circuit. 可以分别为不同的加密货币定制。mining puzzle,merge mining特殊情况。比特币芯片设计时间大概为1年,史上最低之一。
    ASIC resistance

矿池、矿工

矿主负责监听交易,矿工只负责挖矿,按照工作量参与分红
可以保证矿工的收入稳定,简化矿工流程
on demand computing(云计算)
on demand mining

share,alomost valid block, 证明工作量
60个0的Nonce为一个share,矿主记录share数目,等到出块之后分配

偷走出块奖励,矿工的任务是由矿主分配的。coinbase的收款地址是矿主,如果地址改变了,提交share时候,矿主不认

矿工捣乱,不提交自己挖到的Nonce,只分享share

矿主分配

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

矿池攻击

分叉攻击

Boycott

不让某一个地址或账户的交易上链
或者一旦上链,马上分叉攻击,导致其他人不再包含某个账户

第9讲 比特币脚本

交易结构

在这里插入图片描述
基于栈的语言
在这里插入图片描述

"result": {
    "txid": "",
    "hash": "",
    # 使用的比特币版本号
    "version": 1,
    # 区块大小
    "size": 226,
    # 生效时间,大多数情况下为0,表示立即生效
    "locktime": 0,
    # 输入和输出
    "vin": [...],
    "vout": [...],
    # 交易的区块哈希值
    "blockhash": ""
    "confirmations": 23,
    "time":1530846727,
    "blocktime": 1530846727
}

交易的输入

"vin": [{
	# 钱的来源
    "txid": "",
    # 钱来自于txid中第vout个输出
    "vout": "",
    # 证明你有
    "scriptSig":{
        "asm": "",
        "hex": ""
    },
}]

交易的输出

在这里插入图片描述

  • value 单位可以是btc也可以是cong
  • n表示序号,第n个输出
  • scriptPubKey 表示输出脚本
  • reqSigs 表示需要多少个签名才可以,有的需要多个签名
  • type 表示输出类型
  • address 输出地址
发布了57 篇原创文章 · 获赞 12 · 访问量 7720

猜你喜欢

转载自blog.csdn.net/volunteer1024/article/details/98221582