BTC协议的设计【区块链学习笔记3】

BTC的协议,就是BTC应该怎么去设计,需要讨论的去中心化的货币要解决的问题:
1、货币的发行。(谁有权力决定发行数字货币、货币什么时候发行、该发行多少)

--->只是单纯的签名会存在双花问题
2、验证交易的有效性。(如何防范双花攻击

3、怎么决定哪些区块可以入链?--->投票,单纯的投票会有问题,可能会有女巫攻击,需要用算力来投票。谁先算到谁入链--->存在几乎同时算到的区块,即分叉攻击-->就要看谁符合最长合法链原则
就看哪个链在比特币系统中,货币的发行是由挖矿决定的。拥有发行货币的权利叫做铸币权。--->记账权

数字货币的签发

数字货币的签发: 数字货币通过一个名为coinbase交易(即coinbase transaction)创建,这是每个区块的第一笔交易,也是唯一一笔可以“凭空”创建新币的交易。--->区块成功入链之后会获得对应的比特币--->这也就是块奖励(Block reward):初始每21万个区块减半一次,从50 BTC开始--->+21万个区块 25 BTC --->+21万个区块 12.5BTC--->...

交易的有效性与合法性

Double spending attack双花问题

同一笔资金被多次消费。

为了防止双花问题,需要维护一个数据结构,来检测货币有没有进行过交易,交易方是谁。这个数据结构是由所有的用户维护,也就是区块链。

比特币中设计是每笔交易都需要有一个明确的输入(指向一笔之前未花费的交易输出)和输出(指定新的资金所有权)。即:每个交易包含输入和输出两个部分,输入部分要包含币的来源、交易发起方的公钥 。发起方的公钥要与币的来源的HASH要对得上 --->要追溯到coinbase(交易相关的资金的创币交易) 才能证明当前的转账有效。

BitCoin Script 比特币脚本

对交易的输入输出验证过程,在Bitcoin的具体实现是通过执行脚本来实现的:每个交易的输入是一段脚本(包括公钥的指定),每个交易的输出也是一段脚本,把当前交易的输入脚本与提供币的来源的交易的输出脚本拼在一起(合成一段程序),看是否能够顺利执行。--->BitCoin Script

区块结构:

Block headerBlock body
版本 versiontransaction list交易列表
指向前一个block的指针hash of previous block header
整颗Merkle tree的根哈希值 root hash
target目标阈值的编码 nBits
nonce随机数

 

 

 

 

 

 

 

整个链的安全性

网络节点

full node: fully validating node全节点

light node:系统中大部分是轻节点,不能独立验证交易的合法性,轻节点没有参与区块链的维护,只是利用区块链的信息进行一些查询。

比特币系统中有很多的网络节点,每个节点都可以提交预选块,但不是每一个合法的预算块都可以入链。

Distributed consensus 分布式的共识

账本的内容要取得分布式的共识 distributed consensus--->distributed hash table--->确保所有参与节点同意账本内容。

分布式共识的一个简单例子:分布式哈希表
系统里有很多机器,共同维护一个哈希表,需要取得共识的内容是哈希表中保存的key和value。

不可能结论:

1.FLP impossibility result

asynchronous的系统,哪怕只有一个成员faulty,也没法达成共识。(全票通过才行)

2.CAP Theorem:三个特性最多可以同时达到两个

C:consistency

A:availabilty

P:partition tolerance

Consensus in BitCoin 比特币中的共识

假设:系统中大部分的节点都是好的,少部分是恶意的 

比特币中对于共识协议的设计可以理解为怎么决定哪些候选区块可以加入链?

设置共识形式的方法:
投票形式:比如某个节点提出候选区块,根据交易信息选择哪些信息是合法的,然后把这些交易按照某个顺序打包到区块里,候选区块发布给所有节点,每个节点收到区块后检测交易是否合法,如果都合法就投赞成票,如果有一个交易是非法的就投反对票,最后统计如果赞成票超过半数,这个区块就正式被接受到区块链中。

任何需要投票的方案首先要基于谁有投票权(membership)。如果区块链的投票权是有严格定义的,不是谁都可以随便加入的,比如Hyperledger fabric 联盟链,只有符合条件的才可以加入,在这种情况下,基于投票的方案是可行的。

一个去中心化的系统,常见的决定方案是投票,问题:任何投票的方案都需要确定谁有投票权--->membership--->如果比特币系统网络中的节点都拥有投票权,无法排除会有部分恶意的节点,创建多个账号从而影响到最终的投票结果,这是不公平的,这种安全隐患被称为女巫攻击

Sybil attack 女巫攻击

利用网络中的少数节点控制多个虚假身份,从而利用这些身份控制或影响网络中大量正常节点的攻击方式。

比特币系统的解决女巫攻击的机制:用计算力 (Proof-of-Work)投票。每个节点都可以在本地组装出一个候选区块,把认为合法的交易放在该区块中,然后尝试各种nonce值(4bytes,32bits),看哪一个nonce可以满足H(block header) =<target的要求,求出的哈希在指定范围之内,如果某个节点找到了符合要求的nonce,这个节点就获得了记账权。--->也就是谁先算出来谁入链,而不是谁得到大家(节点或账户)的投票多谁入链。

记账权就是往比特币这个去中心化账本里写入下一个区块的权利,只有找到了正确的nonce,获得了记账的节点才有权利发布下一个区块。其他节点收到这个区块后要验证这个区块的合法性,检查nonce值是否小于等于目标预值和nBits是不是符合比特币协议中规定的域的难度要求等块头中的信息是否符合要求,再检查块体的交易数据列表,验证每个交易都是合法的,一要有合法签名,二要交易的币不是二次或多次交易,如果有任何一个信息不符合要求,那么这个区块是不能被接收的.

Forking attack 分叉攻击 

试图通过产生分叉来回滚交易。

要解决分叉攻击,就要符合最长合法链原则:如果有两个候选块同时获得记账权:等长的分叉,就看哪个分叉最先发展为logest valid chain 最长合法链

在分叉解决后未被选中的的块被称为:orphan block(被抛弃的块)。

总结:

比特币的共识机制是靠算力(hash rate)来投票的:

hash rate--->决定了投票的权重--->sybil attack是依靠创建账户,但是创建账户并不会影响 hash rate,不会影响每秒算出nonce的数量。puzzle friendly性质保证了求解nonce值的过程没有捷径。 hash rate越高,获得记账权,得到奖励的概率越高。

Mining挖矿

通过计算力来争取记账权的过程,决定了挖矿的难度和可能的奖励。

Bitcoin--->digital gold 数字黄金

Miner--->中国记账权的节点 被称为旷工
 

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
引用: 如果要使用docker容器中的btc节点,请取消注释fdocker-compose文件的btcd-testnet部分,并在cmd/multy.config BTCNodeAddress字段中设置其地址。 引用:通过统一的界面获取300多种加密货币的钱包余额。 与:可选的API密钥支持,用TypeScript编写,使用node-fetch而不是弃用的request,较小的图书馆。 根据以上引用内容,btc钱包 node是指在docker容器中的btc节点,可以通过设置docker-compose文件中的btcd-testnet部分,并在cmd/multy.config 的BTCNodeAddress字段中设置节点的地址获取。该节点可以用于获取多种加密货币的钱包余额,并且支持可选的API密钥。这个节点是用TypeScript编写的,并使用了node-fetch库,相对较小。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Multy-back:Multy的后端-移动Multy区块链钱包](https://download.csdn.net/download/weixin_42134168/14974063)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [balance-crypto:with通过统一的界面获取300多种加密货币的钱包余额](https://download.csdn.net/download/weixin_42169245/15910733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值