公共区块链通过提供数据的透明度、完整性、可追踪性、真实性来协调信任层。它可以记录所有交易活动。这些独特的属性吸引了许多企业来开发应用程序,这些应用程序记录利益相关者之间的透明活动、提供来源可追溯性的所有权详细信息、证明存在的数字内容的时间戳等等。Aion基金会首席执行官Matt Spoke强调了公共区块链是一条很好的前进道路的原因。
尽管区块链存储是开放和可访问的,但在这种状态下执行的每一个写操作都会产生成本。因此,必须将应用程序的主要部分托管在区块链上,以最大程度地降低成本。需要构建应用程序的其余部分来解决以下问题:
两个关键问题
1. 需要在区块链中存储哪些数据?
公共区块链上的任何数据都是开放的、访问的且不可撤销的。因此,除非数据已使用抗量子算法编码并存储,否则公共区块链不符合GDPR(以及CCPA)法规的标准。
个人身份信息(PII)或危及用户隐私的敏感数据不应存储在区块链上。但是,区块链仍然需要账户地址才能将其与真实用户单独链接(在区块链上可以是伪匿名的)。
2. 在哪个区块链上构建应用程序?
软件的性能直接取决于其依赖项及其主机环境的性能。区块链带来了一种去中心化架构的新模式,其中链上的每个节点不断更新以维护状态。除此之外,区块链应用程序还需要处理各种问题及其实现。
共识
区块链依赖于参与者节点的分布式共识。与任何权益证明(PoS)系统相比,工作量证明(PoW)共识需要花费更多时间才能在基于最终水印的系统上达成共识。同样,其他变体共识算法也会影响交易确认时间,应用程序需要在不牺牲响应时间的情况下进行处理。
智能合约
公共区块链智能合约方法是开放的,无论什么样的用户都可以调用。因此,智能合约需要确保其数据不被破坏,并防止滥用其业务逻辑。开发安全有效的智能合约需要高超的技能,并需要大量的实践。此外,基于这种智能合约的复杂性和监控影响,它需要与外部组织进行安全审核。
区块产生时间和交易数量
区块的产生时间和可以合并到一个区块中的最大交易数决定了系统的吞吐量。该应用程序理论上可以生成许多交易,但是这些交易仍需要与区块链上的其他应用程序一起完成。例如,以太坊当前每秒处理15个交易。
访问区块链
尽管区块链是开放和可消耗的,但需要可靠的连接才能使用完整的节点或第三方等选项(例如Infura、Blockdaemon、Nodesmith等)与其通信。完整节点保证最新的区块链状态。然而,它很难管理(特别是在维护和升级方面),而且不具有成本效益。
如果企业选择第三方服务,它将引入额外的依赖性,其内部工作原理是将交易交付到区块链、交易池管理、重试策略和重置策略。
天然气成本和价格
以电网为例,与区块链上执行交易相关的天然气价格根据电网的需求和供应而波动。基础电网加密货币价格也会对其产生影响。根据应用程序的使用模式,明智的做法是估算未来三到五年内运行该系统的天然气成本预算,而在价格较低时提前购买天然气将有助于降低成本。
工具与支持
最后但并非最不重要的一点是对区块链生态系统的工具支持,因为它在开发、部署、调试和监视智能合约时起着至关重要的作用。在需要时获得技术支持会带来很多不同工具。
处理区块链的复杂性
墨菲定律在理想世界中是无效的,但实际上出了问题,人们需要为可能出现的最坏情况制定计划。其中一些问题是可以解决的,但是应用程序仍然需要处理来自区块链复杂性的挑战。
区块链无法处理的交易
如今,许多应用程序都会产生大量的微交易,以记录每一个小细节。区块链尚未达到这一级别的可扩展性,但是,它不应阻止人们在其之上构建应用程序。这可以通过汇总交易(如果逻辑上可行)并减少区块链上的交易提交来解决。
高吞吐量的另一种选择是使用侧链网络(如果可用),这样可确保将公共区块链收益仍可用于应用程序,同时将部分工作卸载到侧链。
未能实施交易
区块链可能无法提取应用程序提交的交易。这可能是交易本身的问题,也可能与分散网络问题有关(例如,区块链中链的重组、硬分叉、交易池故障等)。该应用程序将在所有情况下通过记住已提交给区块链但未通过的内容来重试。
如果交易失败是由于较低的天然气价格引起的,则应用程序将以较高的天然气价格重新提交交易。否则,它将重试。这对于同步区块链的状态和应用程序的内部状态至关重要。
电网拥塞
应用程序应该具有响应和适应电网拥塞的规定。如果提高天然气价格不起作用,则该应用程序应定期或按指数重试。
电网拥塞采用区块链的好处是,可能无法立即通过其他方式将交易提交到电网。这将减少重复消费的风险。该应用程序可以使用其内部状态继续运行,并在以后以较高的可用天然气价格提交交易。
区块链与内部应用程序状态之间的不一致
如果应用程序是围绕区块链标记技术构建的,则应用程序的非区块链部分将记住尚未确认或提交给区块链的系统状态。
当用户访问应用程序时,可以考虑这些未决的交易。但是,如果他们直接访问区块链浏览器,则余额或状态可能会关闭。如果用户很聪明并且可以访问其私钥,那么他们可以将交易直接发送到应用程序外部的区块链,并耗尽余额或更改状态。
解决此问题的一种方法是在应用程序中实现余额的透支保护,并在交易余额达到一定程度时允许执行交易。第二种方法是为应用程序创建内部账户,以代表用户执行状态更改。
总而言之,构建具有数百万个用户和大量交易的企业区块链应用程序可能不适合常规软件体系结构。因此,架构师需要为新的挑战和未解决的问题做好准备,以解决这种大规模应用问题。
此处未涵盖的重要方面是管理用于在区块链上执行交易的密钥。