比特币是一种网络虚拟货币,可以在全世界流通,具有匿名性,你不需要知道对方是谁,只需要一个比特币地址就可以点对点地给对方打款。
运行比特币网络的步骤如下:
- 新的交易向全网进行广播;
- 每一个节点都将收到的交易信息纳入一个区块中;
- 每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;
- 当一个节点找到了一个工作量证明,它就向全网进行广播;
- 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
- 其他节点表示他们接受该区块,而接受的方法则是跟随在该区块的末尾,制造新的区块以延长该链条,并将该区块的随机散列值视为新区块的随机散列值
也就是说,交易发生的一刻起,比特币的交易数据就被盖上了时间戳;而当这笔交易数据被打包到一个区块中后,就算完成了一次确认;在连续进行6次确认之后,这笔交易就不可逆。
工作量证明:
工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中的,对于验证方则是易于验证的。它与验证码不同,验证码的设计出发点是易于被人类解决而不易被计算机解决。
比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的工作量证明的谜题。这道题关键的三个要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题的所需要的计算量。
区块链的核心概念
一、区块
区块作为区块链的基本结构单元,由包含元数据的区块头和包含交易数据的区块主体构成。区块头包含三组元数据:
- 用于连接前面的区块、索引自父区块哈希值的数据;
- 挖矿难度、Nonce(随机数,用于工作量证明算法的计数器)、时间戳;
- 能够总结并快速归纳校验区块中所有交易数据的Merkle(默克尔)树根数据。
二、哈希算法
哈希算法是区块链中保证交易信息不被篡改的单向密码机制。哈希算法接收一段明文后,以一种不可逆的方式将其转化为一段长度较短、位数固定的散列数据。它有两个特点:
- 加密过程不可逆,意味着我们无法通过输出的散列数据倒推原本的明文是什么;
- 输入的明文与输出的散列数据一一对应,任何一个输入信息的变化,都必将导致最终
输出的散列数据的变化。
在区块链中,通常使用SHA–256(安全散列算法)进行区块加密,这种算法的输入长度为256位,输出的是一串长度为32字节的随机散列数据。区块链的哈希值能够唯一而准确地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块中的信息没有被篡改。
三、公钥和私钥
公钥和私钥。这就是俗称的不对称加密方式,是对以前的对称加密方式的提高。在比特币的系统中,私钥本质上是32个字节组成的数组,公钥和地址的生成都依赖私钥,有了私钥就能生成公钥和地址,就能够花费对应地址上面的比特币。私钥花费比特币的方式就是对这个私钥所对应的未花费的交易进行签名。
在区块链系统中,公钥和私钥还可以保证分布式网络点对点信息传递的安全。
信息发送者:用私钥对信息进行签名,使用信息接收方的公钥对信息加密。
信息接收方:用信息发送者的公钥验证信息发送者的身份,使用私钥对加密信息解密。
四、时间戳
区块链中的时间戳从区块生成的一刻起就存在于区块之中,它对应的是每一次交易记录的认证,证明交易记录的真实性。
五、Merkle树结构
区块链利用Merkle树的数据结构存放所有叶子节点的值,并以此为基础生成一个统一的哈希值。Merkle树的叶子节点存储的是数据信息的哈希值,非叶子的节点存储的是对其下面所有叶子节点的组合进行哈希计算后得出的哈希值。
同样地,区块中任意一个数据的变更都会导致Merkle树结构发生变化,在交易信息验证比对的过程中,Merkle树结构能够大大减少数据的计算量,从Merkle Tree的根节点开始进行比对,如果根节点一样,则表示两个副本目前是一致的,不再需要任何处理;如果不一样,则沿着hash值不同的节点路径查询,很快就能定位到数据不一致的叶节点,只用把不一致的数据同步即可,这样大大节省了比对时间以及数据的传输量。