代码讲座:构建区块链平台所需的步骤

什么是区块链?

它实际上是块+链。

  • 块是存储数据的基础,链使它们保持连接
  • 在区块链系统中,链接在一起后无法阻止或修改数据
  • 区块链的本质是一个不变的账本。注意:我没有在此处添加“共享”或“分布式”。但是,从区块链的角度来看,它不包括分类账的生成方式和使用方式,这将在后面详细讨论。
  • 数据以区块链的形式存储。解决与业务相关的问题时,我们可以使用区块链技术(但并非总是如此)
  • 区块链不是一项新技术创新,而是一种使用技术和数据存储方法的创新,可以用来解决一些现有问题

区块链的应用

区块链行业的人们非常幸运,只要一项业务与在线存储数据有关,您就可以使用区块链解决他们的需求。当然,并非所有企业都需要区块链,区块链的使用通常取决于企业的痛点。

我们仍处于区块链的早期阶段,我们很幸运能够在此阶段做很多事情。

实际上,区块链存储可以以数据库或文件的形式实现。例如,您的数据在哪里?媒体数据库或关系数据库的关键是查看如何存储帐户。现有企业拥有大量的遗留业务系统,其中大部分基于关系数据库。

在这种情况下,您可以选择将您的区块链解决方案与关系数据库一起存储,以便大多数人可以轻松阅读您的分类帐。

区块链的类型

  • 公链
  • 财团链
  • 私人区块链

私有链由控制该链的私有实体运营或拥有。问题是,私有链是单节点还是多节点?如果是单个节点,可以将其制成区块链吗?

单个节点没有共享账本来同步节点。只有一个分类帐,没有其他人可以监督它。在这种情况下,您需要实时发布哈希值。一旦有人想查看您的数据是否有问题,您可以取出哈希值,取出账簿中的数据,然后使用默克尔树证明您的数据确实在账簿中。

例如:

  • 在您的官方网站上,您可能每天广播数据或提供实时信息
  • 或者,您可以每天在报纸上发布某个公司的哈希值
  • 或者您可以将它们写在以太坊链上以证明一致性和公平性

区块链协议

当我们谈论区块链平台时,我们经常会听到某些协议。当我们查看开源代码并看到诸如Go或Java之类的内容时,这没有什么不同。

实际上,区块链协议必须定义区块链的外观。在开发区块链平台时,区块链协议是区块链平台的行为准则。区块链协议通常包括哪些内容?

  • 如何处理和验证交易
  • 谁是块生产者
  • 节点如何交互?
  • 如何广播数据以及如何同步分类帐数据?
  • 应用程序的编程接口

注意:有内部接口(即节点之间的接口)和外部接口。如果其他区块链想要调用您区块链的数据,则需要一个外部编程接口。

最著名的区块链协议是

  • 比特币
  • 以太坊
  • 超级账本

以下是构建区块链协议所需的所有模块。

账户模型:设计区块链协议时,账户模型应包括哪些内容?生成帐户名的规则是什么?您的帐户类型是什么?您是基于UTXO还是基于余额?

加密货币算法:平台上使用哪种加密货币算法?

数据体系结构:每个块都必须具有一个块头。应该在块头中放置什么?

例如,上一个块的哈希,一些随机值,当前块的哈希等等。当前高度,交易数据结构,交易以及区块链的所有数据生成都是通过交易生成的。交易不仅指与货币相关的事物。例如,如果我向您发送消息,则为非货币交易。这也是一种交易。

节点通信:我们如何实现跨节点的通信?如果我们正在开发公共链,则需要实现一个p2p网络。p2p网络如何相互传输数据?方法包括HTTP,套接字或GRPC。

共识机制:您的区块链平台是一个公共的区块链平台。您可以采用共识机制,例如POW,POS和POA。如果它是联盟链,则可以使用PBFT / RAFT之类的方法。

智能合约:智能合约是最常见的区块链平台的合约语言,包括合约语言和操作环境。例如,以太坊使用面向对象的语言Solidity编写智能合约。以太坊有一个虚拟机(EVM)作为其平台上智能合约的运行时环境。另一个示例是Hyperledger,它使用Docker运行Go和Java语言代码。

在设计区块链平台时,首先要开发账户设计。

设计时的第一件事是选择椭圆加密货币算法。

诸如曲线25519之类的椭圆算法可以在其他几个选项中使用。需要使用椭圆算法的原因是您的帐户名实际上是您的公钥。

帐户名称不是简单的公钥,实际上是根据公钥计算得出的。此外,仅凭您的帐户名就无法知道您的公钥。椭圆曲线加密货币算法的目的是,当我提供私钥时,可以通过私钥计算公钥,而无需任何冗余数据。只有这样,我才能通过公用密钥计算我的帐户名。

您要么必须自己设计一套这样的机制,要么可以参考一些现有的实践。一般来说,帐户名称由三部分组成。这也包括您的帐户类型,通常用您帐户名称的首字母表示。实际上有很多类型的帐户。关键是要查看要设计哪种平台。以太坊最常用的类型-它具有外部帐户(由帐户所有者控制的帐户)和智能合约帐户。您可以使用0或1进行标识,也可以使用另一个字符替换创始帐户 -原始帐户。由于起源帐户是特殊的,因此只能将其发送到起始货币,并且只能发行一次。

由于它位于区块链的基础层,因此不允许创世账户进行交易。您也可以将创始帐户用作“黑洞帐户”。例如,如果您想销毁某些代币,则可以将代币直接发送到创始账户,因为平台不允许创世账户进行任何交易。

另一部分是公钥映射。公钥映射的一部分是,我们需要将私钥转换为公钥,然后在我们的帐户名上显示公钥。公钥通常由哈希值计算。散列后,可以通过base58转换公钥的映射部分。

为什么哈希值必须由base58转换?Base58是用户友好的。它不会混淆0和O,也不会说1和L相同。如果那样的话那将是无效的

由于帐户名通常很长,因此当用户需要手动输入这些帐户名时,很难保证输入的名称正确。如果有校验位,请查看帐户名是否正确。

实际上,可以通过对前两个部分的内容进行哈希处理,然后将哈希值的前几个数字作为比较数字来获得生成校验数字的规则。这是BTC的典型操作。

首先,对公钥进行哈希处理,然后使用base58生成它。

帐户生成是非常特殊的,它不需要任何系统,它可以完全离线生成帐户,并且生成规则完全独立于您的平台。

生成帐户时,通常会提示您输入助记词或短语-类似于随机加密的句子来存储您的私钥。创建帐户时,钱包将为您记住20个单词。这是因为这些单词被当作文本,然后再带到后台以被转换成它们自己的序列。最后,对这些序列进行哈希处理和加密货币。

获得的字节序列用作生成私钥的种子。使用私有密钥,公共密钥和帐户名也将存在。

这些话是从哪里来的?后台有一本密码簿,其中列出了大约100个单词。当您单击创建帐户时,将从100个矿池中随机选择20个单词并显示出来。我们从那里获取密码。

问题是,它安全吗?如果有人拿出相同的秘密单词并使用它们来获得他人的相同私钥,该怎么办。如果有人这样做,那么他们所有私有存储的数据,甚至可能是某些加密货币,都属于其他人。

好吧,不完全是。实际上,该系统实际上非常安全。

为什么我们显示密码和密码簿?那么从这100个单词中,如果需要组合的单词超过20个,那么冲突攻击者可以正确猜测私钥的概率是多少?

有多少种可能性?整个Cosmos中存在的可能性比Atom还多。这就像在大海捞针中找到一根针,或者说是等效的:在Cosmos中搜索Atom。

我们是否需要密码才能登录系统?没必要,因为您的私钥实际上意味着您可以控制所有内容。

您如何登录该系统?好了,您无需登录到系统。使用帐户发送交易时,您仅需要私钥即可签名。为什么?区块链上的所有账户都是开放的。原则上,您可以登录到任何人的系统,例如,您可以查看块浏览器并找到某人的地址。然后,您可以使用他的地址登录到他的系统。

由于所有数据都是公开的,因此您可以登录并查看您的朋友拥有100个数字资产。但是,这对您毫无意义,因为您没有私钥。

因此,当我们构建区块链平台时,我们无需考虑其他密码系统。您只需要选择一种非对称加密货币算法即可。

非对称加密货币算法在区块链中非常重要。为什么不对称?由于对称加密货币无法进行签名和检查;相反,您必须确认发送的交易是您真正的主观交易。区块链中交易的签名和检查必须使用加密货币系统对交易数据进行加密。

注意:所谓加密货币交易数据,是指对称加密货币。

为什么对称加密货币也反映在非对称加密货币中?

例如,如果我想向您发送私人消息,则必须对其加密货币。否则,其他所有人将看到由我的私钥和您的公钥计算的结果,并且他们还将看到由您的私钥和我的公钥计算的结果。

您可以基于计算出的对称加密货币密钥对消息进行加密。

假设如果我给您发送了一条消息,为什么不只使用您的公共密钥对其加密货币呢?或者,如果您想给我发送消息,请使用我的公共密钥?原因是,如果在其他人向您发送相同消息时执行此操作,则会发现您正在使用相同的加密货币方法进行通信。

加密货币密钥不保留发送者的信息,它仅使用接收者的公共密钥进行加密。加密的数据不知道是谁加密的。还有一个哈希算法在区块链中也非常重要。例如,我们需要对所有哈希使用哈希算法,例如SHA256。我们也可以选择SHA3。实际上,这是相当开放的,取决于我们自己的选择。

交易签名:为什么交易签名使用哈希算法?代替对事务的所有字节进行签名,必须首先为事务的内容计算一个哈希值,然后对哈希值进行签名。因此,哈希算法也用于签名动作中。

共识机制:在争夺区块生产者时,哈希算法实际上用于计算常规区块生产的概率和验证规则。

区块链平台可以支持不同的加密货币算法吗?目前,所有区块链平台都必须选择加密货币算法。

在构建区块链平台时,您必须考虑的一个方面是交易结构。发送交易时,您必须签署交易。签名是一种应用的非对称密码算法,但是最好添加一个额外的字符来标识事务结构中的属性。我们可以使用椭圆曲线x加密货币算法。要考虑的另一个方面是SM2。此外,在帐户的数据结构中,您可能还需要添加一个通过专用密钥计算公用密钥的属性帐户。还必须考虑使用哪种算法来计算公钥。

数据结构与存储设计

数据结构包括您的帐户数据结构,块数据结构,交易数据结构和节点数据结构。如果它是一个关系数据库,则主要涉及您设计的一些数据库表。这些数据库表包括帐户表,块表,事务表和节点表。

我们可以根据需要选择任何数据存储方法。数据存储可以与相对独立的位置分开。您可以以API的形式为区块链平台和数据存储的共识机制进行互操作设计。这样,您制作的平台或解决方案可以根据需要的使用方式满足不同的业务需求。

当前,它们大多数是NoSQL数据库,例如RocksDB和LevelDB。您甚至可以选择Oracle。像RocksDB和LevelDB这样的嵌入式数据库的优点之一是,它可以在性能要求较低时运行。他们的目的是让更多的人使用它。同样,可以根据业务需求使用不同的解决方案。

当我们尝试解决业务场景时,我们不必急于请求数据。我们可以使用传统的企业计算架构来设计区块链的底层,并且可以运行Oracle数据库。

节点通信协议的设计

节点通信意味着您可以访问它并提供反馈。您可以使用HTTP,Socket或GRPC进行计算。GRPC可能比HTTP更有效率。

我们如何处理拜占庭式节点?

为了构建区块链平台,首先,我们定义一个节点的种子,该种子以代码编写。您可以写下所有这些节点。问题在于这些节点不一定是好的节点。某些节点只能上电一次然后关闭。

也有一些可能致力于邪恶的节点。他们可以提供虚假数据或错误数据。这可能包括不可靠的数据,或者所提供的数据与其他人提供的数据不同。在这种情况下,我们需要设计一种机制来验证数据是否错误,以及一种惩罚不良节点的惩罚机制。

定义节点的数据库表时,应在一个字段中标记该节点的类型。当它是拜占庭式节点时,您可能不得不惩罚它。通用方法是将该节点放入黑名单。此黑名单并不意味着该节点永久地卡在那里。还需要设计各种释放机制。

因为在某些情况下,即使它被标记为拜占庭节点,在某些情况下它还是一个好节点。例如,在网络状况不佳的情况下,该节点可能尚未联机,或者在传输过程中可能丢失了数据。为了公平的设计,这些节点不应永久失去访问权限。为了确保公平,必须使用释放机制。如果您再次检查该节点,但它仍然不能正常或以公正的方式运行,那么我们可以增加其被列入黑名单的时间,直到最终同意该节点是一个坏玩家。

另外,您还需要将每个节点的性能作为节点设置的考虑因素,因为有些节点可能离您很远,有些可能在您所在的地区,有些可能在世界的另一端。如果标记了节点,则它们可以为您选择最佳节点并与其连接。

共识机制的设计

共识机制的设计实际上是一个简单的问题。如果我们所有节点都同样重要,那么谁来写分类帐?不建议使用诸如工作量证明之类的共识机制,因为它需要太多的计算能力以换取低性能。

股权证明是一种典型的共识机制。通常建议使用这种共识机制(以及实用的拜占庭容错或PBFT),因为它们已被每个人普遍接受。

智能合约

智能合约的目的是您上传一段代码自动执行它。该代码可用于每个节点。如果余额超过10个单位,则必须让该人将多余的令牌转移到另一个帐户。然后每个人都可以阅读您的代码,然后提前执行智能合约以验证执行智能合约后的结果。这是智能合约的最简单示例。

智能合约实际上要求您上传合约。

该合约的目的是什么?

合约是我希望我的程序作为一个规则实施,并且共识规则是在没有任何人控制的情况下强制执行的。之前曾提到,所有公共区块链平台都将竭尽全力支持智能合约。当我们构建自己的区块链平台时,或者当您为特定项目构建区块链解决方案时,我们实际上不需要再次重新构建智能合约区块链。智能合约是供公众使用的,因为作为通用平台,智能合约不知道企业如何使用它们。

以太坊会考虑什么样的业务逻辑?毕竟,以太坊需要支持许多不同类型的场景。以太坊不知道需要支持哪种特定类型的业务逻辑。

我们可能必须编写一个通用的区块链平台。为此,我们可以在垂直行业中开展业务,然后再专注于特定行业以解决特定问题。如果您采用这种方法来设计区块链解决方案,那么我们实际上将不需要智能合约。我们将在基础代码中编写所有需要达成共识的东西。

当与客户合作时,这可能是一种更灵活的方法,因为智能合约的设计非常复杂。如果使用Solidity编写,那么任何模块的设计不当都会非常复杂。此外,您需要请求智能合约才能满足各种业务场景的需求。因此可以避免。使用智能合约的优点之一是它具有较高的门槛和技术要求。您需要编写一个编译器和一个解释器,这是寻找不容易工作的人才的良好基准。

还可以选择不支持智能合约的平台,而是提供脱链智能合约供您使用。这种类型的平台通常使用预先编写的智能合约,并在链外进行处理。

结束语

我们希望以上介绍可以概述在设计用于商业用途或客户的区块链时需要考虑的内容。如有任何疑问,请在评论中提问。

提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢