探索比特币多面体

目录

前言

一、比特币挖矿

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.mzph.cn/news/854347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DBA常用论坛

1.ITPUB ITPUB技术论坛_专业的IT技术社区 2.ASKTOM Ask TOM

Python 使用print输出二进制文件时产生的错位

项目实践中, with open(fileName, rb) as f: result f.read()print(result)f.close()打开二进制文件,打印出的结果会出现有些\x后面有好几个字符的情况 但实际这串数字是 这种情况是因为print函数将二进制数据解释为字符串并以其字节值的十六进制表…

Java中如何自定义异常进行抛出,并且定义全局异常处理类进行捕获异常(详细讲解)?

1.先理解为什么要抛出异常? 一句话就是为了终止程序,一般是终止业务层也就是service层。 2.为什么要自定义异常抛出? 因为系统提供的异常种类很多,而且代表的含义很多,所以我们需要自己定义一个通用的异常&#xff0…

白帽子最喜欢用什么渗透测试工具?看看哪些是你用过的

一、白帽子最喜欢用什么安全工具? 2020 年的 HackerOne 黑客报告中,统计过白帽子们最喜欢用的软硬件工具。 从图中可以看到,89% 的白帽子都会使用 Burp Suite 这个 Web 应用安全测试工具,有 39% 会尝试自己写工具,第三名的 Fuzzers 是模糊测试工具。再后面主要是一些代理…

STM32-17-DAC

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么?核心组件有什么?有什么特性和优势?适用于什么场景? 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…

ssm宠物网站系统-计算机毕业设计源码07183

摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台。宠物网站每天都有大量的信息需要通过网络发布,为此,本人开发了一个基于B/S(浏览器/服务器)模式的宠物网站系统。 该系统以JJava编程语言、MySQL和SSM框…

基于 VITA57.1 标准的 2 收 2 发射频子卡(国产 ADRV9009子卡)

FMC159 是一款基于 VITA57.1 标准规范,实现 2 收 2 发的射频子模块,该板卡基于国产化 ADRV9009 射频收发器,涵盖了50MHz~6GHz 频段,并集成了双通道收发链路,发送最大实时带宽可到 450MHz,接收最大带宽可以到…

十进制、二进制、十六进制之间的相互转换

实验目的 实现int 、float 转换为字符串并显示 实现数字字符以二进制、十进制、十六进制显示 实现十进制、二进制、十六进制之间的相互转换 #include "numconvert.h" #include "ui_numconvert.h"NumConvert::NumConvert(QWidget *parent): QWidget(parent)…

C#特性-CallerMemberName、CallerFilePath和CallerLineNumber的介绍和应用

介绍 在csharp中,CallerMemberName, CallerFilePath, 和 CallerLineNumber 是编译时常量,它们是csharp 5.0引入的特性,用于提供有关调用堆栈的信息,通常用于日志记录和调试。这些特性可以自动填充方法的参数,无需显式…

软考初级网络管理员__网络单选题

1.观察交换机状态指示灯初步判断交换机故障,交换机运行中指示灯显示红色表示()。 警告 正常 待机 繁忙 2.通常测试网络连通性采用的命令是()。 Netstat Ping Msconfig Cmd 3.一台16端口的交换机可以产生()个冲突域? 1 4 15 16…

安装 Nuxt.js 的步骤和注意事项

title: 安装 Nuxt.js 的步骤和注意事项 date: 2024/6/17 updated: 2024/6/17 author: cmdragon excerpt: Nuxt.js在Vue.js基础上提供的服务器端渲染框架优势,包括提高开发效率、代码维护性和应用性能。指南详细说明了从环境准备、Nuxt.js安装配置到进阶部署技巧&…

3D元宇宙虚拟主播引领文旅产业迈向更加美好的未来!

随着文旅产业的蓬勃发展,3D数字代言人的应用正逐渐改变着传统的文旅传播方式。文旅3D数字代言人搭建编辑器的出现,正是满足大部分文旅产业借助数字人浪潮,将传统文化与现代科技完美融合的创新之举。 文旅3D数字代言人搭建编辑器不仅满足了Z世…

SelfGNN: Self-Supervised Graph Neural Networks for Sequential Recommendation

SelfGNN: Self-Supervised Graph Neural Networks for Sequential Recommendation(Sigir2024) 摘要 顺序推荐通过对用户的时间和顺序交互模式进行建模,有效地解决信息过载问题。 为了克服监督信号的局限性,最近的方法在推荐系统中…

奇安信齐向东:AI驱动安全,应对数字经济时代挑战

随着数字经济的蓬勃发展,网络安全问题日益凸显,AI技术的融入为网络安全带来了新的机遇和挑战。近日,备受瞩目的2024全球数字经济大会数字安全高层论坛暨北京网络安全大会战略峰会(简称“BCS大会”)在北京盛大开幕。本次…

GPT-4o的视觉识别能力,将绕过所有登陆的图形验证码

知识星球🔗除了包含技术干货:《Java代码审计》《Web安全》《应急响应》《护网资料库》《网安面试指南》还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 我们来看一下市面上常见的图形验证…

3秒生成!这个AI模型画风也太治愈了,新手也能轻松驾驭

还在为不会画画而苦恼吗?别担心,今天给大家介绍一个超好用的AI模型——Soft and Squishy Linework,即使是小白也能轻松生成可爱的动漫图像! Soft and Squishy Linework:专门生成柔和的、低保真(lofi&#…

为何选择Xinstall?告别邀请码,让App推广更便捷!

在互联网日益繁荣的今天,App的推广和运营成为了各大企业关注的重点。然而,传统的推广方式如邀请码限制,往往会给用户带来不便,同时也限制了App的快速增长。在这个背景下,Xinstall凭借其独特的功能和服务,成…

快慢指针技巧

快慢指针技巧 在说快慢指针之前,我们先说一下双指针。 双指针 双指针:使用两个指针来解决问题。 所谓的指针其实就是指数组的下标,或者链表的节点的地址。 我们以数组为例介绍一下。 有两个指针分别存储着数组的两个下标,这就…

成都某展厅2套2x2透明OLED拼接屏项目

成都某展厅的2套2x2透明OLED拼接屏展示设计具有独特的技术魅力和视觉效果。以下是关于这一展示设计的详细介绍: 1.产品规格 类型:透明OLED拼接屏 尺寸与配置:每套为2x2拼接,即每套由4块屏幕组成。 2.应用场景 成都某展厅&#…