将交易加入到区块里面需要涉及三个hash,一个是交易本身的hash,另一个是当前这个区块所有交易的merkle hash root,还有一个就是区块hash。
记账是hash打包的过程,就是hash打包交易信息,由于处理这些内容会消耗资源,所以算法会给予奖励
挖矿过程就是计算上述区块hash的过程,几乎所有的机器都可以挖矿成功。关键在于谁先挖到矿,因为当一台机器挖矿成功就向网络广播,其他挖矿在对这个hash进行 校验 之后,就停止自己的挖矿,开始基于这个区块挖新的矿。而每一个 被挖到区块 中记录的第一笔交易是给挖到这个区块的矿工自己的奖励金,所以抢到第一个挖矿成功名额对于矿工来说至关重要。
前面说过,计算区块hash过程里面,会以区块包含的交易的merkle hash root作为计算的一个参数,因此,挖矿时,矿工会事先从自己本地的交易信息里面提炼出merkle hash root,也就是说,在挖矿之前,对于当前这个矿工来说,新区块会包含哪些交易就已经确定好了的。
比特币出块奖励包括两部分:系统奖励(也称Coinbase奖励)和交易手续费奖励(也称矿工费)。矿工打包交易到所挖出的区块里,才能得到该笔交易的手续费。
手续费是发起交易的节点决定给的,和小费性质一样。有给手续费的交易将被矿工优先打包进区块,顺序按手续费多少进行排序,所有给手续费的交易打包之后矿工才会考虑打包没有手续费的交易,所以交易的确认速度快慢不同
一个区块产生之后,它不是立即可信的,网络上的节点总是相信最长的区块链,当一条交易记录被打包进一个区块之后,就有了一个交易确认,所以一个区块会有很多个交易确认,当区块被打包加到链上时又会产生一个区块确认,相当于确认了区块里的所有交易,而这个区块所在的链后面被再加入一个区块,就是第二个确认,如此下去,一个交易有了6个区块确认,我们就认为这个交易已经确定了,会被永远记录在区块链中。为什么是6个确认呢?因为每一个确认就是一个挖矿过程,都需要提供非常严格的计算,因此,这6个区块被同一个矿工创建的可能性微乎其微(可以说是不可能),因此矿工伪造交易也基本不可能。
由于比特币的区块平均产生时间是10分钟,所以一个交易要1小时左右才能保证成功(最快),不过也不是所有的系统都这样认为,有些网站在接受比特币支付时,认为4个确认就可以给客户发货了。如果不幸这个交易在创建的时候,没有被打包进最近的那个区块,那就要延迟10分钟,如此下去,如果后面过了好几个区块,交易都没有被打包进区块链,那就悲剧了。
算力(也称哈希率)是比特币网络处理能力的度量单位。即为计算机(CPU)计算哈希函数输出的速度。比特币网络必须为了安全目的而进行密集的数学和加密相关操作。
在通过“挖矿”得到比特币的过程中,我们需要找到其相应的解,而要找到其解,并没有固定算法,只能靠计算机随机的哈希碰撞。
一台矿机每秒钟能做多少次哈希碰撞,就是其“算力”的代表,单位写成hash/s。
工作量证明主要分为以下几步:
第一步,生成奖励矿工的交易coinbase交易,然后与其他交易一起打包成交易列表,使用算法Merkle tree生成Merkle root hash;
第二步,把Merkle root hash和其他的一些组成部分一起组装起来形成80个字节的区块头,再将这个区块头作为工作量证明的输入;
第三步,不断的改变区块头组成成分之一随机数,然后再对整个区块头进行两次SHA-256哈希运算,将结果进行哈希反转然后与网络中的目标值的十进制类型的字符串进行比较,如果小于目标值,则工作量完成。
轻钱包指的是节点本地只保存与其自身相关的交易数据(尤其是可支配交易数据),但并不保存完整区块链信息的技术。
SPV的目标是验证某个支付是否真实存在,并得到了多少个确认。
如何快速验证该支付的真实性,是SPV的工作目标。
轻钱包或瘦客户端的目标不仅是支付验证,而且是用于管理节点自身的资产收入、支付等信息。
轻钱包与SPV的最大区别是,轻钱包节点仍需下载每个新区块的全部数据并进行解析,获取并本地存储与自身相关的交易数据,只是无须在本地保存全部数据而已。而SPV节点不需要下载新区块的全部数据,只需要保存区块头部信息即可。
SPV(Simplified Payment Verification)简单支付验证指的是区块链支付验证,而不是区块链交易验证。
区块链交易验证的过程比较复杂,包括账户余额验证、双重支付判断等,通常由保存区块链完整信息的区块链验证节点来完成。而支付验证的过程比较简单,只是判断该笔支付交易是否已经得到了区块链节点共识验证,并得到了多少的确认数即可。
支付快速验证,即检查此项支付交易是否已经被收录存储于区块链中,并得到了多少个确认数,就可以判断支付验证的合法性。
UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。
我们在比特币钱包中所看到的账户余额,实际上是钱包通过扫描区块链并聚合所有属于该用户的UTXO计算得来的。
比特币规定每一笔新的交易的输入必须是某笔交易未花费的输出,每一笔输入同时也需要上一笔输出所对应的私钥进行签名,并且每个比特币网络的节点都会存储当前整个区块链上的UTXO,整个网络上的节点通过UTXO及签名算法来验证新交易。
钱包其实就是“私钥、地址和区块链数据的管理工具”。根据区块链数据的维护方式和钱包的去中心化程度,我们可以把钱包分为:全节点钱包、轻钱包、中心化钱包。
全节点的代表是bitcoin-core 核心钱包,需要同步所有区块链数据,占用很大的内存,但是可以完全实现去中心化。
轻钱包依赖比特币网络上其他全节点,仅同步与自己相关的数据,基本可以实现去中心化。
中心化钱包不依赖比特币网络,所有的数据均从自己的中心化服务器中获得,但是交易效率很高,可以实时到账,你在交易平台注册的账号就是中心化钱包。
参考实现节点、完整区块链节点、独立矿工节点等等节点类型,这些节点的首要任务是校验和维护一个不断增长、内含交易记录的区块链体。
钱包的作用是保存私钥、管理交易和数字资产等
区块链是一种去中心化的分布式账本,可以简单理解为分布在全球各个节点的分布式数据库,数据库由区块按时间顺序相连而成,区块中记录的是数笔交易。
为了能支持这一套系统的运行,需要各节点矿工的参与,他们参与的主要原因是因为有奖励,奖励可以去交易所换成钱,他们这样参与的过程类似于挖矿,所以被成为“矿工”。
矿工在什么样的规则下才会得到奖励,这样的规则在区块链中叫共识机制。
对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。
学术界统一称为对等网络(Peer-to-peer networking)或对等计算(Peer-to-peer computing),其可以定义为:网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源、服务和内容的提供者(Server),又是资源、服务和内容的获取者(Client)。
对等网络是一种网络结构的思想。它与目前网络中占据主导地位的客户端/服务器(Client/Server)结构(也就是WWW所采用的结构方式)的一个本质区别是,整个网络结构中不存在中心节点(或中心服务器)。在P2P结构中,每一个节点(peer)大都同时具有信息消费者、信息提供者和信息通讯等三方面的功能。从计算模式上来说,P2P打破了传统的Client/Server (C/S)模式,在网络中的每个节点的地位都是对等的。每个节点既充当服务器,为其他节点提供服务,同时也享用其他节点提供的服务。
简单的说,P2P就是直接将人们联系起来,让人们通过互联网直接交互。P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。
P2P另一个重要特点是改变互联网现在的以太网站为中心的状态、重返“非中心化”,并把权力交还给用户。
对等网络是对分布式概念的成功拓展,它将传统方式下的服务器负担分配到网络中的每一节点上,每一节点都将承担有限的存储与计算任务,加入到网络中的节点越多,节点贡献的资源也就越多,其服务质量也就越高。
区块链由多个相连的区块构成,每个区块记录了一段时间内网络中比特币的交易情况,可以将区块视为账簿中的帐页。第一个被最早构建的区块称为创世块,拥有一个唯一的ID标识号。除创世块外,每个后续建立的区块均包含两个ID号,一个是该区块自身的ID号,另一个是前序区块的ID号。通过ID号间的前后指向关系,所有区块按序相连就构成了区块链。
以上部分资料来自网络整理