# 是时候在DAO中证明您的价值了——SSI使用MetaMask Snaps 2/3

By [XiaomaLabs](https://paragraph.com/@xiaomalabs) · 2023-08-01

---

_作者:BlockchainLab_

**Part1 发生了什么？**
================

前一篇博客文章概述了几乎所有DAO中存在的富豪治理问题，以及我们如何借助SSI原则朝着精英治理迈出一步。我们解释了SSI是什么，我们可以用DIDs、VCs和VPs做什么，以及整个概念如何与我们的解决方案集成到DAO中。我们展示了MetaMask Snaps系统如何使我们能够扩展MetaMask的功能，以支持DIDs和VCs的管理。与Vitalik Buterin所描述的类似，我们的想法是声誉应该难以获得且不可转让。

虽然之前的文章展示了如何以VCs的形式获得声誉，但本文进一步介绍了如何在dApps中使用VCs和VPs。在本文的第一部分中，我们介绍了我们的“**秘密房间Secret Room**”概念——一个简单而又令人兴奋的使用VPs的案例。之后，我们演示了我们的[Snapshot](https://snapshot.org/)故事，并邀请您尝试我们的SSI Snap以增强DAO治理流程。

**Part1 之后的变化是什么？**
===================

在上一次更新后，我们努力改进了SSI Snap。我们已经正式实现了1.1.4版本。最值得注意的是，我们停止使用额外的委派DID来签署VPs。相反，现在直接在MetaMask中使用EIP-712签名来签署VPs。这使得用户体验以及Snap的实现变得更加简单和直观。我们还对整个项目进行了重组，使其更类似于其他Snap项目（如Filsnap、Btcsnap等）。另一个重要的里程碑是[SSI Snap Connector](https://github.com/blockchain-lab-um/ssi-snap-connector)的推出，这是一个允许dApps使用SSI Snap Api轻松安装和使用SSI Snap的库。除了这些重大改变，我们还实现了无数的小改进和错误修复。

我们有很多令人兴奋的升级计划，迫不及待地想与您分享。其中包括新的数据存储方式（ceramic network、云等）、钱包之间的同步、用户对SSI Snap的配置（使用哪种DID方法，将VC存储在哪里等）等等。但这些内容会在第三部分中详细介绍。

Secret Room——访问隐藏资源
===================

我们为演示目的创建了所谓的“[**Secret Room**](https://blockchain-lab-um.github.io/course-dapp/)”，用户必须展示VP（代表第一部分收到的VC）才能进入**Secret Room**。在我们的示例中，所需的发行者和VC模式被硬编码在应用程序中。然而，使用同样的方法，人们可以创建无数个应用程序，只有具有特定凭证的人才能访问。当用户生成并展示合适的VP而不是输入用户名和密码时，隐藏页面将变得可用。

在连接MetaMask钱包并建立连接后，应用程序会请求一个特定的VP来进入房间。展示VP完全通过MetaMask的用户界面进行。用户选择一个VC，用于生成VP。在底层，[Veramo库](https://github.com/uport-project/veramo)负责生成VP。另一个重要的事项是，“**Secret Room**”不存储用户数据，也没有中央数据库。图1展示了用户选择并批准VC以生成VP的情况。

![图1：批准所选VC以生成VP](https://storage.googleapis.com/papyrus_images/e5e484a9a51f8f5af5fe81d64eb6762904dc5682adc8f6c753ff6aca2e446aab.png)

图1：批准所选VC以生成VP

生成的VP现在必须进行签名。MetaMask再次提示我们进行签名。

![图2：签名生成的VP](https://storage.googleapis.com/papyrus_images/af12541f6c6c5c02a8892c1983fefdadfad3915362869c8127fc9f8a27dc6bb3.png)

图2：签名生成的VP

VP签名并展示后，网站将其发送到后端进行VC及其数据的验证。包括VC的发行者、持有者、VC的过期日期以及VC的模式。如果满足要求，用户就被允许进入**Secret Room**。VP验证后，用户进入了**Secret Room**，如图3所示。

![图3：成功进入Secret Room](https://storage.googleapis.com/papyrus_images/62fc12ff820f5f8e5bc4cf59298cc3b611f835bad99bea627aefe9aa3c7e851b.png)

图3：成功进入Secret Room

Snapshot——在DAO中证明您的价值
=====================

基于我们的信念，投票权应该是通过努力获得的，而不是购买的，我们将SSI Snap功能集成到了Snapshot——最著名的DAO治理平台中。在Snapshot中，拥有[ENS域](https://ens.domains/)的用户可以创建自己的空间，项目的提案和治理就存在于这个空间中。任何符合要求（例如持有特定的ERC20代币、提供所需的VP等）的人都可以提出提案并进行投票。有关治理平台如何运作的更多信息，请查阅他们的[网站](https://snapshot.org/#/)和[文档](https://docs.snapshot.org/)。

![图4：Snapshot中的空间示例](https://storage.googleapis.com/papyrus_images/6625f4b78f7fe77fe56e778413bc0123d274c14387759fdd5039b0931eb8ea46.png)

图4：Snapshot中的空间示例

我们为Snapshot实现了一个DID插件，使其能够创建使用VPs作为投票机制的提案。只有满足提案所有者定义的要求的凭证的人才能投票。这些要求包括VC的发行者和模式。创建者设置哪个发行者和模式是有效的。例如，BCLab:UM想要创建一个关于SSI Snap未来的提案，只有持有特定凭证的人才能投票。BCLab:UM通过将发行者设置为`“did:ethr:0x123…”`，将模式设置为:

[https://beta.api.schemas.serto.id/v1/public/consen-sys-hackathon-2021-participant/1.0/json-schema.json%E2%80%9D%E6%9D%A5%E5%AE%9A%E4%B9%89%E7%89%B9%E5%AE%9A%E7%9A%84%E5%87%AD%E8%AF%81%E8%A6%81%E6%B1%82%E3%80%82](https://beta.api.schemas.serto.id/v1/public/consen-sys-hackathon-2021-participant/1.0/json-schema.json%E2%80%9D%E6%9D%A5%E5%AE%9A%E4%B9%89%E7%89%B9%E5%AE%9A%E7%9A%84%E5%87%AD%E8%AF%81%E8%A6%81%E6%B1%82%E3%80%82)

通过从基于代币数量计算投票权转向基于SSI的方法，我们建立了一个不能被购买的精英主义系统。VCs是不可转让的，并与用户的DID绑定，本地存储在钱包中（或者用户可以决定存储在其他地方）。当然，这个示例是使用“虚拟”凭证，但在实际场景中，VC应该很难获得（例如，学位证书）。

为了创建一个工作演示，我们不得不分叉、托管和调整一些存储库以支持VCs和VPs：

1.  [snapshot-ssi-demo](https://github.com/blockchain-lab-um/snapshot-ssi-demo)：这是一个父存储库，连接了我们用于构建演示的所有分叉的snapshot存储库。
    
2.  [snapshot](https://github.com/snapshot-labs/snapshot)：扩展了投票界面以支持VC的选择。
    
3.  [snapshot-hub](https://github.com/snapshot-labs/snapshot-hub)：添加了对VP验证的支持。
    
4.  [scores-api](https://github.com/snapshot-labs/score-api)：添加了对VP验证的支持。
    

您可以在[这里](https://bclabum.informatika.uni-mb.si/snapshot/#/)找到工作演示。

我们为当前Snapshot流程添加了额外的步骤。当检测到DID插件时，这些步骤会执行。插件被添加到空间中，并自动用于所有提案，但在我们的情况下，我们还添加了在某些提案中忽略插件的选项。现在，让我们来看看提议的工作流程。

![图5：空间的插件菜单](https://storage.googleapis.com/papyrus_images/8b0899e598279800d9e52de57dee28837d228fc93c3bcd842bea92d68597d21e.png)

图5：空间的插件菜单

首先，我们开始创建提案，并在提供DID插件UI时定义发行者和所需的VC模式，如下图所示。

![图6：带有DID插件的提案创建](https://storage.googleapis.com/papyrus_images/58881a4e41b758d809cbf098f98a04049b589dba7a9790d7fbb0ff08f294082b.png)

图6：带有DID插件的提案创建

在定义了发行者和VC模式后，我们准备发布提案。如下图所示，点击“发布”时，我们需要签署一条消息来发布提案。有关DID插件的附加信息保存在提案的IPFS元数据中。目前，未来可能会添加更多的VC属性匹配，例如credentialSubject的特定值。

![图7：发布提案](https://storage.googleapis.com/papyrus_images/fa88e7244b3f8f5249ee437cac532e9cfa15d00e7885a35215693f272890800b.png)

图7：发布提案

此[IPFS链接](https://gateway.ipfs.io/ipfs/bafkreib3c6fcchpfocz5ulblmncxomitvwlsgprhoaeqoqgs3ife2yl4rq)显示了一个包含DID插件信息（发行者和VC模式）的提案元数据的示例。

发布了我们的提案后，拥有所需VC的用户现在可以投票。在投票时，用户必须从下拉菜单中选择所需的VC，如下图所示。然后，用户将被提示接受从所选VC生成VP。新签名的VP将被发送到Snapshot后端服务器进行验证。如果VP有效，用户可以投票，其投票权为1。

![图8：从下拉菜单中选择VC](https://storage.googleapis.com/papyrus_images/3989b84f8e77c15519f8ccd0ec07d53005c4bb9a17cd361a96a859a558f275d4.png)

图8：从下拉菜单中选择VC

最后一步要求用户点击“投票”按钮并签署提议的消息。这可以在图9中看到。生成的VP将存储在IPFS上的投票元数据中。

![图9：使用所选VC签署投票的示例](https://storage.googleapis.com/papyrus_images/9e544ad2a894f06436520cdfd7879ddc123b0e4799c3d64dbfbad4e10512a506.png)

图9：使用所选VC签署投票的示例

在访问提案页面时，只有使用有效的VP/VC进行的投票才会被记录，投票的人现在应该通过努力和价值获得他们的权力，而不是通过购买获得。

![图10：提案的最终投票）](https://storage.googleapis.com/papyrus_images/9fbdf19b627d55a69f3311e420909bacc416e44696b2606b5059ac48535b040b.png)

图10：提案的最终投票）

演示视频
====

[![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=LX40LsSipM8)

[![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=Pz1M2a-LsXw)

下一步
===

这就是第二篇文章的全部内容。我们将在第三篇文章中结束这个博客系列，将所有组件开源，并邀请您加入我们的Discord服务器Blockchain Lab:UM进行讨论（甚至可能在GitHub上做贡献：）。第3部分还将包含SSI Snap的未来展望。

敬请关注！

---

*Originally published on [XiaomaLabs](https://paragraph.com/@xiaomalabs/dao-ssi-metamask-snaps-2-3)*
