探索比特币多面体

目录

前言

一、比特币挖矿

1.挖矿设备的演化

2.矿池

二、比特币脚本

1.交易结构

2.交易的输入

3.交易的输出

4.P2PK

     输入输出脚本的形式

     实际执行情况

5.P2PKH     

     输入输出脚本的形式

     实际执行情况

6.P2SH

     输入输出脚本的形式

7.进一步说明

8.多重签名

9.脚本执行

10.Proof of Burn

     输入输出脚本的形式

11.销毁原因/应用场景

三、比特币分叉

1.分叉(fork)

2.硬分叉

3.软分叉

四、比特币的匿名性

1.比特币中什么情况下,会破坏匿名性?

2.比特币的匿名性有多好?

3.假设你是一个比特币用户,怎么最大程度提高匿名性?

4.零知识证明

5.同态隐藏例子

五、比特币引发的思考

1.哈希指针

2.区块恋

3.分布式共识

4.量子计算

六、问题-解答

1.转账交易时接受者不在线怎么办?

2.假设某个全节点,收到转账交易。有没有可能转账交易中,接受者的收款地址是这个节点之前没听说过的?

3.账户私钥丢失怎么办?

4.私钥泄露怎么办?

5.转账写错地址,怎么办?

6.如何找到最先找到nonce的矿工?(因为可能会有矿工偷nonce)

7.如何知道交易费该给哪个矿工?  


前言

     本文为整理记录学习比特币挖矿,比特币脚本,比特币分叉,比特币的匿名性和比特币引发的思考的笔记。图片清晰度可能不够高,希望这不影响您的观看体验。如果有任何错误,请随时指出,感谢您的阅读

一、比特币挖矿

1.挖矿设备的演化

     CPU(通用计算):它的缺点大部分是资源被闲置

     GPU(通用并行计算):效率比CPU高,为了通用并行计算设计。但用来挖矿的话,用于浮点数运算的部件会闲置

     ASIC芯片(挖矿专用)(Application Specific Integrated Circuit):专门用于比特币挖矿,计算哈希值的操作而设计。性价比高,但研发周期长

     总结:挖矿设备总的演变趋势,从通用变得专用

2.矿池

     矿池:组织矿工,做为一个整体

     矿池的架构:一个全节点驱动很多矿机(图片所示)

     图中下面的矿工只负责计算哈希值,全节点的其余职能都给pool manager来做(监听交易,打包区块等)

     矿池出现目的:解决收入不稳定的问题

     总结:大型矿池的出现,让矿工减轻了负担。矿工只需要负责挖矿和计算哈希,别的都是矿主来做,并且收入分配更加稳定

二、比特币脚本

1.交易结构

     locktime:设定交易的生效时间(0表示立即生效)

     vin,vout:输入和输出部分

     time:交易产生时间

     blocktime:区块产生时间

2.交易的输入

     每个输入要说明,输入花的币是来自哪个交易的输出(txid和vout)

     scriptSig:输入脚本

  (一个交易可以有多个输入,图中只有一个输入)

3.交易的输出

     图中例子有两个输出

     value:输出金额,单位比特币

     n:序号,表示是第几个输出

     scriptPubKey:输出脚本

     asm:输出脚本内容

     reqSips:需要多少个签名才能兑现

     addresses:输出的地址

4.P2PK

     输入输出脚本的形式

     ①最简单的形式

     输出脚本直接给出收款人的公钥

     checksig:检查签名的操作,在输入脚本里直接给出签名(这个签名是用私钥对这个输入脚本所在的交易的签名)

     实际执行情况

     图片中是把输入脚本和输出脚本拼接起来后的结果

     实际上,为了安全考虑,两种脚本是分开来执行

     第一条语句:把输入脚本里提供的签名压入栈

     第二条语句:把输出里提供的公钥压入栈

     第三条语句:弹出栈内元素,用公钥检查签名正确性(正确输出true 错误输出false)

5.P2PKH     

     输入输出脚本的形式

     ②它和第一种的区别,输出脚本里没有给出收款人的公钥,给出的是公钥哈希

     它是最常用的形式

     实际执行情况

     第一条语句:签名压入栈

     第二条语句:公钥压入栈

     第三条语句:复制栈顶元素(栈顶就会多出一个公钥)

     第四条语句:栈的元素弹出来,取哈希,然后把该哈希值压入栈

     第五条语句:把输出脚本里提供的公钥哈希值压入栈(此时栈顶有两个哈希值)

     第六条语句:弹出栈里的两个元素,比较是否相等(目的:防止冒名顶替)

     第七条语句:弹出栈内元素,用公钥检查签名正确性(正确输出true 错误输出false)

6.P2SH

     输入输出脚本的形式

     ③最复杂的脚本形式

     输出脚本给出收款人提供的一个脚本的哈希    (这个脚本叫做redeemScript)

7.进一步说明

8.多重签名

     比特币系统中一个输出可能要求多个签名才能取出钱

     为私钥的泄露提供安全的保障,为私钥的丢失提供冗余

     通过checkmultisig实现

9.脚本执行

     checkmultisig的执行过程,图中假设3个签名给出2个即可

     本质是把复杂度从输出脚本转移到输入脚本,现在这个输入变得很简单,原来的复杂度被转移到RedeemScript

10.Proof of Burn

     输入输出脚本的形式

     ④它是比较特殊的格式

     这种格式输出脚本的开头是return的操作

     后面可以返回任何内容

     作用:是证明销毁比特币的一种方法

11.销毁原因/应用场景

     ①小币种要求销毁一定数量的比特币,才能够得到这种币种。这种小币种叫做AlternativeCoin

     ②销毁比特币可以换取往区块链里写入内容的机会

     它的好处:矿工知道这种脚本的输出不可能兑现,就没有必要保存在utxo里面,对全节点比较友好

三、比特币分叉

1.分叉(fork)

     由一条链变成两条链

     造成原因: ①挖矿时两个节点差不多同时挖到矿,这时两个节点都可以发布区块,就会出现临时性分叉(state fork)。(由于对比特币这个区块链当前的状态有意见分歧而导致的分叉)

     分叉攻击的例子:forking attack(属于state fork)(它是故意/人为造成,有时也称为deliberate fork)

     ②比特币的协议发生改变,要修改比特币协议需要软件升级。在一个去中心化的系统里,升级软件时没有办法保证所有节点都在软件升级。假设大部分都升级了,小部分因为各种原因没升级,此时也会出现分叉,这种分叉叫做protocd fork。

     根据协议修改内容的不同,又可以分成硬分叉(hard fork)和软分叉(soft fork)

2.硬分叉

     出现原因:对比特币协议增加一些新的特性,有一些new feature扩展一些新的功能,此时没有升级软件的旧的节点,它是不认可新节点,认为这些特性是非法的。这时是对,比特币协议内容的分歧

     硬分叉的例子:比特币中的区块(block size limit)

3.软分叉

     出现原因:如果我们对比特币协议加限制,原来合法的交易/区块,在新的协议中,可能变得不合法

     它是临时性的

     可能出现软分叉的情况:给某些目前协议中没有规定的域增加新的含义,赋予新的规则

四、比特币的匿名性

1.比特币中什么情况下,会破坏匿名性?

     比特币中不要求用真名,可以用公钥的地址,所以说有一定的匿名性,但不是绝对的

     ①别人能猜测到你的多个地址,地址可能会被关联            

     (关联原因:输入里面出现两个地址,别人可能会觉得这两个地址是同一个人的(输入输出的地址也可能可以被猜到是同一个人))

     ②你在比特币中的地址和现实生活中的地址,也可能产生关联            

     (原因:①资金的转入和转出②用比特币做支付时)

2.比特币的匿名性有多好?

     匿名和隐私保护相关联,我做的事情不想暴露真实身份(hide your identify from whom?)这个问题在于,不想向谁暴露身份

3.假设你是一个比特币用户,怎么最大程度提高匿名性?

     从两个方面(application layer和network layer)入手提高匿名性     应用层:把各个不同的人的币,混到一起,叫做coin mixing(它实施起来有一定复杂性)     网络层:多路径转发的方法,之前提到的TOR

4.零知识证明

定义:

假设证明者是我,验证者是你。它要证明这个账户是什么,但我不会把私钥透露给你

同态隐藏(零知识证明的数值基础)

图片中是三个性质。第二个性质说明加密函数是不可逆的,第三个叫做同态运算

5.同态隐藏例子

方法(简单的版本)

盲签方法

零币和零钞

五、比特币引发的思考

1.哈希指针

     指针中的地址只在本地有意义,发送到别的计算机是没有意义的

     实际系统中,只有哈希没有指针

     如何找到前一个区块的内容?

     全节点一般是把区块,存储到一个(key,value)数据库里。key是区块的哈希,value是区块的内容。常用的数据库是level DB。所谓的区块链这种链表结构,实际上是在level DB里面用哈希指针串起来。只要你掌握了最后一个哈希值,那么在level DB查找这个key对应的value,就可以知道取出最后一个区块的内容。然后块头会指向前一个区块,这样推就能找到整个区块链的

2.区块恋

     含义:两个人一起买比特币,然后把私钥分成两部分,每人保留一段。如果两个人掰了,ta们的比特币就会烂在区块链里。用区块链的不可篡改性作为两个人的爱情见证

     这样存在一个问题:两个人各知道一半的私钥,在掰以后,可能可以暴力算出另外128位。128位的是难度远小于256位的

     通过这个例子,我们可以知道说明对于共享账户,可以用多重签名(multisig)保证比特币的安全性

3.分布式共识

理论上证明分布式系统中取得共识是不可能的,既然理论上已经证明不可能,实际上如何变得可能呢?

严格来说比特币并没有取得共识,因为取得的共识随时有可能被推翻。比如出现分叉攻击,在严重时,可能退到创世纪块

4.量子计算

     比特币这种加密货币,建立在密码学的基础上

      比特币中并没有账户的公钥直接暴露出来,而是通过公钥获得地址,公钥不能推出私钥

     将来量子计算机发展起来,会不会威胁到比特币?     

          是不会的,因为量子计算机离使用还有很长一段时间。即使有一天真的很厉害,首先冲击的会是传统金融业,并不是加密货币

     假设以后量子计算机可以推出私钥怎么办?            

           比特币在设计时就加了一层保护。有人要偷你账户上的钱的话,首先要用地址推导出公钥,但量子计算机无论如何都做不到的

六、问题-解答

1.转账交易时接受者不在线怎么办?

     不需要接受者在线,转账交易是在区块链里记录一下,把我这里的比特币转到他的账户。无论对方在不在比特币网络里,是没有关系的

2.假设某个全节点,收到转账交易。有没有可能转账交易中,接受者的收款地址是这个节点之前没听说过的?

     可能的,比特币在创建账户不需要通知别人,在本地产生公私钥对即可

3.账户私钥丢失怎么办?

     没有办法了,账户里的钱变成死钱,永远取不出来

4.私钥泄露怎么办?

      尽快把该账户的钱,转到自己的另一个较安全账户里

5.转账写错地址,怎么办?

     没办法。交易一旦发布到区块链里,不能取消

6.如何找到最先找到nonce的矿工?(因为可能会有矿工偷nonce)

     发布的区块里有coinbase tx,里面有个收款人地址,是这个挖到矿的人的地址

7.如何知道交易费该给哪个矿工?  

     事先不需要知道是哪个矿工。交易费算法:total inputs>total outputs。这个差额就是交易费。哪个矿工挖到矿,就可以把这个差额,收集起来作为自己的交易费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/717285.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Graphviz——安装、绘制可视化协议状态机(Python)

1、简介 Graphviz 是一个开源的图形可视化软件包,特别擅长绘制有向图和无向图等结构化图形。它非常适合用于生成各种图表,例如流程图、网络图、状态机图、层次结构图等。Graphviz 的主要组件 dot: 这是Graphviz最常用的布局程序,用于创建有向…

(杭州中科微)全星座定位导航模块GM32的应用推荐及性能指标解析

1、 关于GNSS的原理: 它是通过接收来自地球轨道上的W星信号,并利用信号传播延迟的原理,计算与接收器之间的距离,从而实现对接收器位置的精确测量。 而GNSS的定位原理:W星导航系统GNSS接收机主要是通过三边测量法&…

Postgresql配置SSL连接

1、系统需要有openssl、openssl-devel包 yum -y install openssl openssl-devel 2、查看当前数据库是否使用openssl编译 pg_config|grep CONFIGURE 如果没有重新编译 make clean make && make install 3、服务器端证书配置 服务器端需生成三个文件: root.crt(根证…

如何用stable diffusion画出这种风景幻视画?

最近出现了一种奇怪的表情包。 看到小图的时候有几个字,点看一看却是一张正常的图片。 比如,看一个有意思的图,这两张图的预览模式下有明显的“银河”两字。 点开放大呢? 竟然是服饰的形状和颜色。 再看一张类似效果的&#xf…

Java_JDK下载与环境变量配置

目录 一、JDK下载安装 二、安装后配置环境变量 三、在编辑器里使用JDK 一、JDK下载安装 JDK 是Java开发工具包,它提供了用于开发和运行Java程序所需的工具和库。JDK包括Java编译器、Java虚拟机、Java标准库等。在IDEA中使用Java语言编写代码时,需要安…

20240617通过串口配置索尼SONY的HDMI OUT输出的8530机芯

20240617通过串口配置索尼SONY的HDMI OUT输出的8530机芯 2024/6/17 15:54 缘起:需要在RK3588开发板OK3588-C上使用SONY的8530机芯。特意熟悉8530的串口命令! 目的:需要配置SONY的8530机芯为RGB输出,4K分辨率。 串口波特率&#x…

Redis 管道

Redis的消息交互 当我们使用客户端对Redis进行一次操作时,如下图所示,客户端将请求传送给服务器,服务器处理完毕后,再将响应回复给客户端,这要花费一个网络数据包来回的时间。 如果连续执行多条指令,那就会…

Elixir学习笔记——编写文档

Elixir 将文档视为一等级别类。文档必须易于编写且易于阅读。在本指南中,您将学习如何在 Elixir 中编写文档,涵盖模块属性、样式实践和文档测试等结构。 Markdown Elixir 文档是使用 Markdown 编写的。网上有很多关于 Markdown 的指南,我们…

根据配置的参数规格生成商品SKU

参数规格如下&#xff1a; let specParam [[红色,绿色,白色,黄色], [大,小]]js部分&#xff1a; let getSpecParamCom (specData, index) > {for (let i 0; i < specData[index].length; i) {tempResult[index] specData[index][i];if (index ! specData.length - …

鸿蒙原生App开发之:套用混合app开发思路

2024年&#xff0c;似乎华为迎来了新的企业机遇--鸿蒙独立操作系统。 受到全球国际形势的影响&#xff0c;加之第四次科技革命&#xff08;AI革命&#xff09;冷不丁的出现&#xff0c;在他国AI技术领先的前提下&#xff0c;中国自主研发的独立操作系统再次提上新的战略高度。…

Javaweb08-JDBC数据库连接技术

JDBC数据库连接技术 **原理&#xff1a;**JDBC在应用程序与数据库之间起到了一个桥梁作用&#xff0c;当应用程序使用JDBC访问特定的数据库时&#xff0c;需要通过不同数据库驱动与不同的数据库进行连接&#xff0c;连接后即可对数据库进行相应的操作。 一.Jdbc API 1.Driver…

基于Itô扩散过程的交易策略偏微分方程matlab求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于It扩散过程的交易策略偏微分方程,提出了一种确定It扩散过程。通过根据的第一次通过时间来确定问题在这个过程中&#xff0c;我们推导出交易长度的分布函数和密…

Guava-EventBus 源码解析

EventBus 采用发布订阅者模式的实现方式&#xff0c;它实现了泛化的注册方法以及泛化的方法调用,另外还考虑到了多线程的问题,对多线程使用时做了一些优化&#xff0c;观察者模式都比较熟悉&#xff0c;这里会简单介绍一下&#xff0c;重点介绍的是如何泛化的进行方法的注册以及…

网线不通?瞅瞅这里----关于交叉网线的原理。

最近搞了个项目&#xff0c;UDP对接UDP&#xff0c;死活对接不上。 最后发现是交叉网线的事情&#xff0c;在此记录交叉网线的原理。 先说结论&#xff1a;不同设备用直连&#xff0c;相同设备用交叉网线 细说说 1.原理 网线的原理实际就是TX与RX对接。 正常一个设备同时有…

关于使用命令行打开wps word文件

前言 在学习python-docx时&#xff0c;想在完成运行时使用命令行打开生成的docx文件。 总结 在经过尝试后&#xff0c;得出以下代码&#xff1a; commandrstart "C:\Users\86136\AppData\Local\Kingsoft\WPS Office\12.1.0.16929\office6\wps.exe" "./result…

智能室内空气质量监测预警系统小程序设计说明书

智能室内空气质量监测预警系统小程序设计说明书 一、应用功能与系统设计 &#xff08;一&#xff09; 应用功能 该小程序设计的目的是为了配合环境监测吸顶灯,Mini空气监测仪等硬件设备实时数据展示与远程设备控制等功能&#xff0c;系统框架图如图1-1所示。用户可以从小程序…

生活好物:日常更精彩

我们的日用杂货店&#xff0c;是生活美学的聚集地。这里汇聚了各式各样的生活用品&#xff0c;每一件都蕴含着对生活的热爱与追求。 走进我们的日用杂货店&#xff0c;仿佛打开了一个充满生活气息的宝藏盒。从厨房的锅碗瓢盆&#xff0c;到浴室的洗漱用品&#xff0c;再到客厅的…

Excel和Word等工具小技能分享汇编(一)

这里汇集刘小生前期微信公众号分享的Excel和Word等工具小技能&#xff0c;为方便大家查看学习&#xff0c;刘小生对其进行分类整理&#xff0c;后期也会不定期整理更新&#xff0c;如有想学习交流或其他小技巧需求&#xff0c;欢迎留言&#xff0c;我们一起学习进步&#xff01…

免费 逼真:快手“可灵”后又一Sora级选手登场

就在今日&#xff0c;英伟达投资的旧金山初创公司 Luma AI 打出一手王牌&#xff0c;推出新一代 AI 视频生成模型 Dream Machine&#xff0c;可以文生视频&#xff0c;图生视频&#xff0c;人人免费可用。同时&#xff0c;Luma AI 称 Dream Machine 可以从文本和图像生成“高质…

【会议征稿】第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024,7月19-21)

由浙江工业大学主办&#xff0c;第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024) 将于2024年7月19-21日在浙江杭州召开。 会议旨在为从事物联网、人工智能与机械自动化的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学…