一种点对点支付系统协议

1. BTC系统中的区块记录的是交易记录,并不记录每个账户的币个数,因此也被叫做基于交易的账本模式(transaction-based ledger)

2.全节点需要维护的一个数据结构叫做UTXO(unspend transaction Output)即还没有被花掉的交易输出

eg:A -------> B(5BTC)---------> D(5BTC)
         |
         |———> C (3BTC)

     由于B的5个BUC已经花掉了,因此B的币不在UTXO中,C和D个在UTXO中。

UTXO 用于快速检测double spending,即交易币的来源必须在UTXO集合内才是合法的

综上 自然而然 应该有 所有交易的总输入应该等于总输出!有些交易的输出会小于输入,可能是因为有手续费

3. 
BTC设计平均出块时间10min,21万区块出块奖励减半

(21万*10min)/(60*24*365)=4年

就是说每4年 奖励减半  到最后出现挖矿收益大于成本  到那时候就只能通过收取交易费来奖励了
很可能会降低交易量.......

4.BTC 块头构成

{
int32_t version
char[32] previous_header_hash
char[32] mrecle_root_hash
int32_t time   // 时间并不要求精确
int32_t nbits  // 挖矿目标阈值 也就是本header hash必须 <=的那个阈值
int32_t nonce  // 挖矿修改的值

ps:因为nonce空间有限  因此出块奖励中的coinbase也能用于调整来找到满足nbits条件。

影响路径就是:coinbase ----> 出块交易(铸币)hash ----> 向上传导影响merkle root hash --->影响整个快头的hash

5.挖矿过程表面上看是无意义的  但是对于维护系统是有意义的

6. 最长合法链 forking atack(分叉攻击) 和 conformation
区块链说是不可篡改的账本实际上只是一种概率上的保证,对于最新的块,如果恶意节点在其前面增加分支节点,还是有概率改变最长合法链的走向的,只有当更多的区块在后面加入,恶意节点篡改的成本大幅上升,前面的区块才能成为真正的不可篡改。

在争夺最长合法连的过程中,为了防止出现恶意节点使用回滚来达到double spending目的
一般要进行高达6个区块的conform,时间大概1h,这个叫six conformation


但是实际情况是:一般节点会接受最先接收的交易,如果再收到不合法的交易(自己给自己转账)一般不会被诚实的节点接受;再加上现实生活中从收到转账到发出商品有一段时间,是有时间处理的,因此可以采用 zero conformation


7.selfishing mining atack  先悄悄的挖很多块,再一次性接到最长链上去进行分叉攻击

风险很大,因为并不能确定能够比别人更快挖出更长链

8.BTC 网络节点

   application layer : BTC chain
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-..-.-.-
   net layer         :  P2P overlay network

   8.1 所有节点都是对等的关系!
   8.2节点要加入网络,先要知道一个种子节点,种子节点会把他知道的节点告诉你,长期收不到节点的消息,其他节点会删除该节点。
   BTC节点网络设计的目标是:简单 鲁棒性 而不是高效
   8.3 消息传播在网络中采取flooding的方式:节点第一次听到某个消息时,会将其转播给邻居节点,并且在下一次收到同样的消息时,不再进行转发。邻居节点的选取是随机的,跨国邻居节点是很正常的,这样做增强了鲁棒性

   8.4 节点都会在本地维护一个等待上链的交易集合,第一次听到某个交易就会加入集合并转发给邻居,再次收到该交易则不会做记录也不转发。假如同时发生了两笔冲突交易A和B,一些节点收到A交易,一些节点先收到交易B,那么就看谁先被写入到区块中,加入A最先被写入,那么保存B交易的节点在更新区块后需要在本地删除B交易!

   8.5 BTC区块的大小被限制在1M,这样也是为了具有普适性

9. BTC中调整挖矿难度 
挖矿条件: H(block header) <= target

SHA-256算法输出空间  2^256

difficulty = difficulty_1_target/target  挖矿难度和target成反比

9.1 为什么要调整挖矿难度?----->为了将出块时间控制在10min ----->为什么要控制时间 -----> 因为不控制,挖矿时间会越来越短,会同时在世界各地出现大量的链分叉 ----->这样的话会造成诚实节点算力被分散 ----> 恶意节点很容易通过算力优势全力扩展自己的链 -----> 整个BTC区块链陷入无序

9.2 调整难度的方法

① 每2个星期调整一次难度  
target = target * actual time / expected time
       = target * (最近2016个块的实际时间总和)/2016*10

       也就是说通过最近2016个区块的平均消耗时长来确认挖矿难度是否产生变化
       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值