kittenyang

Posted on Feb 09, 2023Read on Mirror.xyz

SafeSnap 发布,一款开源的 DAO 治理工具 App

前言

在过去 Web3 大浪淘沙的几年,涌现了一大批所谓的 Web3 链上应用,内容涉及各个赛道。虽然大多数最后都是昙花一现的炮灰,但其中不乏非常有创意、有前景 App。我个人非常看好 DAO 这一赛道。不仅在于它极大地发挥了区块链的特点,更重要的是这将重构人类社会协作的范式。如果说区块链是技术革命,那么 DAO 更像是一次社会革命,虽然现在只是故事的开始,真正实现这个目标恐怕还要很久。

在 2022 上半年上海 Covid-19 疫情封锁期间,我也深刻体验到了 DAO 模式在现实世界的力量。当时小区全部封锁,线上的物资几乎抢购一空,群众只能依靠有渠道的小区楼长统一采购物资。大家自发在小区群里分工合作,采购的采购、搬运的搬运、线上答疑的答疑..... 当时给我的第一感觉是,这俨然就像一个热门的 Web3 项目。Web3 项目的玩法就是在早期你为社区贡献越多,后续就能获得越多项目的空投,包括但不限于 Token 或者 NFT,从而后续项目火了,你可以在市场上套现。本质上和创业获得原始股是一个道理。有人说这是投机和浪费时间的工作,但现实世界中的工作何尝不是这样呢?搞好上级关系、拼命工作赚钱、努力充电学习,不都是为了各种利益,只要别去坑蒙拐骗。所以说底层逻辑是没问题的:越早对社区有贡献的人,理应获得更丰厚的回报,只是区块链把这一过程变得门槛更低、程序化、并且链上可证了。对于项目来说也有好处,早期拥有一批全心全意的粉丝共建,也为后续发展提供了更多可能。

回到小区 DAO 的例子,群里答疑的人就像 Discord 里的 MOD、采购就像项目的运营在和外界洽谈商务合作、搬运的人就像是开发者埋头写着代码。可以想象如果真的按现有 Web3 项目的路子走下去,发行小区治理代币,任何对小区有利的举动都能获得相应激励,比如上面的采购、搬运、答疑等早期角色都能获得大量空投,那么反过来也会促进更多人加入进来参与小区的共建。到时候小区变得更和谐、居民幸福指数,房价自然水涨船高,然后又会吸引更多优质教育、医疗资源聚集,最终又会不断推动房价。如果外部居民虽不能直接体验小区的居住环境,但通过购买你们的小区货币也能分一杯羹。看吧,Web3 项目的这套玩法放在现实世界似乎也行得通。而那段时间,长宁辖区的居民能分配更好的物资,人民都是用脚投票的,舆情情绪里明显表现出未来在长宁区置业的意向明显高于其他区。现实世界也确实证实了这一点。因此如果 DAO 的基础设施和政策一切准备就绪的时候,是对全社会组织形式的一次大洗牌。

上面对于 DAO 的案例太过于宏大了,其实我们家庭就是一个小型的 DAO,比如你和你的爱人小孩三个人是家庭DAO 的成员,发行一个初始供应量为10000的家庭币,那么谁为家庭做出了贡献了都能获得一定的货币激励,包括但不限于做家务、为家庭创收、孩子做了一件优秀的事等等等等,大家表面上为了获得激励努力为家庭做贡献,实际上最终都是让这个家变得更好了。同时可以加入多签钱包的思路,每一笔激励需要家庭指定数目的成员同时同意才可以通过,后续这些激励可以作为治理代币进行家庭投票,比如今年选择去哪里旅游啊、周末吃什么好吃的、小孩是出国留学还是国内读研...... 谁的货币持有量越多,谁的投票权重就越大,毕竟代表你过去对家庭做出贡献更大嘛,最后投票数最多的提案才能通过。一切都是透明、可追溯、不可篡改的。

当我和家庭成员讨论了这个想法,大家都对觉得这个玩法可以尝试下,失败就失败嘛,人生就是在不断试错。于是我开始调研市面上已有的方案。这里就不得不提智能合约的好处了,你能想到的点子这个世界上某个角落的人可能早就已经想到了,并且代码都是链上公开透明的,也就是说你不用自己重复造轮子,更重要的不用担心 Web2 世界里各种环境依赖、不兼容等问题,直接几行代码调用智能合约就行了。而上面想法需要的两个关键应用,正是多签钱包和链上投票。

多签钱包

所谓多签钱包,顾名思义就是需要多份签名。一个最基本 BIP 钱包拥有一个彼此唯一对应的公钥、私钥对,一旦你的私钥泄漏了,那么你的这个钱包就彻底废了,因此安全性大打折扣。因此在这之上,就有人想到了,为啥不可以人为的再包装一层逻辑呢?反正都是一个智能合约的事。于是,多签钱包的市场就出现了。在如今堪比黑暗森林的早期 Web3 世界,多签钱包可以说是进场狩猎的猎人们必备的防弹衣了。其重要性不言而喻。

而这个赛道目前的佼佼者,非 Gnosis Safe 莫属。

在体验了 Gnosis Safe 的 DApp、拜读了 Github 开源的源码、潜水 Discord 开发者日常群一段时间之后,我果断选择了这个DApp。主要还是因为它迭代频繁、支持最多主流链、最完善的拓展服务。这应该是目前多签领域现有的最佳方案了。

而且 Gnosis Safe 还有 GNU 协议的 iOS 客户端源码,对于自己实现这些多签规则的细节也有很多参考价值。

链上投票

DAO 的另一个重要组成便是如何消费货币。对于大多数没有金融属性的社区货币,最有用的功能便是社区治理了。而治理中投票便是最常见的方式。

这个赛道的选择就很多了。Aragon、Syndicate、Snapshot 等等,最终评估下来还是链下签名、链上提交结果的方式更经济,因此选择了 Snapshot,而且 Snapshot 正好也有测试网的环境,方便配合 Gnosis Safe 进行开发调试,而且 Snapshot 的开发社群也很活跃,提交的问题基本秒回复。

但是 Snapshot 是一个纯前端的 DApp,因此要移植到移动端需要逆向很多接口和步骤。比如它要求你先有一个 ENS 域名,所以还得先逆向出 ENS 的注册逻辑,在端上重新实现一遍。好在都是开源的合约,需要挖坟一些隐藏地比较深的代码。移植的这个过程就像是寻宝,你挠破头皮的想不出的一个参数,最后在一个毫不起眼的 repo 里找到了上古 JS 实现。

同时 Snapshot 可以说是把投票玩出花了,除了最基本的单选投票,还有赞成投票、排序选择投票、二次投票、加权投票等多种玩法,同时社区还在不断开发新功能。

组装起来

有了上述两个核心功能,接下来就要把它们串联起来了,当然还需要自己实现一些 DAO 的基本功能。

目前 SafeDao 只支持 ETH 主网和 Goreli 测试网,主要是因为 Snapshot 支持这两个;因此需要在主网上发布一个 TokenFactory 的智能合约,用来发行 DAO 货币;同时初始货币在创建后就要全部转移到多签钱包以便后续从多签钱包分发给成员。而多签钱包的成员只要持有了相应 DAO 的 token,就会自动成为拥有 Snapshot 投票权的成员。至于两个服务如何串联起来,我想了一个比较 triky 的路子,直接用多签钱包的 hash 地址作为 Snapshot 的 Space 名,虽然有点搓就是了。

另外,这是我完全用 SwiftUI 框架编写的第一个完整 App,心得就是,SwiftUI 目前还是一个很早期的 Baby,处理数据的机制非常现代和高效,但是很多自定义动画和追求极致性能的需求下,目前还是有很多限制和 bug。

名字取自 Gnosis Safe 和 Snapshot 的拼接,也意味着这款 App 就是把这两个服务链接起来变成了一个 DAO 产品。Logo 也是取自两个产品的 logo 的融合。

SafeSnap Logo

使用指南

介绍

SafeSnap 是一个整合了 Gnosis Safe 和 Snapshot 两大 DAO 治理工县的 iOS App.

旨在将两者集成到一个易于使用的界面中,在让用户更轻松地操作并实现 DAO 治理。

其中 Gnosis Safe 是一款安全的以太坊钱包,可以将您的以太坊资产保存在大多数主流以太坊区块链网络中。它支持多重签名,可以容易地实施复杂的交易,并自动执行以太坊智能合约,使您的 DAO 治理更安全、更有效。

Snapshot 是一款 DAO 治理工具,可以让我们更轻松地实施决策流程,从而使 DAO 更加有效地运作。它可以让用户更容易地进行投票和决策,并有效地提高协作效率。

使用 SafeSnap,你可以轻松访问 Gnosis Safe 和 Snapshot,让您更加安全有效地实现DAO 治理投票,更轻松地管理您的资产,以及更安全地使用以太坊区块链网络。

整个注册流程图如下:

创建用户

当你首次安装 App 后,软件会自动弹出创建用户页面。在这里,你可以新建一个用户,其实准确来说,这是一个 Web3 钱包,你完全可以导入已有的钱包(软件完全开源,不用担心后门)。注意这里不是 Gnosis Safe 的多签钱包。

当然你也可以手动创建一个新的,一般也推荐这么做。等待一会儿,你就会看到自动生成的12 个助记词。然后就是常用的 Web3 钱包逻辑了,你可以手动保存这些助记词,也可以一键保存在 iCloud。一般都推荐保存到 iCloud,登录其他 App 也可以一键导入。如果你选择手动保存,软件自动把 12 个助记词分成了两段(为了避免第三方 App 读取剪切板),然后就可以转移到你认为安全的的地方了。

创建 DAO

SafeSnap 里的一个 DAO 其实包括了一个多签和一个 Snapshot Space。

创建多签钱包+初始货币

当你完成上面的用户创建之后,App 会自动弹出创建 DAO 的页面。

这里同样你可以导入一个已有的 DAO,也就是多签钱包。这一步没有隐私安全问题,因为只是导入钱包的公钥,每个钱包的 transctions 本来就是公开透明的。创建 DAO 时填写的配置除了 Safe 多签钱包本身包括的配置之外(名称、成员、最低通过人数、区块链ID),还会创建一个社区货币,因此还需要你输入货币的名称、符号、初始总发行量。然后程序会自动把初始货币都转移到这个多签钱包,后续都从这里分配给成员。

以上完成,你就完成一个 DAO 创建的 60% 了。这个过程大概1~2分钟。对了,需要全程科学上网!!

创建 Snapshot Space

剩下的 40% 就是创建 Space。这一步需要步骤更多,完整需要5分钟左右。因为你正常去注册一个 Space 就有这么多步骤:

  1. 你需要先有个 ENS 域名。光这一步就有很多子步骤,ENS 官方没有公布完整的创建规则,只要一个 GUI 前端。网上也没有 ENS 注册的自动化脚本。我通过分析 ENS 的智能合约和一些链上成功的记录,逆向出了创建一个 ENS 域名的规则,全程不需要你动手,只要确保 App 打开即可。

  2. 有了 ENS 域名,你用这个域名去创建一个 Space。然而 Space 官方也只有一个 GUI 的前端页面。要不怎么说前端生态成熟呢,上产品太快了,也方便随时改,这一点开发原生 App 的确实遥不可及。

  3. 设置 ENS 域名的 Controller

  4. 配置 Space 的基本信息(名称、头像等)

  5. 配置 Space 投票策略

  6. 配置 Space 成员

但是不用担心,上面的所有步骤我都用 App 自动化了,你只要确保 App 保持打开的状态就行了。当你看到下面这个界面就表示在创建 Space ,这一步因为步骤繁琐,差不多需要 5 分钟,请耐心等待,一劳永逸。

开始使用

当你看到这个页面的时候,说明所有准备工作都已经创建完成了。为了确保是否如此,你可以去设置页面最顶部,如果看到🟢绿灯全部亮起了,说明所有准备工作都完成了。

发起多签

然后你就可以点击 Tabbar 中间的加号,来增加一笔转账申请。比如初创团队 CEO 需要决定给某个成员多少奖励,可以发起一笔多签活动,App 会自动推送给其他创始成员,满足最低人数之后,这笔奖励就会真正达到目标成员的钱包里。

又比如是一个三口之家,孩子今天做了一件好人好事,父母准备奖励一笔资金给孩子,就可以点击加号,选择相应的金额,发起一笔多签。妈妈收到之后也同意这笔交易,那么孩子就会最终得到这笔奖励。

同时,每次发起的多签交易你都可以保存起来成为模板,方便下次快速发起,不用再重复输入。

同意、拒绝多签

当你点击第二个 Tab,你会发现一个列表。这个列表就是你第一步中发起的所有的多签操作。

这里需要注意几个规则:

  1. 你可以表决任意一笔

  2. 但区块链只能按照从上到下的顺序上链。也就是说只有最上面的一笔才可以表决完立刻上链。

  3. 上链才代表着一笔交易最终完成。

  4. 所以除了最上面的一笔之外,其余的交易你仍然可以投反对票

  5. 反对票也是一种特殊的交易,当对方投了反对票,也会反过来要求你再同意。

  6. 总是,多签钱包里的任何一个不一致的操作,都需要达到最低成员阈值。

这在使用上确实会增加操作成本,但这是区块链安全的机制决定的。或许后面可以考虑端上做免签的方案,但这样就降低了安全性。后续继续探索优化找个平衡点。

发起提案

点击加号,选择新建投提案,你就可以发起一笔提案。你可以添加标题、描述、选项,点击发送即可。

发起投票

来到倒数第二个 Tab。这里就是你刚才所有的提案汇聚的地方。你可以选择一个你自己想要投票的选项进行投票即可。这里要注意的是,你持有的 DAO 货币越多,你对该提案的投票权重就越大。这些 DAO 货币就是你平时对家庭有贡献时积累的资本,证明了你之前对家庭的贡献,投票有更大的权重也合理。

最后

起初这个想法还是为了自己家庭服务的,后来发现市面上对这两个产品有需求的不在少数,并且都没有一个整合起来的移动端,因此有了对外发布的想法,当然必然是开放源代码的,毕竟我也是从开源项目中来的。

Github

完整项目地址在这里:

https://github.com/KittenYang/SafeSnap

Testflight

由于 App Store 不支持个人开发者发布虚拟货币相关的应用,我也懒得搞个公司,就直接通过 TestFlight 发布了,好在有 1W 个名额,DAO 用户毕竟小众。我感觉能有1000人使用就很了不得了,所以也不用担心名额不够。

TestFlight 链接:

https://testflight.apple.com/join/yYciI6d2

Gitcoin

https://grantshub.gitcoin.co/#/chains/1/registry/0x03506eD3f57892C85DB20C36846e9c808aFe9ef4/projects/273

☕️ Tip Jar ❤️

Open Source works will not be longer without your support.

ETH: 0x9D68df58C48ce745306757897bb8FaA3FE72A1BF

最后的最后,希望区块链不再只有炒币、数字藏品这些投机的东西了,让影响现实世界的那一天早点到来,真正点燃人类协作的潜力。

DAO