本教程的目的是帮助你了解如何开发区块链技术。在本教程中,我们将:
创建你的第一个非常基础的区块链。
实施简单的工作量证明系统(采矿)。
探讨任何的可能性。
我假设你对面向对象编程有基本的了解。值得注意的是,这不是一个功能齐全的生产区块链。相反,这是一个概念验证实现,可帮助你了解区块链对于未来教程中区块链的作用。
配置
我们将使用Java,但你应该能够使用任何OOP语言。我将使用Eclipse,但你可以使用任何新的花哨的文本编辑器(虽然你会错过很多好的扩展)。
你会需要:
安装了Java和JDK。
Eclipse或其他IDE。
或者你可以通过谷歌获取GSON库。这将允许我们将对象转换为Json。这是一个非常有用的库,我们也将在peer2peer中使用更多的东西,但是可以随意使用替代方法。
在Eclipse中(file> new>)创建一个Java项目。我将把我的项目称为,并使用相同的名称创建一个新类。
现在你就可以去试试:)
创建区块链。
区块链只是一个链/列表块。区块链中的每个区块都有自己的数字签名,包含前一个区块的数字签名,并且有一些数据(例如,这些数据可能是交易)。
哈希=数字签名。
每个块不仅包含之前块的哈希值,而且它自己的哈希部分是从前一个哈希计算的。如果前一个块的数据被改变,那么前一个块的哈希将改变(因为它部分地由数据计算),进而影响其后的块的所有哈希。计算和比较哈希值可以让我们看到区块链是否无效。
这是什么意思?…更改此列表中的任何数据,将更改签名并破坏区块链。
所以先让我们创建构成区块链的类Block:
正如你所看到的,我们的基本块包含一个,它将保存我们的数字签名。变量用于保存前一个块的哈希和以保存我们的块数据。
接下来我们需要一种生成数字签名的方法,你可以选择许多加密算法,但适用于此示例。我们可以访问SHA256算法。
我们需要稍后使用,以便在新的 类中创建一个方便的helper方法:
如果你不理解这个帮助方法的内容,不要太担心,你需要知道的是它需要一个字符串并对其应用SHA256算法,并将生成的签名作为字符串返回。
现在让我们使用我们的 helper,在Block类的新方法中计算哈希值。我们必须计算我们不想被篡改的块的所有部分的哈希值。因此,对于我们的块,我们将包括,和。
并让我们将此方法添加到Block构造函数中 …
一些测试时间…
在我们的主NoobChain类中,我们可以创建一些块并将哈希值打印到屏幕上,以查看所有内容是否正常工作。
让我们测试一下…第一个块称为块,因为没有先前的块,我们只需输入“0”作为前一个哈希。
输出应该类似于:
你的值会有所不同,因为你的时间戳会有所不同。
每个块现在都有自己的数字签名,基于其信息和前一个块的签名。
目前它不是一个区块链,所以让我们将块存储在中,并导入以将其视为。(单击此处了解如何导入gson库)
现在我们的输出应该看起来更接近我们对区块链的期望。
现在我们需要一种方法来检查区块链的完整性。
让我们在类中创建一个的布尔值方法,它将遍历链中的所有块并比较哈希值。此方法需要检查哈希变量实际上是否等于计算的哈希值,并且前一个块的哈希值等于变量。
对区块链块的任何更改都将导致此方法返回。
在比特币网络节点上共享其区块链,并且网络接受最长的有效链。什么阻止某人篡改旧块中的数据然后创建一个全新的更长的区块链并将其呈现给网络?工作量证明。工作系统的证明意味着创建新块需要相当多的时间和计算能力。因此,攻击者需要比其他对等组合更多的计算能力。
让我们开始挖掘块!
我们将要求矿工通过在块中尝试不同的变量值来进行工作量证明,直到其哈希以一定数量的0开始。
让我们在方法中添加一个名为的,以及非常需要的方法:
实际上,每个矿工将从随机点开始迭代。一些矿工甚至可以尝试随机数来获取随机数。另外值得注意的是,在更难的解决方案可能需要超过,矿工可以尝试更改时间戳。
方法接受一个名为的,这中间必须解决的数量为0的问题。在大多数计算机上几乎可以立即解决像1或2这样的低难度问题,我建议在4-6左右进行难度测试。在撰写本文时,Litecoin的难度大约是442,592。
让我们将难度作为静态变量添加到类:
我们应该更新类以触发每个新块的方法。布尔值还应检查每个块是否具有已解决(通过挖掘)哈希。
请注意,我们还检查并打印。
运行此结果应如下所示:
挖掘每个区块需要一些时间!(大约3秒)你应该弄乱难度值,看看这会影响挖掘每个区块的时间。
如果有人要篡改区块链系统中的数据:
他们的区块链无效。
他们无法创建更长的区块链。
你网络中的诚实区块链将在最长的链条上具有时间优势。
被篡改的区块链将无法赶上更长且有效的链条。
除非它们的计算速度远远超过网络中所有其他节点的总和。未来的量子计算机或其他东西。
你已经完成了基本的区块链!
你的区块链:
由存储数据的块组成。
具有将你的块链接在一起的数字签名。
需要工作挖掘证明来验证新块。
可以检查其中的数据是否有效且未更改。
你可以在Github上下载项目文件。
文章来自官方博客:
领取专属 10元无门槛券
私享最新 技术干货