Dapp后端架构,安全性和设计模式

去中心化运用程序(DApps)需求特别的体系规划,以完结高安全性和牢靠性。

在本文中,我将以以太坊为首要示例,介绍怎么为去中心化运用程序正确规划、完结后端和智能合约的几个首要原则,虽然其间大部分将适用于Eos、Tron和其他去中心化数据渠道。

文章要害:

  • 如安在不考虑安全性的状况下将私钥存储在后端

  • 怎么正确规划智能合约以及“去中心化”的内容

  • 涣散式和半涣散式运用程序架构示例

  • 怎么处理网络负载和故障等底层问题

让咱们开始吧!

1.去中心化程序和区块链

虽然现在区块链面临着许多选用和监管方面的困难,但不管选用哪种算法,不管区块链,哈企图,速度仍是其他任何分布式账本技能,它都是一种永存的技能。

区块链和其他相似技能带来的首要价值能够概括如下:它们使人们能够编写和运转程序,这些程序实际上在创立后就不能更改,在履行过程中也不能篡改。换句话说,这些程序一直按规划运转,而且任何一方都不能影响其行为。假如咱们将它们视为界说怎么来回搬运硬币的程序,则此界说对当今存在的许多加密货币均有用。这也解说了为什么加密货币和多种令牌具有真实的价值:它们不能经过界说的“底层程序”凭空产生。

与比特币相反,以太坊/ EOS / Tron /…渠道完结了一个更杂乱的程序层,该层又完结了履行环境,答应任何人在渠道之上编写自己的去中心化程序。用户界说的程序一直按规划运转,没有任何异常,而且渠道保证了其安全性。

2.涣散运用

这些在涣散式网络上运转的安全且不可更改的程序与传统的前端和后端技能相结合,今日被称为涣散式运用程序(ÐApps)。经过其间的一些能够半会集,真实去中心化的运用程序中的大部分活动应该发生在中心的操控之下。

Dapp后端架构,安全性和设计模式假如有人要求我制作DApps今日的作业办法,我或许会制作此图

想象一下咱们今日所说的去中心化运用程序,以_YouTube_或_Instagram_之类的任何现有会集式Web资源为例,并想象将您的“加密身份”绑定到Web /移动资源,而不是受暗码保护的会集式帐户。

这就是电子钱包软件为您供给的。此身份的私钥(秘密,您能够代表此身份进行操作)存储在本地设备上,而且永远不会在线,因而没有人能够操控此身份。有了这个身份,你能够在两个履行不同的操作会集 和(由中心管理组织操控网络资源)涣散(这是从传统的WWW不同的网络,方针,其间是消除中心机关)网络,将网站用作访问点和/或图形用户界面。这种“暗码身份”的全部意义在于,您的操作是经过暗码保护的,没有人能够更改您签名的内容或签名。

现在,容错涣散网络(如以太坊,EOS或Tron)的核算和存储才能遭到限制。假如它们是可扩展的,咱们能够运用涣散的网络来存储整个涣散的运用程序,包含其图形用户界面,数据和业务逻辑。在这种状况下,咱们将这些运用程序称为真实的涣散/分布式运用程序。

可是,由于这些网络目前无法扩展,因而咱们结合了不同的办法来为咱们的运用程序完结最大的涣散级别。咱们知道,“传统”后端没有任何开展。

例如:

  • 咱们运用后端来托管涣散运用程序的前端。

  • 咱们运用后端与任何其他现有技能和服务进行集成。真实的国际一流的运用程序不能生活在孤立的环境中。

  • 咱们运用后端存储和处理足以涣散网络(尤其是区块链)的任何事物。实际上,整个运用程序及其业务逻辑存储在国际的某个当地,仅不包含区块链部分。更不用说,IPFS和相似的存储层不能保证文件的可访问性,因而咱们也不能依托它们而不自己托管文件。换句话说,一直需求专用的运转服务器。

到目前为止,假如不运用牢靠的后端,就无法构建安全且部分涣散的运用程序,本文的要害是解说怎么正确地做到这一点。

3.(去中心化)和代币

碰巧的是,当今几乎一切涣散式运用程序都是环绕所谓的令牌构建的,令牌是驱动特定涣散式运用程序的定制(或仅仅简略克隆)的加密货币。令牌仅仅是一种可编程的货币或财物,仅此而已。

Dapp后端架构,安全性和设计模式令牌智能合约决议了用户怎么传输令牌,而运用程序智能合约能够扩展令牌智能合约中缺少的一切内容。两种智能合约都运转在去中心化网络之上一般,令牌是写在像以太坊这样的去中心化渠道之上的“智能合约”。经过拥有一些令牌,您根本上能够在Web资源或移动运用程序上获得不同的服务,并将该令牌换成其他东西。这儿的要害点是令牌自身是存在的,而且不受中心组织的操控。

有许多环绕令牌构建的运用程序示例:从比如CryptoKitties(ERC721令牌)之类的很多可保藏游戏到比如LOOM Network等面向服务的运用程序,乃至是比如Brave之类的浏览器以及比如DreamTeam(与ERC20兼容的令牌)之类的游戏渠道。开发人员自己承认并决议他们将(或不会)对其运用程序进行多少操控。他们能够在智能合约的基础上构建整个运用程序的业务逻辑(就像CryptoKitties所做的那样),或许,他们根本不运用智能合约,将服务器上的一切内容会集在一同。可是,最好的办法是居中。

4.涣散网络的后端

从技能视点来看,有必要有一个将令牌和其他智能合约与Web /移动运用程序连接的桥梁。

在当今的彻底去中心化的运用程序中,客户端直接与智能合约进行交互,此桥被缩小为公共API或Infura之类的节点池的JSON RPC API功用,由于并非每个设备都能够运转并支撑其单独的网络节点。可是,此API仅供给了一组根本且十分狭隘的功用,这些功用仅答应进行简略查询或有用地聚合数据。因而,终究会引入自界说后端,然后使运用程序成为半会集式。

与涣散网络的整个交互能够缩小到一两个点,具体取决于运用程序的需求:

  1. 侦听网络作业(例如令牌传输) /读取网络状况。

  2. 发布买卖(调用状况更改智能合约功用,如令牌搬运)。

这两个方面的完结都十分扎手,特别是假如咱们要构建一个安全牢靠的后端解决方案时。以下是咱们要分化的要害:

  • 首要,在以太坊中,作业检索不是开箱即用的。由于多种原因:网络节点在提取大量作业时或许会失败,作业或许会由于网络派生而消失或发生更改等。咱们有必要构建一个笼统层,以同步网络中的作业并保证其牢靠传递。

  • 与买卖发布相同,咱们有必要笼统以太坊的低端内容,例如随机数计数器和天然气估算值,以及买卖从头发布,以供给牢靠且安稳的界面。此外,业务发布意味着运用私钥,这需求高级后端安全性。

  • 安全。咱们将认真对待它,并面对无法保证私钥在后端永远不会遭到损害的问题。幸运的是,有一种规划去中心化运用程序的办法,乃至不需求高度保护后端帐户。

在咱们的实践中,一切这些使咱们为以太坊创立了一个强大的后端解决方案,咱们将其命名为Ethereum Gateway。它从以太坊的趣味中笼统出了其他微服务,并供给了一个牢靠的API来运用它。

Dapp后端架构,安全性和设计模式以太坊的后端监控。监控器演示的活动首要与咱们的循环计费功用有关(虽然您能够看到每小时都有峰值)。

5.涣散式运用架构

这部分高度依赖于特定的去中心化运用程序的需求,咱们将测验在构建这些运用程序的基础上整理一些根本的交互形式(Ð渠道=去中心化渠道=以太坊/ EOS / Tron / Whatever):

客户⬌渠道:彻底涣散的运用程序。

客户端(浏览器或移动运用程序)在以太坊“钱包”软件(如Metamask,Trust)或硬件钱包(如Trezor或Ledger)的帮助下,直接与涣散渠道进行对话。以这种办法构建DApp的示例包含CryptoKitties,Loom的 Delegated Call,加密钱包自身(Metamask,Trust,Tron Wallet等),涣散式加密买卖所(如Etherdelta)等。

D渠道⬌客户⬌后端⬌D渠道:会集式或半会集式运用程序。

客户端与涣散渠道和服务器的交互几乎没有共同点。一个很好的比如是当今的任何(会集式)加密货币买卖所,例如BitFinex或Poloniex:您在买卖所买卖的货币只记载在传统数据库中。您能够经过将财物发送到特定地址(“渠道⬌客户端”)来“充值”数据库余额,然后在运用程序中履行某些操作后(后台⬌Ð渠道)撤回财物,可是,您所做的一切都取决于“运用程序”自身(客户端⬌后端)并不意味着您与Ð渠道直接交互。

另一个示例是Etherscan.io,它运用半会集式办法:您能够在其间履行一切有用的去中心化操作,可是没有它们的归纳后端,运用程序自身就没有任何意义(Etherscan持续同步业务,解析数据并存储它,终究供给全面的API / UI)。

介于两者之间的内容:停止, 会集式或半会集式运用程序。

结合以上办法。例如,咱们能够有一个运用程序,该运用程序供给各种服务以换取加密,然后使您能够运用加密身份登录并签名信息。

期望彻底涣散的运用程序(客户端Client渠道)的交互形式不会引起任何问题。依托Infura或Trongrid等令人赞叹的服务,您能够简略地构建根本不需求服务器的运用程序。像几乎一切的客户端库Ethers.js为复仇或特隆的Web为特隆能够连接到这些公共服务和与网络进行通讯。可是,对于更杂乱的查询和使命,您或许仍然需求分配自己的服务器。

其余触及后端的交互形式使作业变得愈加风趣和杂乱。为了将一切这些图景化,让咱们想象一下后端对网络中的某些作业做出反响的状况。例如,用户发布了一项配额买卖,该买卖答应咱们向他们收取费用。要收取费用,咱们有必要针对宣布的配额作业发布费用买卖:

Dapp后端架构,安全性和设计模式涣散网络中服务器对用户操作的反响的示例流程从后端的视点来看,会发生以下状况:

  • 咱们经过不断轮询网络来监听特定的网络作业。

  • 收到作业后,咱们将履行一些业务逻辑,然后决议发布一个业务作为响应。

  • 在发布买卖之前,咱们要保证将有或许被挖掘(在以太坊中,成功的买卖气体估量意味着没有相对于当时网络状况的过错)。可是,咱们不能保证买卖将被成功挖掘。

  • 运用私钥,咱们签署并发布买卖。在以太坊中,咱们还有必要承认买卖的天然气价格和天然气限额。

  • 发布买卖后,咱们会连续轮询网络以了解其状况。

  • 假如花费的时间太长而咱们无法获得买卖的状况,则有必要从头发布它或触发“失败状况”。买卖或许由于各种原因而丢掉:网络拥塞,对等体掉落,网络负载增加等。在以太坊中,您还能够考虑以不同的(实际)汽油价格从头签署买卖。

  • 在咱们终究承认买卖事项之后,假如需求,咱们能够履行更多的业务逻辑。例如,咱们能够通知其他后端服务有关买卖已完结的现实。另外,考虑在做出有关买卖的终究决议之前等待几回承认:网络是分布式的,因而成果或许会在几秒钟内发生变化。

如您所见,发生了很多作业!可是,您的运用程序或许不需求其间的某些过程,具体取决于您要完结的方针。可是,构建强大而安稳的后端需求解决上述一切问题。让咱们分化一下。

6.涣散的运用程序后端

在这儿,我想着重一些出现大多数问题的要害,即:

  • 侦听网络作业并从网络读取数据

  • 发布买卖以及怎么安全地进行买卖

7.收听网络作业

在以太坊以及其他去中心化网络中,智能合约作业(或作业日志,或仅是日志)的概念使链外运用程序能够了解区块链中正在发生的作业。这些作业可由智能合约开发人员在智能合约代码的任何位置创立。

例如,在众所周知的ERC20令牌标准中,每个令牌搬运都有必要记载Transfer作业,然后使链下运用程序知道发生了令牌搬运。经过“监听”这些作业,咱们能够履行任何(从头)操作。例如,当令牌搬运到您的地址时,某些移动加密钱包会向您发送推送/电子邮件通知。

实际上,没有牢靠的解决方案能够开箱即用地监听网络作业。不同的库答应您跟踪/侦听作业,可是,在许多状况下,某些作业或许出错,然后导致作业丢掉或未处理。为了避免丢掉作业,咱们有必要构建一个自界说后端,该后端将保护作业同步过程。

依据您的需求,完结办法或许会有所不同。可是在这儿给你一个图片是怎么依据微服务架构构建牢靠的以太坊作业交付的选项之一:

Dapp后端架构,安全性和设计模式将以太坊作业牢靠地传递给一切后端服务这些组件以以下办法作业:

  • 作业同步后端服务不断轮询网络,以测验检索新作业。一旦有一些新作业可用,它将把这些作业发送到音讯总线。将作业成功提交到音讯总线后,就区块链而言,咱们能够保存上一个作业的块,以便下次从该块中恳求新作业。请记住,一次检索太多作业或许会导致恳求一直失败,因而您有必要限制从网络恳求的作业/块的数量。

  • 音讯总线(例如Rabbit MQ)将作业路由到为每个后端服务别离设置的每个行列。在作业发布之前,作业同步后端服务指定路由密钥(例如,智能合约地址+作业主题),而运用者(其他后端服务)创立仅订阅特定作业的行列。

成果,每个后端服务仅获取所需的那些作业。此外,音讯总线可保证将一切作业发布到作业总线后再进行传递。

当然,您能够运用其他办法代替音讯总线:HTTP回调,套接字等。在这种状况下,您需求弄清楚怎么保证自己供给回调:管理指数/自界说回调重试,完结自界说监督。

8.发布买卖

为了将业务发布到涣散网络,咱们有必要履行几个过程:

  • 预备买卖。与买卖数据一同,此过程意味着恳求网络状况,以查明此买卖是否有用而且是否将要挖掘(以太坊中的gas估量)和买卖的序号(以太坊中的nonce)。一些库企图在后台进行此操作,可是,这些过程很重要。

  • 签署买卖。此过程暗示私钥的运用。最有或许的是,您将在此处嵌入自界说私钥拼装解决方案。

  • 发布和从头发布业务。这儿的要害点之一是,您已发布的买卖一直有机会从涣散的网络中丢掉或丢掉。例如,在以太坊中,假如网络的天然气价格突然上涨,则已发布的买卖或许会被丢弃。在这种状况下,您有必要从头发布业务。此外,您或许期望从头发布具有其他参数的买卖(至少在汽油价格较高的状况下),以便尽快进行买卖。因而,假如替换买卖之前未进行预签名(运用不同的参数),则从头发布该买卖或许意味着对其从头签名。

Dapp后端架构,安全性和设计模式以上有关以太坊买卖发布的要害可视化经过运用上述办法,您能够终究构建相似于以下序列图中所示内容的内容。

在这个特定的序列图上,我将演示(大体上!)区块链循环计费的作业原理:

  • 用户履行智能合约中的功用,该功用终究答应后端履行成功的费用买卖。

  • 负责特定使命的后端服务侦听收费限额作业并发布收费买卖。

  • 一旦挖掘到收费买卖,负责特定使命的后端服务就会从以太坊网络接纳作业,并履行一些逻辑(包含设置下一个收费日期)。

Dapp后端架构,安全性和设计模式区块链循环计费作业原理的一般序列图,展现了后端服务与以太坊网络之间的交互后端安全和智能合约。

业务发布一直触及运用私钥。您或许想知道是否能够保护私钥安全。有许多的、杂乱的策略和不同类型的软件这样能够十分安全地将私钥存储在后端。一些私钥存储解决方案运用地理分布的数据库,而另一些乃至主张运用特别的硬件。可是,在任何状况下,半会集式运用程序最容易遭到攻击的当地是私钥被拼装并用于签署买卖的当地(或许在运用特别硬件的状况下,触发买卖签署过程的地点)。因而,从理论上讲,没有100%牢靠的解决方案能够使防弹保护免受损害存储的私钥。

视野开拓

胀中的稳定因素 战争之初,后方便被迫面对一系列棘手的潜在隐患。但直到1939年下半年之前,总体物价水平增幅均远远落后于政府赤字和信贷、货币供应的扩张。 经济对通胀压力的反应相对迟缓是由多种情况决定的。其中最重要的,可能是后方经济基础以农村为主,而农村物价在面临通胀刺激时不如城市敏感。 不过,中国通胀走势缓慢有着更重要的原因。战时通胀期间,物价上涨速度基本由三个因素决定:战时状态下消费品供给被波及的程度;消费者收入对生活成本上升及创造新的薪给方式的反应;公众的消费倾向,即总收入用于消费的比例。-《通胀螺旋》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注