课程笔记2

2023-11-17

一、实现

1.区块链是去中心化的账本,比特币采用的是基于交易的账本模式

区块链的全节点需要维护一种名叫UTXO的数据结构,所有未花掉的交易的输出的集合,可以有效检测双花攻击

交易的总输入略微大于总输出,这是因为比特币的第二个激励机制,获得记帐权的节点可以收取一定的交易费用

*还有另一种基于账本的账本模式,以太坊正是使用这种模式

下面是某个区块的具体信息

其中的hash值是根据block header计算的,不包括块身的交易

 在实际情况中,由于挖矿难度提高,很大概率会出现找不到4个字节的随机数满足target,因此节点可以改变铸币交易中coinbase的值从而改变merkel tree root hash作为额外的随机数

2.挖矿的概率分析

每次尝试一个随机数计算哈希值都是一次伯努利实验(Bernoulli trial),大量的伯努利试验组成伯努利过程(bernoulli process)。伯努利过程具有无记忆性,无论前面结果如何都不会影响到最新一次试验的结果

挖矿的试验次数很多,每次试验成功的概率很小,可以用泊松过程近似。出块时间的概率密度满足指数分布,且具有process free的性质,无论已经挖了多长时间,接下来的平均出块时间依然是十分钟

3.比特币总量

包括以挖出的和未挖出的比特币总量是2100万

区块链的节点刚发布时交易是更加容易被修改的,理论上如果某些恶意的节点在发布一个正常交易之后购买了某种商品,之后又发布另一个交易并想通过增长其后节点的个数的方式将包含正常交易的节点废弃,是可以达到双花攻击的。于是在比特币系统中存在缺省为6的6个确认,即当包含交易的节点后已经连接了六个节点之后方可认为之前的交易是不可修改的。

*Selfish Mining

自私挖矿是一种欺骗性的加密货币挖矿策略,其中一名矿工或一组人解决一个哈希值,打开一个新区块,并将其从公共区块链中扣留。此操作创建一个分叉,然后将其挖掘以领先于公共区块链

二、网络

比特币网络的应用层运行比特币协议,网络层运行的是P2P Overlay network。比特币的P2P网络中没有超级节点和主节点,所有节点都是平等的,加入网络的前提是要知道一个种子节点。

比特币网络的设计原则是简单、鲁棒而不高效

三、挖矿难度

当前挖矿难度等于targte为1时的挖矿难度除以当前目标阈值

difficulty=difficulty_1_target/target

出块时间并不是越短越好,当总算力越来越强,如果不调整挖矿难度,在极短时间内被挖出多个区块会造成多个分叉,而且网络传播具有延迟,这对达成比特币系统的共识是不利的,调整挖矿难度能够有效控制平均出块时间保持稳定。

每2016个区块(约14天)调整一次目标阈值

调整target的公式:target=target*(actual time/expected time),expected time为2016*10min

每个节点验证新区块的合法性时会验证块头中target的nBIts编码是否正确,以防某些恶意节点故意不更改target

*

 

 四、比特币脚本

1.P2PK

 

 2.P2PKH

 

3.P2SH

 

 多重签名

 

 

五、分叉

1.state fork

区块链由一条链变为两条链就叫分叉。分叉可能是多种原因造成的,比如挖矿的时候,两个节点差不多同一个时候挖到了矿,就会出现一个临时性的分叉,我们把这个分叉叫作state fork,是由于对比特币区块链当前的状态有意见分歧而导致的分叉。

前面还讲过分叉攻击(forking attack),它也属于state fork,也是属于对比特币这个区块链当前的状态产生的意见分歧,只不过这个意见分歧是故意造成的,人为造成的,所以我们又叫它deliberate fork。

2.protocol fork

还有一种产生分叉的情况是,比特币的协议发生了改变,比特币系统需要软件升级。在一个去中心化的系统里,升级软件的时候没有办法保证所有的节点同时都升级软件。

假设大部分节点升级了软件,少数节点因为种种原因可能没有升级,有可能是还没来得及升级,也可能是不同意对这个协议的修改。即假如你想把协议改成某个样子社区中可能是有人不支持的,这个时候也会出现分叉,这种分叉叫protocol fork(协议分叉)。因为对比特币协议产生了分歧,用不同版本的协议造成的分叉,我们称作protocol fork。

1)硬分叉

如果对比特币协议增加一些新的特性,扩展一些新的功能,这些时候那些没有升级软件的这些旧的节点,它是不认可这些新特性的,认为这些特性是非法的,这就属于对比特币协议内容产生了意见分歧,所以会导致分叉,而且这种分叉是永久性的。

目前已有的例子当中,分叉后新旧节点在两条链上各持己见,分别在不同的链上挖掘新的区块,因此原有的币分为两种新的币。当有交易被写入时,因为私钥是相同的,为防止同一笔交易在上下两条链中被重复写入,解决方法是加入一个chain id信息

2)软分叉

如果对比特币协议加一些限制,加入限制之后原来合法的交易或区块在新的协议当中有可能变的不是合法了,这就引起软分叉。

旧节点会接受新节点的区块,但新节点不会接受旧节点的区块,而且在大部分算力的节点都更新了软件的情况下,旧节点挖出的区块最终都不会变成最长合法链,因此软分叉都是临时的分叉。

六、匿名性

1.一般来说,匿名是跟隐私保护联系在一起的。比特币交易中不要求用真名,可以用公钥产生的地址,所以比特币具有一定的匿名性。

有可能破坏比特币匿名性的第一个方面:一个人可以生成很多个地址账户但这些地址账户是有可能被关联起来的。第二个方面:是这个地址账户跟现实世界中的身份也可能产生关联。比特币系统一旦跟现实世界联系起来,就可能泄露你的真实身份,最明显的例子就是资金的转入和转出。

2.提高匿名性:

1)网络层的匿名性。网络层的匿名性学术界已经有了很好的方案:多路径转发。跟洋葱路由(TOR)是一样的原理。即消息不是由发出者直接发送给接收者,中间要经过很多次转发。中间的每一个节点,只知道它的上一个节点是谁,但并不知道最早发出消息的人是谁。当然中间一些节点可能是坏的,但路径上只要有一个节点是诚实的,就能够把最初发起人的身份隐藏起来。这也是洋葱路由的基本原理。

2)应用层的匿名性。把不同人的币混在一起(coin mixing),即把你的身份跟别人的身份混在一起,让别人分不清楚谁是谁。不光是区块链,在其他各个需要匿名的领域都能用到。

*coin mixing真正实施起来有一定的复杂性,如果设计不好的话,别人可以根据你当初存进去币的数额,推断出来哪些币是你存进去的。

3.零知识证明:

零知识证明是指一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透露除该陈述是正确的外的任何信息。

4.同态隐藏:

零知识证明的数学基础是同态隐藏。


第一个性质说明加密函数值E不会出现碰撞,这跟哈希函数有所不同,哈希函数是可能出现碰撞的。这个性质反过来说明如果E(x)和E(y)是相等的,那么x、y也是相等的。(该语句是上面语句的逆否命题) 

第二个性质说明加密函数是不可逆的,知道加密后的值,没办法推出加密前的值。

第三个性质是最重要的,叫作同态运算。它说的是对加密之后的函数值进行某些代数运算,等价于对这些输入直接进行代数运算然后再加密。
同态加法:加密值的和等于和的加密。
同态乘法:加密值的乘积等于积的加密。

5.零币和零钞

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

课程笔记2 的相关文章

  • Windows 10使用WSL部署Chatgpt_academic

    目录 一 在windows10中安装Ubuntu系统 二 在Ubuntu系统中安装anaconda3和GPT Academic 本文主要介绍windows10使用WSL安装Ubuntu系统 然后通过安装anaconda3来部署chatgpt
  • Unity——虚拟轴

    1 虚拟轴的概念 简单来说 虚拟轴就是一个数值在之间的数轴 其中最重要的数值为 1 0 1 2 虚拟轴的模拟 以按键模拟为例 用按键模拟虚拟轴需要2个按键 一个为负轴按键 按键1 一个为正轴按键 按键2 在没有按下任何按键的时候 虚拟轴的数
  • NRF52832学习笔记(1)—— 添加自有service(基于SDK15.3)

    前言 SDK版本15 3 评估板 pca10040 在uart的例程中添加battery service 添加之前 手机连上设备之后扫描到的service如下 一 分配ram空间 softdevice的flash code是确定 但ram是

随机推荐

  • WIKIOI – 1083 Cantor表

    题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的 他是用下面这一张表来证明这一命题的 1 1 1 2 1 3 1 4 1 5 2 1 2 2 2 3 2 4 3 1 3 2 3 3 4
  • 2021上半年

    转眼间 2021年已经过去了一半 按照记账惯例 每逢月底 要对当月的财务状况进行结算 6月的话 还要再额外增加一轮年中结算 同时 受到近期一系列调整的影响 记录表也相应进行比较大的变更 以适应复杂度的增加 以至于 例行结算迟了两天才完成 但
  • 【matplotlib】AttributeError: Unknown property figsize

    AttributeError Unknown property figsize 属性错误 未知属性figsize 原代码 var YearBuilt data pd concat df train SalePrice df train va
  • Kafka【命令行操作】

    Kafka 命令行操作 Kafka 主要包括三大部分 生产者 主题分区节点 消费者 1 Topic 命令行操作 也就是我们 kafka 下的脚本 kafka topics sh 的相关操作 常用命令行操作 参数 描述 bootstrap s
  • Java中的IO流系统详解

    摘要 Java 流在处理上分为字符流和字节流 字符流处理的单元为 2 个字节的 Unicode 字符 分别操作字符 字符数组或字符串 而字节流处理单元为 1 个字节 操作字节和字节数组 Java 内用 Unicode 编码存储字符 字符流处
  • 【网络】——UDP复习笔记

    目录 1 UDP报文结构 2 UDP缓冲区 3 UDP特点 4 课后题 1 UDP报文结构 2 UDP缓冲区 UDP没有真正意义上的发送缓冲区 应用层调用sendto 函数直接将数据应用层的数据拷贝给传输层 传输层再构建UDP报头 然后再交
  • VMware——VMware Tools的介绍及安装方法

    VMware VMware Tools的介绍及安装方法 一 VMware Tools的作用 二 VMware Tools的安装步骤 参考文章 一 VMware Tools的作用 1 最大的好处是可以直接把windows界面的文件拖进linu
  • 【前端Vue】Element UI:一站式前端组件库的简单入门指南

    Element UI 一站式前端组件库的完整指南 引言 Element UI概述 常用组件介绍及用法 结语 引言 在现代的前端开发中 UI组件库扮演着至关重要的角色 它们为开发者提供了一套可重用的UI组件和工具 使得构建复杂的用户界面变得更
  • css炫酷标题,分享几个CSS小众但炫酷的技巧

    1 黑白图像 这段代码会让你的彩色照片显示为黑白照片 是不是很酷 复制代码代码如下 img desaturate filter grayscale 100 webkit filter grayscale 100 moz filter gra
  • 什么是DBMS,什么是数据库?

    马克 to win DBMS database management system 数据库管理系统 像mysql oracle sql server之类 首先没什么神秘的 都只是某个公司编的一个软件而已 比如mysql是MySQL AB公司
  • msvcp140.dll重新安装的解决方法【msvcp140.dll修复工具下载】

    msvcp140 dll文件如何安装 win10系统是目前大家常用的电脑操作系统 最近有很多用户不知道如何安装msvcp140 dll文件 这里小编今天为大家带来了msvcp140 dll文件怎么安装的方法 有需要的用户快来看看吧 msvc
  • 4.网络爬虫—Post请求(实战演示)

    网络爬虫 Post请求实战演示 POST请求 GET请求 POST请求和GET请求的区别 获取二进制数据 爬 百度官网 https www baidu com logo实战 发送post请求 百度翻译实战 使用session发送请求 模拟登
  • 喜报

    本文部分内容来自 中国AIOps现状调查报告 2023 丝小编扣1 领取完整版报告 2023年7月18日 信通院Xops产业创新发展论坛于北京成功举办 大会旨在提高企业研发运营水平 加强XOps体系建设经验分享 以三大不同主题的分论坛组成
  • 异步复位,同步释放的理解

    文章目录 什么情况下 复位信号需要做 异步复位 同步释放 处理 异步复位同步释放原理 利用前面两级触发器实现 特点 问题1 如果没有前面两级触发器的处理 异步信号直接驱动系统的触发器 会出现什么情况 问题2 复位信号存在亚稳态 有危险吗 问
  • Angular中的管道

    Angular同在在模板文件中使用一些管道 这些管道是用来对字符串 货币金额 日期等数据进行转换和格式化的 管道的本质是一些简单的函数 可以在模板表达式中用来接受输入值并返回一个按一定规则转换后的值 Angular内置管道 DatePipe
  • js数组的includes方法优化判断逻辑

    js数组的includes方法代替大量判断 优化前 function printAnimals animal if animal dog animal cat console log I have a animal printAnimals
  • Python 利用随机函数和电脑玩石头剪刀布

    首先导入第三方库 random import random 注意 使用前请先下载random函数 import random 从控制台出拳 拳头 剪刀 布 player input 请输入你要出的拳 石头 剪刀 布 电脑随机出拳 先假定电脑
  • vue+element-ui el-table组件二次封装(2023-09-03 TTable组件实现虚拟滚动,解决数据量大页面卡顿问题)

    2023 09 03 TTable组件实现虚拟滚动 解决数据量大页面卡顿问题 所有示例效果 1 简介 HTML一行代码 可以实现表格编辑 分页 表格内 外按钮操作 行内文字变色 动态字典展示 filters格式化数据 排序 显示隐藏表格内操
  • 三维旋转:旋转矩阵,欧拉角,四元数

    在介绍下面的文章前 大家如果接触到欧拉角的话 就一定要关注一个词 要顺规 在欧拉角体系里面 有12种顺规 这一点是好多文章没有让读书意识到 导致后面学习图形学里面的 heading pitch bank 时对不上号 一般百度百科里面说到的
  • 课程笔记2

    一 实现 1 区块链是去中心化的账本 比特币采用的是基于交易的账本模式 区块链的全节点需要维护一种名叫UTXO的数据结构 所有未花掉的交易的输出的集合 可以有效检测双花攻击 交易的总输入略微大于总输出 这是因为比特币的第二个激励机制 获得记