# 是时候在DAO中证明您的价值了——SSI使用MetaMask Snaps 2/3 **Published by:** [XiaomaLabs](https://paragraph.com/@xiaomalabs/) **Published on:** 2023-08-01 **URL:** https://paragraph.com/@xiaomalabs/dao-ssi-metamask-snaps-2-3 ## Content 作者:BlockchainLab Part1 发生了什么? 前一篇博客文章概述了几乎所有DAO中存在的富豪治理问题,以及我们如何借助SSI原则朝着精英治理迈出一步。我们解释了SSI是什么,我们可以用DIDs、VCs和VPs做什么,以及整个概念如何与我们的解决方案集成到DAO中。我们展示了MetaMask Snaps系统如何使我们能够扩展MetaMask的功能,以支持DIDs和VCs的管理。与Vitalik Buterin所描述的类似,我们的想法是声誉应该难以获得且不可转让。 虽然之前的文章展示了如何以VCs的形式获得声誉,但本文进一步介绍了如何在dApps中使用VCs和VPs。在本文的第一部分中,我们介绍了我们的“秘密房间Secret Room”概念——一个简单而又令人兴奋的使用VPs的案例。之后,我们演示了我们的Snapshot故事,并邀请您尝试我们的SSI Snap以增强DAO治理流程。 Part1 之后的变化是什么? 在上一次更新后,我们努力改进了SSI Snap。我们已经正式实现了1.1.4版本。最值得注意的是,我们停止使用额外的委派DID来签署VPs。相反,现在直接在MetaMask中使用EIP-712签名来签署VPs。这使得用户体验以及Snap的实现变得更加简单和直观。我们还对整个项目进行了重组,使其更类似于其他Snap项目(如Filsnap、Btcsnap等)。另一个重要的里程碑是SSI Snap Connector的推出,这是一个允许dApps使用SSI Snap Api轻松安装和使用SSI Snap的库。除了这些重大改变,我们还实现了无数的小改进和错误修复。 我们有很多令人兴奋的升级计划,迫不及待地想与您分享。其中包括新的数据存储方式(ceramic network、云等)、钱包之间的同步、用户对SSI Snap的配置(使用哪种DID方法,将VC存储在哪里等)等等。但这些内容会在第三部分中详细介绍。 Secret Room——访问隐藏资源 我们为演示目的创建了所谓的“Secret Room”,用户必须展示VP(代表第一部分收到的VC)才能进入Secret Room。在我们的示例中,所需的发行者和VC模式被硬编码在应用程序中。然而,使用同样的方法,人们可以创建无数个应用程序,只有具有特定凭证的人才能访问。当用户生成并展示合适的VP而不是输入用户名和密码时,隐藏页面将变得可用。 在连接MetaMask钱包并建立连接后,应用程序会请求一个特定的VP来进入房间。展示VP完全通过MetaMask的用户界面进行。用户选择一个VC,用于生成VP。在底层,Veramo库负责生成VP。另一个重要的事项是,“Secret Room”不存储用户数据,也没有中央数据库。图1展示了用户选择并批准VC以生成VP的情况。 图1:批准所选VC以生成VP 生成的VP现在必须进行签名。MetaMask再次提示我们进行签名。 图2:签名生成的VP VP签名并展示后,网站将其发送到后端进行VC及其数据的验证。包括VC的发行者、持有者、VC的过期日期以及VC的模式。如果满足要求,用户就被允许进入Secret Room。VP验证后,用户进入了Secret Room,如图3所示。 图3:成功进入Secret Room Snapshot——在DAO中证明您的价值 基于我们的信念,投票权应该是通过努力获得的,而不是购买的,我们将SSI Snap功能集成到了Snapshot——最著名的DAO治理平台中。在Snapshot中,拥有ENS域的用户可以创建自己的空间,项目的提案和治理就存在于这个空间中。任何符合要求(例如持有特定的ERC20代币、提供所需的VP等)的人都可以提出提案并进行投票。有关治理平台如何运作的更多信息,请查阅他们的网站和文档。 图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 通过从基于代币数量计算投票权转向基于SSI的方法,我们建立了一个不能被购买的精英主义系统。VCs是不可转让的,并与用户的DID绑定,本地存储在钱包中(或者用户可以决定存储在其他地方)。当然,这个示例是使用“虚拟”凭证,但在实际场景中,VC应该很难获得(例如,学位证书)。 为了创建一个工作演示,我们不得不分叉、托管和调整一些存储库以支持VCs和VPs: snapshot-ssi-demo:这是一个父存储库,连接了我们用于构建演示的所有分叉的snapshot存储库。 snapshot:扩展了投票界面以支持VC的选择。 snapshot-hub:添加了对VP验证的支持。 scores-api:添加了对VP验证的支持。 您可以在这里找到工作演示。 我们为当前Snapshot流程添加了额外的步骤。当检测到DID插件时,这些步骤会执行。插件被添加到空间中,并自动用于所有提案,但在我们的情况下,我们还添加了在某些提案中忽略插件的选项。现在,让我们来看看提议的工作流程。 图5:空间的插件菜单 首先,我们开始创建提案,并在提供DID插件UI时定义发行者和所需的VC模式,如下图所示。 图6:带有DID插件的提案创建 在定义了发行者和VC模式后,我们准备发布提案。如下图所示,点击“发布”时,我们需要签署一条消息来发布提案。有关DID插件的附加信息保存在提案的IPFS元数据中。目前,未来可能会添加更多的VC属性匹配,例如credentialSubject的特定值。 图7:发布提案 此IPFS链接显示了一个包含DID插件信息(发行者和VC模式)的提案元数据的示例。 发布了我们的提案后,拥有所需VC的用户现在可以投票。在投票时,用户必须从下拉菜单中选择所需的VC,如下图所示。然后,用户将被提示接受从所选VC生成VP。新签名的VP将被发送到Snapshot后端服务器进行验证。如果VP有效,用户可以投票,其投票权为1。 图8:从下拉菜单中选择VC 最后一步要求用户点击“投票”按钮并签署提议的消息。这可以在图9中看到。生成的VP将存储在IPFS上的投票元数据中。 图9:使用所选VC签署投票的示例 在访问提案页面时,只有使用有效的VP/VC进行的投票才会被记录,投票的人现在应该通过努力和价值获得他们的权力,而不是通过购买获得。 图10:提案的最终投票) 演示视频 下一步 这就是第二篇文章的全部内容。我们将在第三篇文章中结束这个博客系列,将所有组件开源,并邀请您加入我们的Discord服务器Blockchain Lab:UM进行讨论(甚至可能在GitHub上做贡献:)。第3部分还将包含SSI Snap的未来展望。 敬请关注! ## Publication Information - [XiaomaLabs](https://paragraph.com/@xiaomalabs/): Publication homepage - [All Posts](https://paragraph.com/@xiaomalabs/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@xiaomalabs): Subscribe to updates