9

确定技术任务 了解区块链限制 开发区块链之前 你该做哪些设计和准备工作?

 4 years ago
source link: https://www.jinse.com/blockchain/647583.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在开发自己的区块链之前,你要做哪些事情?

首先,要和团队讨论开发的原因,以及开发预算。必须要注意区块链架构及启动细节,当你低估了工作量和复杂性的时候,会很容易忽略这些细节。

为了避免这些错误,作者写下了这篇分步指南,重点介绍了如何启动区块链。

确定技术任务

区块链的主要作用是接受来自用户的事务交易,并以准确且不可否认的方式对其进行处理。每笔交易的结果都被记录在区块链网络中所有机器上的公共数据库(状态数据库)中。如果参与者具有其初始状态的数据以及所有交易或区块的日志,则可以复制并复核此数据库。

有些交易花费的CPU时间非常短(它们不计算任何内容),但是它们可以一次性更改多个余额并将大量数据写入存储中。有些交易会加大处理器负荷以执行加密计算,这将导致存储中记录的值非常小。

在第一种情况下,硬盘和RAM的工作更多,而在第二种情况下,CPU的工作则更多一些。由于这些参数会极大地影响区块链服务器的成本,因此理解交易类型是技术设计的重要部分。

在交易之外,区块链场景也起着举足轻重的作用,例如,网络能够处理来自特定帐户的多少笔交易。这可能只是十几个帐户,但每个帐户都向网络发送大量的交易;或者可能是成千上万个仅进行一笔小交易的新账户。

需要注意的是,用于游戏、金融技术应用程序或加密协议的网络在节点负载方面存在很大差异。

任何比“地址到地址(address-to-address)”代币传输更复杂的逻辑都需要特定的代码(智能合约、运行时等)。在区块链项目中,要选择一个能够执行这些代码的虚拟机。

选项1:专用虚拟机(VM)

实例:EVM (Ethereum)、TVM (TON)

通常,专用VM的功能有限,只能执行其平台的智能合约。其具有高度安全性,产生的结果更具可预测性,并且能够计算用于交易处理的所有资源。

选项2: 标准虚拟机

实例:EOS中的Web Assembly、Parity Substrate(Polkadot)

WebAssembly (WASM)是一种用于创建客户端代码的web标准,它比JavaScript的效率更高。从理论上讲,WASM的智能合约可以用任何语言进行编写,但是低级语言(C、C++、Rust等)更适合区块链,否则生成的代码将无法优化。

WASM还能够跟踪执行所需的资源。由于具有更多的合约功能,WebAssembly的安全性比不上专用虚拟机。

选项3: 本机代码交易处理

实例:Hyperledger Fabric、Cosmos

当处理交易的代码“嵌入”到节点中时,将使用本机代码处理。该选项的缺点是其安全性和交易处理的确定性较低;其优点是功能强大(开发人员可以不受限制地使用任何语言功能)。

muqe2qz.jpg!web

选择区块链的另一个标准是更新合约代码的方式。系统错误是不可避免的,而你又不得不添加并更改系统功能。在现代区块链中,这些任务可以通过多种方法来解决,例如下面的解决方案。

选项1: 用户提供的智能合约

实例:Ethereum中的智能合约、EOS、TON、Parity Substrate(具有WASM或EVM智能合约模块)

TON:https://forklog.com/chto-takoe-ton/

任何用户都可以创建智能合约或者复杂的智能合约系统。可以在不与网络验证器交互的情况下部署和更新合约。

这是最灵活的方案。它能够构建任意复杂的合约系统,但由于合约代码可能会包含任何内容,因此需要更为复杂的节点操作逻辑。因此,区块链节点必须非常谨慎地执行这些代码,限制其时间、请求的数据和对共识的影响。

选项2:由验证器控制的运行时代码

实例:Parity Substrate 运行时代吗、Cosmos Application

该方案可以表示为处理所有类型交易的大型智能合约。验证器检查代码并为必要的更改进行投票,然后新的逻辑才开始运作。同时,开发人员可以从一组现成的模块中创建运行时代码。

修改处理交易的代码比较困难,但是不需要进行额外的安全检查。验证器必须检查更改,并且不能跳过易受攻击的代码,否则区块链将无法正常运行。

与用户合约方案相比,此类“运行时”代码的开发人员可以获得更多的功能和资源。运行时模式对于平行链parachains(具有独立功能的子链,是大型区块链系统的一部分)来说尤为重要。

如果不了解交易的本质、虚拟机功能和智能合约逻辑的话,使用区块链的方式将会极为低效。例如,仅仅为了简单的操作就使用昂贵的软件,或者为解决小小的逻辑修正就对主节点代码进行危险的更新。

区块链限制

当运行自己的区块链时,需要评估客户的技术需求并了解其可行性。

需求之一是在客户端“执行”交易的时间。一个常见的错误是仅基于tps(每秒交易数)进行速度估计。

开发人员通常将tps作为“区块到区块时间(block to block time)”内的交易数量。例如,1000 tps代表区块间的时间为1秒,而一个区块可能包含多达1000个交易。这并不意味着区块链处理每项交易的时间都在0.001秒内,因为交易处理时间取决于区块生产时间。

如果区块生产时间是3秒,那么一个交易的处理时间则可以达到3秒甚至6秒(从发送交易到出现下一个区块)。只有通过从不同的帐户发送并行交易才能实现3000tps(每个区块最多处理1000个事务)。

nYRVj2Y.jpg!web

现代区块链的另一个重要限制是验证器(产生和确认区块的服务器)的数量。在生成一个区块之后,验证器必须对其达成一致意见(共识)。区块生产时间取决于验证器以及需要交换的消息的数量。所有网络共识都需要至少1/2 N + 1个验证器的同意,2/3个N + 1验证器的同意才能保证完全安全。这些都是基本的,可以保证网络对参与者恶意行为的容忍性。

如果你计划推出一个区块链,那么就不要期望能对客户和数百万验证器实现实时回复。这只有在成熟的量子通信技术和加密计算出现之后才能实现。

测试网和支持

假设你已经选择了一个区块链并准备启动。下一步要做什么呢?

步骤1: 选择实施方案并评估费用

首先,必须要选择特定的技术,评估项目实施的风险和人工成本,并考虑某些解决方案的局限性。该解决方案可能已经在实际环境中进行过测试了,也可能还处于开发过程中。

如果你要推出自己的解决方案,那就要分析最接近的类似方案。这样可以帮助你节省时间,并从其他团队的经验中获益。

步骤2: 大量测试

网络测试意味着使用最接近实际的验证器数量来检查区块链性能。如果区块链有100个验证器,则需要确保网络能够在负载下正常工作。

测试涉及用于自动部署包含多个验证器的网络的基础设施,这将在以后的阶段中非常有用。

如果不进行测试,就会有在网络共识中存在错误或漏洞的风险,尤其是当算法并不是众所周知的(而是一个私有解决方案)时。在已经运行的网络中收集问题相关信息则会造成不必要的麻烦。

Bne2Ubu.jpg!web

步骤3: 测试网

测试网能帮助团队和用户在主网之前试用解决方案。测试网中应该包含所有的主网功能,并且客户端应用程序应该支持这两个网络。由于智能合约的准确性,因此可以以99%的准确率和真实用户的实际余额进行产品测试。

在测试网期间,你可以分发代币,检查验证器如何启动其节点,与活跃用户进行首次交易,然后在主网中应用测试结果。

有些软件(用于验证器、监视器或区块浏览器的web接口)需要在测试网启动后立即获得支持。在测试网络中启动这些服务时获得的信息将有助于主网的顺利运行。

这个阶段会展示团队工作的质量——软件的稳定性,文档的编写水平,潜在的验证器能够多快地部署所需软件,等等。

步骤4: 选择验证器

通常都是由独立公司来充当网络验证器的角色,因此几乎不可能将它们聚集在一起并同步执行。所有程序都应考虑到验证器的地域分布和经验水平,允许验证器采取任意顺序的操作。

选择验证器的最流行的方法是以DPoS算法为基础。代币持有者们使用其余额为验证器投票。获得多数代币投票的顶级验证器有权生成区块。在权威证明proof-of-authority(POA)网络和公司区块链中,用其他验证器的投票来代替代币余额。

在启动主网之前,你需要创建验证器初始列表,并决定何时开始全面生产区块。从技术层面来讲,你的团队可以立即在初始网络区块中注册所有的验证器,也可以先运行自己的验证器,然后逐渐将其替换为新的验证器。

步骤5: 主网

主网启动应该包括主动监控。所有验证器的信息最好都能出现在同一项服务中——这样你的团队就能够更积极地响应网络问题。

区块资源管理器出现了新要求——主要外部网络服务。因为交易信息对项目团队和用户来说非常重要,所以在出现故障时,它应该能自动切换到备份服务器。如果资源管理器存储着用户信息(例如,Etherscan中的合约代码验证),可能也会需要备份副本。

桥梁——允许你将代币从一个区块链转移到另一个区块链的软件——在支持方面也可能是变化无常的。实际用户的余额取决于桥梁的工作,因此需要特别注意其安全性。

步骤6: 代码更新和支持

团队的工作并不会随着主网的发布而停止(尤其是当区块链是在现有解决方案的基础上构建的时)。代码库也在改变并积累重要的bug修复和优化。这些更改必须包括在项目中,并且必须及时更新区块链节点代码。

在这个阶段,开发的文档和步骤(应该在测试网中进行测试)是非常重要的。在代码更新期间不能有任何失败,否则验证器会损失金钱、时间和声誉。在主网期间,验证器池可能会发生显著变化。如果支持不足或文档不完善,可能会导致网络问题。

总结

在已经成功的解决方案的基础上发布区块链并没有太大的风险。通常,问题具有经济或组织性质,这与节点的内部代码无关。

建立在公共网络(Ethereum, EOS)基础上的解决方案是非常可靠的软件,可以被无限提供给互联网用户。中心化的金融系统不具有这种特性:如果没有注册、登录-密码对和监控,则无法建立具有关键开源信息的银行API或数据库。

虽然区块链的开发和启动是非常昂贵的,但其运行可能会给参与者们带来惊喜,因为它具有极强的安全性、自动调节能力和网络能力,能够在困难条件下保持交易的准确性和稳定性。

作者 | boogerwooger

译者 | 火火酱,责任编| Carol

出品| 区块链大本营

原文:https://hackernoon.com/how-to-launch-your-own-blockchain-scope-of-work-and-design-part-i-613o32ze


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK