探索比特币多面体

2024-06-17 19:36
文章标签 探索 比特 多面体

本文主要是介绍探索比特币多面体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、比特币挖矿

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.chinasem.cn/article/1070355

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

轻松录制每一刻:探索2024年免费高清录屏应用

你不会还在用一些社交工具来录屏吧?现在的市面上有不少免费录屏的软件了。别看如软件是免费的,它的功能比起社交工具的录屏功能来说全面的多。这次我就分享几款我用过的录屏工具。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  这个软件的操作方式非常简单,打开软件之后从界面设计就能看出来这个软件操作的便捷性。界面的设计简单明了基本一打眼你就会轻松驾驭啦

深入探索嵌入式 Linux

摘要:本文深入探究嵌入式 Linux。首先回顾其发展历程,从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构,涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域,广泛应用于消费电子、工业控制、汽车电子和智能家居等领域。关键技术有内核裁剪与优化、设备驱动程序开发、实时性增强和电源管理等。最后展望其未来发展趋势,如与物联网融合、人工智能应用、安全性与

【vue3|第28期】 Vue3 + Vue Router:探索路由重定向的使用与作用

日期:2024年9月8日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083;0.98365 = 0.0006 说

多云架构下大模型训练的存储稳定性探索

一、多云架构与大模型训练的融合 (一)多云架构的优势与挑战 多云架构为大模型训练带来了诸多优势。首先,资源灵活性显著提高,不同的云平台可以提供不同类型的计算资源和存储服务,满足大模型训练在不同阶段的需求。例如,某些云平台可能在 GPU 计算资源上具有优势,而另一些则在存储成本或性能上表现出色,企业可以根据实际情况进行选择和组合。其次,扩展性得以增强,当大模型的规模不断扩大时,单一云平

探索Invoke:Python自动化任务的瑞士军刀

文章目录 探索Invoke:Python自动化任务的瑞士军刀背景:为何选择Invoke?`invoke`是什么?如何安装`invoke`?简单的`invoke`库函数使用方法场景应用:`invoke`在实际项目中的使用场景一:自动化测试场景二:代码格式化场景三:部署应用 常见问题与解决方案问题一:命令执行失败问题二:权限不足问题三:并发执行问题 总结 探索Invoke:P

使用亚马逊Bedrock的Stable Diffusion XL模型实现文本到图像生成:探索AI的无限创意

引言 什么是Amazon Bedrock? Amazon Bedrock是亚马逊云服务(AWS)推出的一项旗舰服务,旨在推动生成式人工智能(AI)在各行业的广泛应用。它的核心功能是提供由顶尖AI公司(如AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI以及亚马逊自身)开发的多种基础模型(Foundation Models,简称FMs)。

探索Python的数学魔法:Numpy库的神秘力量

文章目录 探索Python的数学魔法:Numpy库的神秘力量背景:为什么选择Numpy?Numpy是什么?如何安装Numpy?五个简单的库函数使用方法场景应用常见Bug及解决方案总结 探索Python的数学魔法:Numpy库的神秘力量 背景:为什么选择Numpy? 在Python的世界中,数据处理和科学计算是不可或缺的一部分。但原生Python在处理大规模数据时可能会显

【Linux】探索进程优先级的奥秘,解锁进程的调度与切换

目录 进程优先级: 是什么? 为什么存在进程优先级的概念呢? Linux为什么调整优先级是要受限制的? PRI vs NICE Linux的调度与切换 概念准备: 那我们到底怎样完成进程的调度和切换呢? 区分:寄存器VS寄存器的内容 Linux实现进程调度的算法,需要考虑优先级,考虑进程饥饿问题,考虑效率问题。 解决优先级问题: 解决进程饥饿问题: 解决效率的问题: