主页 > imtoken钱包官网 > 比特币中有趣的数据结构和特定问题

比特币中有趣的数据结构和特定问题

imtoken钱包官网 2023-04-01 07:48:03

比特币网狗狗币能提现吗_比特币钱包换电脑_比特币钱能提出来么

认识比特币

说到比特币,会有很多形容词和定语,比如“数字加密货币”、“去中心化”、“不可篡改”、“工作量证明”等等。好了,我们还是回归本质吧。

首先,比特币是一个软件系统,就像进销存系统、QQ聊天软件、网络游戏等,它是一个软件,或者更准确的说,它属于网络软件,而我们现在几乎90%都是九的软件都是网络软件,比如淘宝、微信、迅雷、网易云音乐等,这些软件都是互联网应用软件,都是基于TCP/IP协议族开发的。 比特币作为一种互联网应用软件也不例外。 目前,比特币的软件源代码维护在 GitHub 上:Bitcoin Source Code Link。

GitHub是一个开源的代码版本维护平台。 Git 是一个版本控制软件。 GitHub 基于 Git 交换版本历史信息。 可见,比特币源代码的版权并不属于某个公司或组织。 事实上,它是由一个叫中本聪的人或组织发起的。 中本聪的身份至今仍是个谜。 当然,这已经不重要了。 重要的是比特币给我们带来了很多有趣的软件设计。 思路,下面一一介绍。

在比特币软件出现之前,对数字货币的研究和软件实验已经存在了很长时间,甚至出现在20世纪80年代和90年代,比如DigiCash,它曾经是美国一位密码破译者发明的。 某种程度上,后来出现在互联网上的一些代币,比如QQ币,甚至银行支持的网上银行功能,某种程度上都是货币数字化的一种形式,但直到比特币的出现才真正支持. 具有以下特点:

在这里要提醒一下,人们通常所说的比特币,是指通过比特币软件发行的数字货币,所谓发行,从软件的角度来说比特币钱能提出来么,就是一个记录的数字。 当然,由于比特币技术的开源性质和新颖设计,许多人借鉴了它的原理并实现了其他类型的数字货币系统,也称为山寨币。 这些人组成的圈子也叫比特币。 叫币圈,另外一拨人发现,对于比特币来说,支撑这个系统的技术才是真正有意义的,那就是区块链技术,进而认为区块链技术不只是用来生成数字货币,但可以用于在许多其他领域发挥作用,例如公证系统、数字资产交易、智能合约等。 那么,为了让大家对比特币的相关技术有一个更清晰的认识,下面根据关键词进行介绍。

区块链

Blockchain,英文区块链,这是比特币系统用来记录账本数据的格式。 我们知道,新发行的比特币可以通过客户端软件挖矿得到,可以转账,而这些数据是必须要保存的,它存在于哪里呢? 当然存在于一个文件中,那么保存它涉及到什么格式,就像我们平时记账一样,比如某年某日某月某日赚了多少钱,从哪里来的? 收入,花了多少钱,花在了哪里,一般都会有一个日记帐来记录。 比特币系统也是如此。 它也要记录这些数据,记住就好了。 为什么叫区块链? 这样的名字怎么样? 因为这是一个很形象的标题,请看,blockchain,blockchain,意思是块是连在一起的,也就是说数据主要记录在块中,所谓块是什么意思,是一个打包在一起的一段数据,打包在一起的数据是多长时间? 在比特币系统中,每隔10分钟左右对数据进行一次打包记录,并为这段打包后的数据生成一个区块数据头,专门记录区块的标识ID(哈希值),哈希树(merkle tree)通过区块中的所有交易数据等计算,每产生一个这样的区块都会指向前一个区块,就像链条一样,将各个区块串联起来。

比特币网狗狗币能提现吗_比特币钱能提出来么_比特币钱包换电脑

你可能会疑惑,为什么要做这么复杂的方法,而且看起来很原始。 现在各种数据库存储技术不是很方便吗? 这里我们先问一组问题:

前面说过,比特币是一个去中心化的系统,也就是说数据并不是统一存储在某个服务器或者服务器集群上,而是每个客户端在本地都有一份完整的数据副本,那么如何让每个客户端之间互相同步数据的时候,如何验证数据的完整性? 如果存储在普通的数据表中,将很难验证数据的完整性,尤其是随着数据的增加。 比如比特币的完整区块数据现在已经达到了120G,未来还会越来越大。 这么大的数据量,在同步下载的时候,中间很难查到是不是下载错了,或者是乱码。 下载必须重新启动,因此需要对数据进行细粒度的分段。

如果有人故意更改记录的数据怎么办? 在普通的数据库系统中,如果某个表中的数据发生了变化,系统很难马上发现,但是如何让数据更难发生变化,让数据之间有之前的关系,如果你愿意,你可以改变它。 你必须改变他们。 就像这里说的区块链,每10分钟产生的数据被打包成一个块,块之间是相连的。 如果要更改某个块的数据,则必须从头到尾更改它。 这个成本非常高。 大,而且由于比特币系统不是一个单机软件(单机的数据很容易改变,一个程序执行后就会完全改变),它是由无数个组成的网络比特币客户。 机器的数据必须经过全网节点的认可。 这种将数据打散,然后相互链接的结构称为区块链。 其实也可以叫数据链、信息链、数据区块链等,就是这个意思。 事实上,在区块链中,除了Blocks是相互关联的,每一笔交易的交易也是相互关联的,下面会介绍。

默克尔树

我们知道,在比特币网络中,区块数据必须在各个客户端同步。 所谓同步,其实就是下载。 下载缺失的1000个区块,那么问题就来了,这些数据很多,而且比特币系统并不是统一从一台服务器下载的,它是一个点对点的网络,也叫P2P网络,在这个环境中,将有多个下载数据源。 如何保证下载过程中不会出错? 也就是说,如果出现问题,不需要全部重新下载,只需要重新下载丢失的,还有一点,如何验证下载的数据是否正确(希望快点verify 而不是一个一个地)块数据去验证),这时候Merkle树就可以发挥作用了。

Merkle树,英文merkle tree,是一种数据结构。 它的基本原理其实很简单。 对于比特币系统中的数据,或者说需要同步的数据,主要是一个区块。 这个merkle tree是为这么多块生成的,具体怎么做呢? 首先,为每个块计算一个哈希值。 比如一共有10个区块,那么计算10个区块的哈希值,然后计算每两个相邻区块的哈希值。 再次计算该值以获得新的哈希值。 根据该方法,例如,区块1和2的哈希再次生成哈希,区块3和4的哈希再次生成哈希。 5号和6号,7号和8号,9号和10号比特币钱能提出来么,依此类推,直到生成根哈希,形成树结构。

那么,这样做有什么好处呢? 我们已经看到,为区块数据计算了一个哈希树。 不用说,哈希的用途就是一张身份证。 那么,所谓的merkle tree其实就是identity tree。 证书树,好了,回到我们之前的问题设置。 在进行同步下载的时候,假设block 3的数据有问题,这时候我们在校验的时候会很方便,可以直接定位出是哪个block的问题,因为hash值不一样,而且如果要检查整个区块的数据是否完整正确,直接看最上面树根的哈希值即可,根本不需要检查每条数据。

这就是默克尔树的作用。

比特币钱包换电脑_比特币钱能提出来么_比特币网狗狗币能提现吗

未交易输出

这是一个缩写。 全称是unspend transaction output。 它转化为未花费的交易输出。 让我给你举个例子。 比如卖衣服的小店,分批入库10件、20件、30件。 衣服,如果是一般做法,你会怎么记账? 除了记录这些入库日记账外,你还会设立一个入库地点或账户,比如一共60套,在销售出货的时候,每降一批,就从60中减去相应的金额数量。 这个想法可以说是常识,那么这跟UTXO有什么关系呢? 好了,在讲解UTXO之前,我们先来看看比特币中的转账交易是如何记录的。 有这样的账号吗? 事实是:不! 那么它是如何存储在比特币中的呢? 5件衣服,不是简单的放到一个汇总账户里,把60减到55,因为此时没有60的账户,那么怎么取出来,这时候需要找之前的入库交易,比如之前入账过10件,就可以用10件在仓库的流量作为货源来发货。 如果你放入10件,就意味着可以运出10件。 现在您只需运送 5 件。 交易不存在了,存储5中只有一笔交易。存储5中的这笔交易属于未花费的输出。 顾名思义,因为在比特币系统中,输入和输出都是货币单位,所以用成本来表示。 如果是上述的衣服,也可以称为“未使用的、可装运的存储资源”。

UTXO 基本上就是这个意思。

特殊目的公司

SPV也是一个名词,属于比特币钱包的应用。 在这里,首先要提到比特币钱包的概念。 在中本聪客户端,即比特币的核心程序中,提供了比特币钱包的功能。 用于保存比特币地址和私钥等数据,类似于生活中使用的钱包,而这个中本聪钱包需要和完整的区块数据一起使用,所以有个问题,区块数据是非常大,尤其是时间长了,数据量几十G,几百G,还会不断的增长。 为了进行转账操作,需要附加如此大量的数据,怎么办? 于是就有了这样一个概念,SPV,全称是Simplified Payment Verification,翻译为简单支付验证,什么意思呢? 我们知道在一个区块中,交易数据或者转账交易主要是被数据量所占据,而这些数据对应的区块头中有一棵上面提到的默克尔树,那么,如果是这样的话,是不是可以像这样嘛,钱包里只保留区块头。 进行支付时,可以通过区块头进行支付验证。 注意是支付验证,不是交易验证。 支付验证主要是验证支付是否已经被网络接收。 确认,而真正的交易确认仍然是通过全客户端来验证的。

这个想法是将钱包功能从核心客户端中分离出来。

分层确定性钱包

这个概念还是跟钱包有关。 在比特币系统中,一个人几乎可以拥有无​​限的钱包地址和私钥。 所以,反正一个人往往不会只有一个地址,而对于团体用户来说,更不可能只有一个地址。 如果按照比特币核心客户端的做法,1个地址和1个独立私钥,这当然是很安全的,但是使用起来很不方便,谁也做不到。 要记住那么长那么多的地址和私钥,有人想出了这样一个概念。

比特币钱能提出来么_比特币网狗狗币能提现吗_比特币钱包换电脑

一般来说,思路是这样的:

使用随机数生成根私钥。

使用一定的不可逆算法,根据根密钥生成任意数量的子密钥。

可以看出,在这样的钱包中,其实是生成了一棵树,也就是密钥树。 为什么叫确定性钱包,因为其他所有的密钥都可以根据根密钥生成,为什么叫密钥树呢? 层次结构,因为结构是树,所以有层次结构。

双花和 51% 攻击

从这里开始,我将介绍比特币系统涉及的一些问题。 双花是什么概念,就是一笔钱被花了两次。 纸币在使用过程中,钱是不能重复花的,因为纸币是一个实体,花完了就没有了,而我们日常使用的银行卡,是不会出现双花的问题的,因为银行是有余额账户的每张卡(银行系统出问题的极少数情况不算。),那么,对于比特币系统来说,既没有银行这样的账户中心,也没有纸币这样的实物货币,那么如何保证比特币不反复花费?

殊不知在比特币网络中,所有的交易每10分钟被打包成一个数据包,也就是所谓的区块,存储并广播到全网,每一个接收到广播的软件客户端,两端都会执行一次同步。 也就是说,这笔钱能不能再花,涉及到以下几个关键点:

反复花的钱,可以自己打包篡改。

比特币网狗狗币能提现吗_比特币钱能提出来么_比特币钱包换电脑

包裹被篡改的数量可以通过网络确认。

那么,这里涉及到一个概念,就是在比特币网络中,既然没有中央服务器进行统一可靠的处理,那么谁来打包呢? 每 10 分钟打包一个区块这件事情谁来做? 这是通过称为工作量证明的机制完成的。 简单来说,就是每个客户端都会计算一个密码问题。 谁先计算出来,谁就有权打包。 谁愿意做这样的事? 羊毛布? 比特币网络有激励机制,获得包装权会奖励一定数量的比特币。 这么好,这保证你要打包不打包。 即使你修改了本机的区块数据,广播出去验证无效也没用。

也就是说,想要双花,至少要能够抢到优势明显的包装权。 目前比特币网络的算力非常大,很难发出这样的攻击。

这次攻击是 51% 的攻击。 也就是说,攻击者拥有全网一半以上的算力,数据始终是自己打包的。 自然是可以不断的修改数据,广播出去,然后自己打包。

这个问题很容易解释。 区块链的数据结构就像一个链表。 那么,有没有可能有一天,这条链条突然变成了两条链条呢? 举个例子,比特币的数据结构或者协议已经修改升级到新版本了,但是因为比特币软件无处不在,你不能强制所有人马上升级到新版本,那么可能会出现旧版本和新版本并存,如果新版本启用了一些新的数据协议或数据结构,旧版本无法完全理解新版本打包的数据,就会导致分叉。

对于分叉,也是有区别的,有软分叉和硬分叉。

简单来说,软分叉就是老版本的客户端可以读取他能看懂的那部分区块数据,但是不能看懂新增的字段,大家还可以共存; 硬分叉意味着旧版本无法理解新版本的数据,从而导致完全分叉。

比特币钱能提出来么_比特币网狗狗币能提现吗_比特币钱包换电脑

总结

有许多与比特币相关的技术。 本文只能截取其中的一些重点进行一些说明。 写作过程中难免会出现错误。 请原谅我。

电报群

Coin Discovery在Telegram建立了超级群,欢迎新老朋友加入,加入方式为:

电报频道

Coin Discovery Telegram频道每天推送精选文章。 欢迎新老朋友加入。 加盟方式为:

以上内容不构成投资建议,仅供参考

在公众号回复“帮助”查看免费数据下载列表

比特币钱包换电脑_比特币钱能提出来么_比特币网狗狗币能提现吗