区块链变的越来越炙手可热,而这对于初入区块链领域的人来说,都没有搞清楚区块链是什么,虚拟钱包是什么,为什么交易有gas费用等等,所以本文首先会给出一些概念的解释,方便后面的探讨。
区块链其实就是一种链表结构,链表中的元素就是一个区块,每一个区块结构如下:
timestamp: 区块产生时间戳
nonce: 与区块头的hash值共同证明计算量(工作量)
data: 区块链上存储的数据
prevHash: 上一个区块的hash
hash: 本区块链的hash,由上述几个属性进行哈希计算而得
区块链本质是一种分布式的交易账本,所有用户都在本地存有完整账本信息。如果有用户想改变某一个区块信息,由于区块 hash 的计算过程使用了 prevHash 作为参数,那么该区块后的所有区块,都会变得不合法,需要重新计算 hash ,想让系统承认这个更改,必须同步更改 51% 的用户的账本信息,所以篡改区块链上的账本信息十分困难,这就保证了它的安全性。
挖矿本质上是一组节点(矿机)使用他们的计算资源去创建一个包含有效交易的区块的过程,参与这个过程的节点(矿机)被称为矿工。一个矿工想要提交一个区块到区块链上,就必须更快的计算出一个nonce,nonce 和 区块头信息能共同证明,一个区块是有效的。
上面提到,挖矿的过程中,矿工必须更快的计算出一个 nonce,这个 nonce 如何计算呢?nonce 是一个整数值,一般先把区块头信息后面加上nonce得到的字符串,进行 SHA256 哈希运算,得到的结果如果开头0的个数小于设定的难度值,则验证不通过,把 nonce 值加1重复上述操作,直到计算出来的 nonce 满足得到的哈希值开头0的个数不小于设定的难度值。而nonce的值,就是挖矿过程中工作量的证明。而系统为了鼓励更多矿工参与进来,会给参与挖矿的每个矿工一定代币的奖励。
钱包本质是一个包含私钥的文件。通常会包含一个软件客户端,钱包的地址,是由私钥计算出来的,也就是公钥。每一次交易,发送方必须要提供私钥,才能把该公钥地址下所拥有的代币转帐到其他公钥地址,所以私钥决定了比特币的所有权。这里要注意一点,一个钱包地址拥有多少代币,不是存储在私钥里,而是存在区块链上,区块链上有着所有历史交易账目,可以根据账目计算出每个地址所拥有的代币。
区块链目前Z火的两个应用就是比特币系统和以太坊系统,这两个系统都是公共区块链平台,都有自己自己的虚拟货币(比特币 和 以太坊)。但是他们是有很多区别的,其中一个重要区别就是,以太坊通过智能合约使平台具有图灵完备性,相对于比特币,未来更具有扩展性。当然这也和他们本身的目标有关,比特币想成为纯粹的虚拟货币,以太坊想成为一个纯粹的图灵完备的开发平台。
目前区块链技术可谓是炙手可热,作为前端的我们,可以尝试了解一些区块链基本知识,了解如何利用 web3.js 开发与公链节点交互的前端应用。现在已经有很多的脚手架,可以让我们快速开始开发基于以太坊智能合约的前端应用。