本文转载自微信公众号《区块链研究实验室》,作者连三丰。转载本文请联系区块链研究实验室公众号。有人问我是否可以使用JavaScript构建区块链应用程序,并且肯定有可用于构建此类应用程序的资源。在本文中,我将向您展示它实际上并没有那么复杂。这就像一个普通的项目,但要遵循更多的规则。什么是区块链?区块链是一组区块链,它们组合在一起以生成有关某些交易或一系列步骤的信息。例如,每当你进行任何银行存款或取款交易时,你都会根据你最后一次存入银行的金额进行操作,而当任何人在网上进行交易时,它需要与前一个区块有某种关联关系。我们将如何理解这种情况并基于它创建应用程序,这里演示了块将如何连接。与Flowchart类似,我们将创建一个应用程序来演示它。让我们构建一个区块首先,创建一个区块链。首先我们需要有块,所以让我们创建一个名为Block的类。在第一行,我们正在导入一个包来为我们处理加密。下面的命令将为我们安装包。npmicrypto-js构造对象时,这里有一些参数,分别是index、timestamp、transaction和foreignHash。index是为block提供一个唯一的标识,通过index提取block为我们需要的任何数据结构。timestamp是给一个特定的block一个创建时间,因为block不能更新,所以我们不关心那个updateAttimestamp。transaction是需要阻塞的实际数据。例如员工总数或总数或发送者详细信息,如precedingHash所示,该字段将负责连接前一个块和当前块。hash是将与precedingHash一起使用的字段,以确保我们处于正确的连接轨道上。最后,有一个函数computeHash可以使用SHA256算法为我们计算哈希值。算法会取所有的数据来保证我们生成的哈希码的唯一性。现在我们创建了区块,让我们继续讨论链。创建一个链同样,我们将创建一个链类,它将使用更多方法调用其中的块。这是整个类的代码。首先,我们创建了一个空的构造函数来为我们初始化一些字段,包括id[给标识符]、name[给块一个很酷的名字]、blockchain[在所有块上工作的实际字段],最后困难[获得工作证明]。在转到代码的另一部分之前,我们将检查原因。对于任何区块链项目,我们都需要一个genesis来用第一个块初始化链,因为第一个块的行为就像一个构建块,并且包含块其余部分的第一个哈希值用作前一个哈希值。这里我们从上一个类创建一个块对象,并使用它的初始值作为参考。然后,我们创建一个带有一些参数的create()name通过API命名,id是API提供的ID,genesis为初始genesis提供一个值。然后我们在obtainLatestBlock()中给我们进入链中的最后一个块,这将帮助我们获取最后一个块的哈希值,然后将其分配给链中的新元素。最重要的方法是addNewBlock(),它将一个新块添加到我们的链中,该方法将块项目作为参数。首先我们会得到区块链的最新哈希值并将其添加到precedingHash中,然后创建一个新的哈希值并将其分配给哈希值,我们可以跳过这一步,因为我们已经在构造函数中将其添加到Block对象中。但是一旦这种方法奏效,它将继续将项目推送到我们的区块链生态系统中。最后是checkChainValidity(),我们不会使用它但有助于验证块。添加控制器和路由我们将添加3条路由,创建一个区块链,POST-/api/blockchain获取区块链,GET-/api/blockchain将新的子链添加到链中POST-/api/blockchain/append让我们创建一个控制器文件,首先,我们将导入我们创建的两个类Block和BlockChain。然后我们创建了一个名为FlippingCoin的控制器,您可以随意命名。然而,关键是我们需要关注3个方法:createNewChainappendNewChildgetChain现在,为了简单起见,我将跳过数据存储部分。除了这3个之外,我们还必须验证方法以验证链是否具有要创建的正确数据格式。我们需要调用相应的方法来使事情正常进行。如下所示添加路由在这里,我们确保将方法映射到正确的路由。让我们测试一下让我们转到POST路由-/api/blockchain这将根据我们在创世交易中传递的任何数据为我们创建一个新的区块链。让我们进入POST路由-/api/blockchain/append,当将交易数据传递到区块链时,它会被添加到链中。最后,我们去路由GET-/api/blockchain/检查数据是否已经更新。
