、
SHA256(SHA256($version+$hashPrevBlock+$hashMerkleRoot+ $timeStamp+ $target+ $nonce)) <= $target
定义与工作方式
区块链(Blockchain),从字面意思解读,即是一组用链(chain)串起来的区块(block),用到这个场景,是指数字信息(block)在公共数据库(chain)的存储
区别与其他区块的信息(hash值)。
在比特币的区块链中,一个区块可以存储最多1MB的数据。
交易必须发生。在实际中,一个块会包含很多个交易。
交易需要被核实。当用信用卡购物的时候,信用卡交易中心会去核实你的签名(与申请信用卡时留的签名进行比对)或者通过密码(只有用户自己知道)来核实这次交易的真实性。对于区块链而言,这项工作就交接给了计算机网络,当交易发生后,这个计算机网络会迅速检查你的交易是否按你所说的方式进行。也就是说,他们会确认购买的细节,包括交易的时间、金额和参与者。
交易必须被存储在区块(block)中。当交易被核实后,交易的金额、参与者的数字签名会被存在区块中(和成千上万个其他交易一起)。
钱包、公钥与私钥
公钥:由私钥经过复杂算法生成(无法根据公钥反向解得私钥),别人通过公钥可以证明那个数字签名的确由这个用户的私钥生成。一旦交易被核实有效,资金将被发到接受者的公共地址,公钥丢了没有关系,可以通过私钥重新生成。
区块链技术通过如下三种方式来解决安全和信任问题:
按线性和时间顺序存储,也就是说,新块总是被添加到区块链的“末端”。比特币的区块链,每个区块在链上都有一个位置,叫做“高度”,截至2020-04-1820:36 ,区块的高度已经超过626548。
极大增加区块内容被修改、删除的难度,这是因为每个区块都包含自己以及之前区块的hash值。假设某个黑客更改了先前的一个区块的内容,那么这个区块以及之后的所有区块的hash值都会发生变化,为了掩盖这次修改,他需要将这些区块的hash值都重新算一下,而这会付出的代价,同时,每个区块在区块链网络中都有一个高度,从而使得删除某个区块变得不可能。
Consensus Models 测试,区块链网络要求计算机(用户)求解一个复杂的计算数学问题来证明自己,当某台计算机解决了其中一个问题,它才有资格向区块链中添加一个区块,但是将区块添加到区块链的过程(俗称”挖矿“)并不容易,截止到2020年4月,比特币网络解决其中一个问题的几率约为15.5万亿分之一,为了在这个几率下求解复杂的数学问题,计算机需要花费巨大的电力来运行程序。
由于给定的一组数据只能生成一个hash,矿工如何确保他们生成的hash小于等于target?它们通过添加一个称为nonce的整数(number only used once )来改变输入的数据,一旦找到一个有效的hash,它就被广播到网络中,同时区块被添加到区块链中,找到这个nonce整数的矿工就能获得数字货币奖励,这个nonce整数就是要解决的数学问题。
Bitcoin 区块头包括如下部分:
挖矿成功,当且仅当找到一个合适的nonce整数,使得如下不等式成立(对于一个区块而言,变量version、hashPrevBlock、hashMerkleRoot、timeStamp、target是固定不变的):
SHA256(SHA256($version+$hashPrevBlock+$hashMerkleRoot+ $timeStamp+ $target+ $nonce)) <= $target
一个实际的Bitcoin的区块信息:
包含的交易信息如下(此区块有2570个交易,截取了其中2个):
Double-Spending意味着将同样的钱消费了两次,任意一种加密数字货币,若不能解决Double-Spending问题,则没有人愿意使用,比特币能够存活这么久并且得到很多人的追捧,说明它已经解决了这个问题。
先看一下实际生活中的例子,去星巴克购买咖啡,你把50元给服务员,服务员立即确认,然后将咖啡给你,这个交易就完成了,那个50元已经放到收银员的柜子里面,你没有办法再次获得那个50元来进行消费。通过微信或者支付宝进行消费,只是将实体货币电子信息化了(不同于数字货币),比如你账户有1000元,消费之后会变成950元,不可能通过极短时间内连续购买2次来实现只扣一次的钱,银联(信用卡)交易系统保证第二次交易在第一次交易完成后的基础上进行。
数字货币,以比特币为例,一开始大家账户里面都是没有Coin的,通过挖矿来获得Coin,而数字货币是分布式记账系统,没有一个中心化的地方存储大家的Coin,你的Coin只有你自己的私钥能提取或者消费,一旦私钥丢失,你原先的Coin将永远无法获得(包括自己和别人),别人通过你的公共地址发给你的Coin也将永远无法获得。因Coin是一串数字(存在你本地),有可能通过拷贝两份从而达到消费两次的目的。
看一下比特币是如何解决这个问题的:
场景:某个买家将1个比特币通过私钥进行数字签名后发给卖家A的公共地址,然后将同样的比特币签名后发给另外一个卖家B的公共地址,卖家A和卖家B各自通过自己的私钥确认了这两个交易,然后这两个交易都进入了比特币网络的待确认池。
通常来说,第一个交易会得到确认、并被矿工核实以便加到区块链的下个区块中,第二个交易会被矿工判定为非法、得不到足够的确认,从而被移出网络。
解决办法:建议卖家等至少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:
Race Attack:当攻击者将同一Coin快速连续地发送到两个不同的地址时(一个是他自己的地址,一个是卖家地址),很显然,只有其中一个地址最终能获得Coin。一旦完成了这两个交易,这两个交易都会进入一个未确认的交易池,无论哪一个交易首先得到验证并得到6个确认将被接受,另一个将被丢弃。作为一个卖家,你可能先得到6个确认,但如果攻击者先得到6个确认,那么你就不会收到你的Coin,这就是为什么说至少要等待6次确认。
通过消除验证过程中的人为参与提高准确性。
通过消除第三方验证降低交易成本。
去中心化使得篡改变得困难。
缺点:
与挖矿相关的技术成本高。
每秒能够处理的交易数量低,对于比特币网络而言,平均每10分钟产生一个区块,每个区块平均包括3000个左右的交易。
因其私密性,可能会被用于非法活动。
实际应用
加密数字货币,例如,比特币。
医疗记录,医疗保健提供商可以利用区块链安全地存储患者的医疗记录。生成并签署病历后,可以将其写入区块链,为患者提供病历不可更改的证据和信心。这些个人健康记录可以用私钥编码并存储在区块链上,这样它们只能由某些个人访问,从而确保隐私。
内容分发,改变传统的内容分发模式,区块链上的智能合约(SmartContract)确保收入始终由权利人获得。
供应链,供应商可以使用区块链记录他们购买的材料的来源,这将允许下游企业验证其产品的真实性。从产地到最终消费者,食品行业正在借助区块链来追踪食品的路径和安全性。
以内容分发平台为中心的模式
Smart Contract保证收入始终由内容创作者获得(内容分发平台已无绝对权力)