Snapshot - 技术架构

  • Snapshot
  • 发布于 2023-04-01 18:13
  • 阅读 58

本文介绍了 Snapshot 投票平台的架构。Snapshot 是一个开源的投票平台,允许组织轻松且无需 gas 费地进行投票。文章详细描述了 Snapshot 的技术架构,包括用户界面、后端逻辑(Sequencer、投票和验证策略、Score API),以及数据层(IPFS和MySQL数据库),并解释了投票过程中各组件的交互。

Snapshot - 技术架构

什么是 Snapshot?

Snapshot 是一个开源投票平台,使组织能够轻松且无需 gas 费地进行投票。其技术实现保证了透明度,这对去中心化治理至关重要。在本文的后续部分,我们将了解 Snapshot 实现的每一层,并研究其对 IPFS 的使用,这使得可以轻松验证链下存储的数据。

你需要成为加密货币原生用户才能使用该平台吗?

完全不需要,即使对于 web3 世界的新手来说,该平台也很简单易用。

为什么它很酷?

它易于使用,并且可以根据各种项目的需求进行定制。

如果没有 Snapshot,每个组织都必须提出专门为其用例构建的自己的投票解决方案。Snapshot 允许组织使用可定制的解决方案,并且组织只需付出很少的努力即可进行设置。如果你想浏览最活跃的空间、Snapshot 最大的集成商或提案和投票详细信息,请查看 Dune 上的 Snapshot 仪表板

它是免费使用的。

由于其技术设置,可以在链下执行 Snapshot 上的投票,而无需任何 gas 费。这有助于组织增加其社区的治理参与度,并通过诸如 POAP 之类的插件来奖励投票的用户。

它是完全开源的。

代码库完全向公众开放,并提供了一个无需信任的环境,这对于治理过程至关重要。任何人都可以查看和审计 Snapshot 投票系统背后的逻辑。此外,数据以去中心化的方式存储在链下,并且可以随时被任何人查看、审计或复制。

它是如何工作的?

首先,在 Snapshot 上的任何操作都需要用户使用他们的钱包连接到平台。目前,Snapshot 支持多种钱包,包括 MetaMask、WalletConnect 和 Coinbase Wallet。

由于平台结构的三个主要元素 - 空间、提案和投票,才能进行投票。

组织和项目可以创建空间,你可以将其视为他们在平台上的个人资料。为此,他们需要一个 ENS 名称,该名称用作空间标识符,并允许用户访问其在 Snapshot 上的页面,例如 https://snapshot.org/#/balancer.eth

空间控制器和管理员(如果已定义)有权定义自定义投票设置,其中包括:

  • 为空间分配不同的空间角色(管理员、版主、作者),

  • 选择投票和验证策略,

  • 提案通过所需的法定人数,

  • 扩展 Snapshot 核心功能的插件,

  • 以及更多。

创建空间后,符合资格的用户(根据空间设置)可以使用其中一种可用的 投票系统 创建提案,即单项选择投票、加权投票或赞成投票。你可以在 Snapshot 的文档中了解有关不同解决方案的更多信息。

然后,满足标准(由为空间选择的验证策略定义)的社区成员可以进行投票。个人投票权是根据定义特定规则的投票策略计算的,例如检查特定 ERC20 代币的余额或 NFT 代币的所有权。

为什么叫“Snapshot”?

投票权是在提案创建的 快照 (snapshot) 时计算的。这意味着如果你在提案创建后获得代币,则在计算你的投票权时不会考虑这些代币。这就是 Snapshot 名称的由来,因为这是平台上投票过程的基本特征。

提案的结果是根据选择的投票系统计算的。不要将其与投票策略混淆!虽然投票策略用于计算选民的个人投票权,但投票系统用于计算提案的结果。让我们看一个加权投票系统的例子。

加权投票系统的示例。

加权投票系统的示例。

每个用户可以将其投票权分配给任意数量的选择,从一个到全部。他们的投票权将在他们选择的选项之间分配,具体取决于他们通过增加或减少投票权分数来分配给每个选项的权重。

接下来会发生什么?如果提案获得通过,则由 DAO 本身来执行它,因为 Snapshot 不参与组织采取的行动。

一些 Snapshot 空间正在使用 SafeSnap,这是一种 Safe 插件,可以通过多重签名帐户实现无需信任的链上执行。由于这个主题值得单独写一篇文章,我建议你 在此处 阅读有关它的信息。

如果你对 Snapshot 从技术角度来看是什么样子感到好奇,请继续阅读!

它是如何构建的?

Snapshot 是一种协议,它结合了多种服务,以便为其用户提供无缝体验。所有存储库都是开源的,并且可以被任何人查看和审计,网址为 https://github.com/snapshot-labs

下面的线框图给出了平台架构的顶级概述:

来源:https://whimsical.com/snapshot-LxdFA5Pnt6vjxzBEnk2ibJ

来源:https://whimsical.com/snapshot-LxdFA5Pnt6vjxzBEnk2ibJ

Snapshot 的基础设施设计有三个主要层:

  • 用户界面:可从 https://snapshot.org 访问的前端应用程序

  • 逻辑:后端服务器协调多个服务的工作

  • 数据:各种 持久化链下信息的存储解决方案

Snapshot UI

Snapshot 的界面 是一个使用 Typescript 构建的 Vue.js 应用程序。由于实现了 Snapshot.js 客户端,这是一个可供任何人使用的 JavaScript 库,因此所有操作(即创建新空间、提案或投票)都是可能的。每当用户想要执行特定操作时,例如 投票,它会在用户的钱包中触发消息签名请求。

然后,该消息将发送到后端服务 - Snapshot Sequencer。

逻辑层

Sequencer

后端基础设施的核心要素是一个 Express.js 服务器 - Snapshot Sequencer。它负责接收、验证和采集来自 Snapshot UI 或其他在其基础设施中集成了 Snapshot 的应用程序的信息。它还 与Score API 通信,Score API 用于计算用户的投票权,最后,Sequencer 协调将数据持久化到链下的过程,并将响应发送回 UI。该响应包括一个回执,该回执证明用户的操作已获得批准并在协议中注册。

但这意味著什么呢?

回执是由 Sequencer 颁发的 以太坊签名,Sequencer 持有 私钥。如果你熟悉非对称加密的工作原理,或者换句话说,如何凭借你的私钥成为唯一可以从你的钱包触发交易的人,你可以将此逻辑应用于回执。如果你仍然不确定什么是私钥,让我们看一下 Investopedia 对它的定义:

私钥是一种用于加密的字母数字代码,类似于密码。在加密货币中,私钥用于授权交易并证明区块链资产的所有权

来源:https://www.investopedia.com/terms/p/private-key.asp

现在,由于 Sequencer 正在使用其私钥来颁发以太坊签名,这意味着它可以很容易地被证明,并且可以揭露任何潜在的审查企图。这允许一个无需信任的过程及其一路上的透明度。

最后但并非最不重要的一点是,为什么叫“Sequencer”?该服务的名称来自其最重要的功能之一。经其批准的每个操作都存储有一个自动递增的 ID,这意味着任何人都可以按正确的顺序重播在 Snapshot 上执行的操作的整个历史记录。

投票和验证策略

正如我之前提到的,个人投票权取决于特定空间使用的投票策略的选择。从技术上讲,策略是一个 JavaScript 函数,它返回一组地址的分数。你可以在 此处 找到它们。在撰写本文时,Snapshot 上有 427 种投票策略可用。一些最常用的有:

如果没有一个能满足你的组织的需求,则可以按照 此过程 创建新的自定义策略。

空间还可以选择验证策略 - 一个 JavaScript 函数,它将评估用户是否有资格执行特定操作:创建提案或进行投票。验证策略是一个 JavaScript 函数,它为连接的帐户返回一个布尔值(truefalse)。它检查什么?可能性是无限的。它可以使用现有投票策略的组合,检查一个帐户拥有多少个 POAP,或者衡量该帐户的链上活动,以评估该帐户是机器人还是真人。可以在 此处 找到所有现有的投票验证,并且社区可以通过 此过程 来丰富该集合。

Score API

Score API 的主要目的是计算特定区块高度下各个地址的投票权。它通过使用直接从 EVM 存档节点或子图检索的链上数据,以及一个或多个策略的选择来实现此目的。此外,Score API 还负责使用验证策略来验证地址。

Score API 依赖于各种存档节点,以确保数据检索的可靠性和准确性。可以在 此处 找到支持节点的完整列表。它与所有基于 EVM 的区块链网络兼容,这使其可以与流行的链(如以太坊和 Arbitrum)一起使用。

要将 Score API 集成到第三方应用程序中,开发人员应使用 Snapshot.js NPM 包。此包简化了集成过程,并提供了一个一致的界面来与 API 交互。

数据层

Snapshot 中最重要的设计选择之一是数据存储解决方案。将信息存储在链上非常昂贵,并且可能会成为用户参与投票过程的一个很大的瓶颈——我们都尽量避免成本,对吧?

另一种解决方案可以保证透明性和 gasless 投票,允许任何人查看、审计和复制数据,并在没有任何成本的情况下参与 DAO 治理,这就是 IPFS 上的 内容寻址。事实上,每个经签名和验证的消息确认的空间、提案、投票和用户操作都可以在 IPFS 上找到,它具有内容标识符(CID)和证明该操作已在协议上验证和存储的回执。

Snapshot 开发了一个名为 Pineapple 的微服务和一个相应的 JavaScript 库 pineapple.js,以简化到 IPFS 的数据持久性。两者的结合确保数据能够成功且尽可能快地被 Pin 住。

pineapple.js 公开了一个 Pin 方法,该方法接受一个 JSON 对象(表示用户操作、空间对象、消息签名等),并通过 HTTP 将其发送到 Pineapple 微服务。从那里,Pineapple 同时将 JSON 上传到多个 IPFS Pin 服务,例如 4everland、infura 和 pinata,并在其中一个服务回复成功后立即返回响应。你可以在 此处 查看最成功的(最快的)提供商。此外,数据还会上传到 AWS S3。

除了 IPFS 之外,Snapshot 还以有组织的方式将信息存储在MySQL 数据库中,该数据库在公共 API Snapshot Hub 上公开。任何人都可以通过 GraphQL 接口 轻松查询 数据库。

那么幕后实际发生了什么?

为了回顾并更好地理解基础设施,让我们跟随投票的过程:

  1. 用户在 Snapshot 的界面 https://snapshot.org 上连接他们的钱包。

  2. 连接后,用户前往提案页面,选择他们的选择并单击投票。带有投票摘要的模式会打开,其中包含所选的选项、提案的快照(区块编号)以及由 Score API 计算的用户投票权。如果用户确认投票,则钱包将打开并请求签署一条 gasless 消息。

  3. 签名的消息的 Payload 会发送到 Snapshot Sequencer,以通过 Snapshot.js 库进行验证。

  4. 验证步骤的关键部分是投票权检查。Sequencer 向 Score API 发送请求,并等待回复,其中包含投票权和投票验证。

  5. 成功验证后,Sequencer 将触发 Pineapple 以将消息详细信息 Pin 到 IPFS 上,并将详细信息插入到 MySQL 数据库中。

  6. 收到来自数据持久化服务的成功响应后,Sequencer 会将带有投票回执 - 投票的确认及其 IPFS CID - 的响应发送回 Snapshot UI。

  7. 用户可以看到投票已通过,现在可以在选定的社交媒体平台上分享他们已对提案进行投票。

结论

正如你(希望)所看到的,Snapshot 的基础设施非常简单,这使得选民可以轻松地参与其组织的治理,而无需任何成本,也无需任何技术理解。

此外,该公司的开源理念保证了流程每一步的透明度,并使贡献者能够通过创建新的投票和验证策略,甚至通过实施 新插件 来扩展空间可能的自定义项,扩展 Snapshot 的核心功能。

最后,由于 Sequencer,Snapshot 的架构允许投票过程具有抗审查性。由于以太坊签名是使用 Sequencer 的私钥颁发的,因此即使该服务不是完全去中心化的,也可以很容易地发现任何恶意篡改数据的企图。当涉及到完全去中心化时 - 请关注下一篇关于基础设施更新的文章。

去中心化 Sequencer 是 Snapshot 完全去中心化其投票平台的下一步,这将进一步增强其抗审查性。通过这样做,Snapshot 将消除单点故障,并允许更加去中心化的决策。这也将提高平台的安全性以及抵御攻击或审查企图的弹性。

如果你对 Snapshot 的技术架构有任何疑问,请务必在 Discord 服务器上留言或在 Twitter 上与 Snapshot 联系!

  • 原文链接: snapshot.mirror.xyz/-C3b...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Snapshot
Snapshot
Snapshot is a voting platform that allows DAOs, DeFi protocols, or NFT communities to vote easily and without gas fees.