挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

栏目: IT技术 · 发布时间: 4年前

内容简介:、

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

区块链技术最早是由斯图尔特·哈伯和W.斯科特·斯托内塔于1991年提出的,这两位研究人员希望实现一个文档时间戳不能被篡改的系统,但直到近20年后,随着2009年1月比特币的推出,区块链才首次在现实世界中应用,大家所熟知的 挖矿 ,其实就是在寻找一个合适的nonce整数,使得如下不等式成立:

SHA256(SHA256($version+$hashPrevBlock+$hashMerkleRoot+ $timeStamp+ $target+ $nonce)) <= $target

本文就区块链与加密数字货币的基础知识做一下科普,文中会提到上面变量的含义。

定义与工作方式

区块链(Blockchain),从字面意思解读,即是一组用链(chain)串起来的区块(block),用到这个场景,是指数字信息(block)在公共数据库(chain)的存储

,一种分布式记账系统(可用于数字加密货币,例如,比特币 ),可能是自因特网以来最重要的发明,区块包含如下三个部分:

  1. 交易的相关信息 ,比如日期、时间、金额等。

  2. 交易的参与方 ,这里存的不是真实身份信息,而是数字签名。

  3. 区别与其他区块的信息(hash值 )。

在比特币的区块链中,一个区块可以存储最多1MB的数据。

为了将一个区块加入到这个区块链,需要发生4件事情:

  1. 交易必须发生。 在实际 中,一个块会包含很多个交易。

  2. 交易需要被核实 。当用信用卡购物的时候,信用卡交易中心会去核实你的签名(与申请信用卡时留的签名进行 比对)或者通过密码(只有用户自己知道)来核实这次交易的真实性。对于区块链而言,这项工作就交接给了计算机网络,当交易发生后,这个计算机网络会迅速检查你的交易是否按你所说的方式进行。也就是说,他们会确认购买的细节,包括交易的时间、金额和参与者。

  3. 交易必须被存储在区块(block)中 。当交易被核实后,交易的金额、参与者的数字签名会被存在区块中(和成千上万个其他交易一起)。

包含此交易的区块需要一个hash值, 一旦一个区块的所有交易都被核实(代表挖矿成功),就必须给他一个唯一的识别码,称为hash值,然后这个区块就可以被添加到区块链中了。

钱包、公钥与私钥  

钱包(wallet): 加密货币(比特币)进行交易的载体,是计算机的一个程序,包含一对唯一的key,即公钥和私钥,在 第一次进行交易的时候产生。

私钥: 授权用户从帐户中支出、提取、转移或进行任何其他交易,在交易广播到区块链网络之前,用私钥对其进行 数字签名,签名证明了私钥的所有权,私钥需要妥善保管,丢失后,钱包里面的Coin将再也不能被找回(64 由 0-9 or A-F组成的字符串,必要时可以保存在纸上,放到保险箱里面)。

公钥: 由私钥经过复杂算法生成(无法根据公钥反向解得私钥),别人通过公钥可以证明那个数字签名的确由这个用 户的私钥生成。一旦交易被核实有效,资金将被发到接受者的公共地址,公钥丢了没有关系,可以通过私钥重新生成。

公共地址: 由公钥经过hash生成,像一个银行账号,当参与方达成协议,发送者需要公共地址才能将Token或者Coin 发送给接收者,接收者随后可以使用他的私钥消费或提取。

安全性

区块链技术通过如下三种方式来解决安全和信任问题:

  • 按线性和时间顺序存储, 也就是说,新块总是被添加到区块链的“末端”。比特币的区块链,每个区块在链上都有一个位置,叫做“高度”,截至2020-04-1820:36 ,区块的高度已经超过626548。

  • 极大增加区块内容被修改、删除的难度, 这是因为每个区块都包含自己以及之前区块的hash值。假设某个黑客更改了先前的一个区块的内容,那么这个区块以及之后的所有区块的hash值都会发生变化,为了掩盖这次修改,他需要将这些区块的hash值都重新算一下,而这会付出的代价,同时,每个区块在区块链网络中都有一个高度,从而使得删除某个区块变得不可能。

  • Consensus Models 测试, 区块链网络要求计算机(用户)求解一个复杂的计算数学问题来证明自己,当某台计算机解决了其中一个问题,它才有资格向区块链中添加一个区块,但是将区块添加到区块链的过程(俗称”挖矿“)并不容易,截止到2020年4月,比特币网络解决其中一个问题的几率约为15.5万亿分之一,为了在这个几率下求解复杂的数学问题,计算机需要花费巨大的电力来运行程序。

Proof of Work 与 挖矿

Proof of Work是许多加密货币的基础,它描述了一个系统,这个系统需要 付出不小但可行的努力 来阻止对计算能力的轻率或恶意使用。

为一组比特币交易生成任意hash值对现代计算机来说都是微不足道的,因此为了把这个过程变成 更像一个正经的工作 ,比特币网络设置了一定的 难度 ,即为这个hash值设置了一个 target ,target越低,有效hash的集合就越小,生成一个hash就越困难。

由于给定的一组数据只能生成一个hash,矿工如何确保他们生成的 hash小于等于target? 它们通过添加一个称为nonce的整数(number only used once )来改变输入的数据,一旦找到一个有效的hash,它就被广播到网络中,同时区块被添加到区块链中,找到这个nonce整数的矿工就能获得数字货币奖励, 这个nonce整数就是要解决的数学问题。

Bitcoin 区块头包括如下部分:

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

挖矿成功, 当且仅当找到一个合适的nonce整数,使得如下不等式成立(对于一个区块而言,变量version、hashPrevBlock、hashMerkleRoot、timeStamp、target是固定不变的):

SHA256(SHA256($version+$hashPrevBlock+$hashMerkleRoot+ $timeStamp+ $target+ $nonce)) <= $target

一个实际的Bitcoin的区块信息:

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

包含的交易信息如下(此区块有2570个交易,截取了其中2个):

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

51% Attact、Race Attack 与 Double-Spending

Double-Spending意味着将同样的钱消费了两次,任意一种加密数字货币,若不能解决Double-Spending问题,则没有人愿意使用,比特币能够存活这么久并且得到很多人的追捧,说明它已经解决了这个问题。

先看一下实际生活中的例子,去星巴克购买咖啡,你把50元给服务员,服务员立即确认,然后将咖啡给你,这个交易就完成了,那个50元已经放到收银员的柜子里面,你没有办法再次获得那个50元来进行消费。通过微信或者支付宝进行消费,只是将实体货币电子信息化了(不同于数字货币),比如你账户有1000元,消费之后会变成950元,不可能通过极短时间内连续购买2次来实现只扣一次的钱,银联(信用卡)交易系统保证第二次交易在第一次交易完成后的基础上进行。

数字货币,以比特币为例,一开始大家账户里面都是没有Coin的,通过挖矿来获得Coin,而数字货币是分布式记账系统,没有一个中心化的地方存储大家的Coin,你的Coin只有你自己的私钥能提取或者消费,一旦私钥丢失,你原先的Coin将永远无法获得(包括自己和别人),别人通过你的公共地址发给你的Coin也将永远无法获得。因Coin是一串数字(存在你本地),有可能通过拷贝两份从而达到消费两次的目的。

看一下比特币是如何解决这个问题的:

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

场景: 某个买家将1个比特币通过私钥进行数字签名后发给卖家A的公共地址,然后将同样的比特币签名后发给另外一个卖家B的公共地址,卖家A和卖家B各自通过自己的私钥确认了这两个交易,然后这两个交易都进入了比特币网络的待确认池。

  1. 通常来说,第一个交易会得到确认、并被矿工核实以便加到区块链的下个区块中,第二个交易会被矿工判定为非法、得不到足够的确认,从而被移出网络。

  2. 由于网络存在延迟, 这两个交易可能同时被矿工从待确认池拿出来进行确认,从网络获得最大确认数的交易将包含在区块链中,而另一个将被丢弃,从而会出现卖家A获取不到Coin,被卖家B获取到的情况。对买家来说,第二次是重复消费,但是对卖家来说,不存在谁是真正Earning、谁是重复Earning, 但是很明显,对卖家A不公平!

解决办法: 建议卖家等至少6个Confirmation,“6个Confirmation”是指在一个交易被添加到区块链之后,又添加了6个包含其他若干交易的区块。每个交易、区块都和前面的交易、区块有关联(基于hash)(所以,每次有新区块添加到区块链,都是对前面区块中交易的再次确认),买家必须回去并反转这6个区块中的所有交易才有可能Double-Spending他的Coin,而这在计算上是不可能的。当卖家收到了6个Confirmation,他可以肯定这不是买家发送的Double-Spending Coin。

下图是2020-04-25 10:31截的图,Height为627510的Confirmations是6,在他后面的区块数目是5,包括所在区块的一次确认,故是6个 Confirmation

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

51% Attack: 如果攻击者以某种方式获得了网络51%的hash能力,则可能会发生Double-Spending,“hash能力”是指验证事务和区块的计算能力,如果攻击者拥有此控制权,他可以反转任何事务并创建一个私有区块链,每个人都会认为它是真实的。但到目前为止,还没有发生这样的攻击,因为控制51%网络的成本非常高,并且一旦被发现,比特币的价值将瞬间归零,也就是说攻击者花了巨额的成本,换来的是零价值的东西,这也是一个悖论。

Race Attack: 当攻击者将同一Coin快速连续地发送到两个不同的地址时(一个是他自己的地址,一个是卖家地址),很显然,只有其中一个地址最终能获得Coin。一旦完成了这两个交易,这两个交易都会进入一个未确认的交易池,无论哪一个交易首先得到验证并得到6个确认将被接受,另一个将被丢弃。作为一个卖家,你可能先得到6个确认,但如果攻击者先得到6个确认,那么你就不会收到你的Coin,这就是为什么说至少要等待6次确认。

优点与缺点 

优点:

  1. 通过消除验证过程中的人为参与提高准确性。

  2. 通过消除第三方验证降低交易成本。

  3. 去中心化使得篡改变得困难。

  4. 交易是安全、私有和高效的。

缺点:

  1. 与挖矿相关的技术成本高。

  2. 每秒能够处理的交易数量低,对于比特币网络而言,平均每10分钟产生一个区块,每个区块平均包括3000个左右的交易。

  3. 因其私密性,可能会被用于非法活动。

  4. 容易受到黑客攻击。

实际应用 

  • 加密数字货币,例如,比特币。

  • 医疗记录,医疗保健提供商可以利用区块链安全地存储患者的医疗记录。生成并签署病历后,可以将其写入区块链,为患者提供病历不可更改的证据和信心。这些个人健康记录可以用私钥编码并存储在区块链上,这样它们只能由某些个人访问,从而确保隐私。

  • 内容分发,改变传统的内容分发模式,区块链上的智能合约(SmartContract)确保收入始终由权利人获得。

  • 供应链,供应商可以使用区块链记录他们购买的材料的来源,这将允许下游企业验证其产品的真实性。从产地到最终消费者,食品行业正在借助区块链来追踪食品的路径和安全性。

以内容分发平台为中心的模式

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普

Smart Contract保证收入始终由内容创作者获得(内容分发平台已无绝对权力)

挖矿 = 求解一个合适的nonce整数,区块链与加密数字货币知识科普


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Definitive Guide to Django

The Definitive Guide to Django

Adrian Holovaty、Jacob Kaplan-Moss / Apress / 2007-12-06 / CAD 45.14

Django, the Python-based equivalent to the Ruby on Rails web development framework, is presently one of the hottest topics in web development today. In The Definitive Guide to Django: Web Development ......一起来看看 《The Definitive Guide to Django》 这本书的介绍吧!

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具