jjzjj

什么是 DAO

晨浩爱思考 2024-06-23 原文

简介

DAO(Decentralized Autonomous Organization,去中心化自治组织) 是与全世界志同道合的人合作的一种有效且安全的方式[1]。

把它们想像成一个其成员共同拥有和管理的本地互联网企业。它们有自己的金库,没有组织的允许没有任何人有权限访问金库。每个决策都由提案和投票来决定,确保组织中的每个人都有发言权。

没有随意支配开销的 CEO,也没有随意篡改账本的 CFO。所有都是公开的,开销的规则都通过其代码记录在 DAO 中。

使用 DAO,无需信任组织中的任何人,只需信任 DAO 的代码,它 100% 透明且可供任何人验证

DAO 的基础设施是可以在世界任何地方的任何计算机上运行的软件,无需政府部门的支持。甚至他们使用的资金也是全球性的、开源的,并且不受任何政府的控制。但它们并非无法无天,与任何组织一样,DAO 可以在目的、成员资格、投票等方面设置自己的规则[4]。

DAO 的类型

根据投票方式的不同可以分为:

  1. 基于 Token 投票的 DAO
  2. 基于股份投票的 DAO

根据 DAO 代码执行环境可以分为:

  1. 链上治理
  2. 链下治理

基于 Token 投票的 DAO

通常完全无需许可,具体取决于使用的 token。大多数情况下,这些治理代币可以在去中心化交易所进行无许可交易。其他人必须通过提供流动性或其他一些“工作证明”来获得。无论哪种方式,只需持有令牌即可授予投票权。

通常用于管理广泛的去中心化协议和/或令牌本身。例如 MakerDAO —— MakerDAO 的代币 MKR 在去中心化交易所广泛使用。因此,任何人都可以购买对 Maker 协议的未来拥有投票权。

基于股份投票的 DAO

基于股份的 DAO 获得更多许可,但仍然相当开放。任何潜在成员都可以提交加入 DAO 的提案,通常以代币或工作的形式提供一定价值的贡品。股份代表直接投票权和所有权。所有股份都是不可转让的,并且是 DAO 独有的。成员可以随时以其在金库中的比例份额退出。

通常用于更紧密、以人为本的组织,如慈善机构、工人集体和投资俱乐部。也可以管理协议和令牌。例如 MolochDAO —— MolochDAO 专注于资助以太坊项目。他们需要一份成员提案,以便小组可以评估您是否拥有必要的专业知识和资金来对潜在的受助人做出明智的判断。你不能只在公开市场上购买对 DAO 的访问权。

DAO 工作原理

由于链上治理的成本较高,目前多数项目会采取两者结合的方式进行治理。通过链下的投票可以观察某个提案的热度,若链下提案通过,则会创建其对应的链上提案(包含可执行的程序代码),链上提案通过后,会自动执行提案的内容(代码)。

以 Uniswap 为例,它的治理过程分为三个阶段[7]:

  1. 热度检查。该阶段确定是否有足够的意愿来改变现状。在两天结束时,以 25k UNI 赞成票阈值的多数票获胜。如果热度检查没有建议改变现状,则该主题将在治理网站上关闭。如果热度检查确实建议进行更改,则进入第 2 阶段:共识检查。
  2. 共识检查。围绕潜在提案建立正式讨论。共识检查伴随着另一个链下投票。在五天结束时,以 5 万 UNI 赞成票门槛的多数票获胜。
  3. 治理提案。治理提案是治理过程的最后一步。该提案应包含来自共识检查的反馈,并附有可执行的链上代码。为了提交链上治理提案,代表必须至少有 200 万个 UNI 余额。投票期持续 7 天,4000 万 UNI 赞成票阈值的多数票获胜。

链上治理

链上治理的 DAO 的规则通常由智能合约编写,100%透明且可供任何人验证。所有 DAO 成员通过对提案进行投票的方式决定是否采纳该提案。

提案的内容往往是一个或多个可执行的交易。例如某 DAO 要为某一个项目进行资助,需要发送 100 ETH 给项目负责人。那么提案的内容就是“将 DAO 金库中的 100 ETH 转到项目负责人的钱包地址中”这个交易,提案通过后,交易就会自动执行。

投票需要用专门的治理 Token 或股份,1 个 Token 等于 1 票 或每股等于 1 票。例如 Uniswap 通过 UNI Token投票治理,MolochDAO 通过股份投票治理。

基于 Token 投票的比较流行的 DAO 合约主要是:OpenZeppelin StyleCompound Bravo Style。大多数基于 Token 投票的 DAO 项目都是从这两个代码 fork 过来的。Tally 可以让你不需要懂代码也能在 ETH 主网创建此类型 DAO。

基于股份投票的 DAO 合约主要是从 Moloch V2.1 fork 过来的。DAO Haus 可以让你不需要懂代码也能创建此类型 DAO。

治理过程大概如下图所示[5]:

链下治理

Snapshot 为例,它是一个去中心化的投票系统。你可以定制自己创建的 DAO 的投票策略,例如使用 ERC20、NFT 等投票。也可以参与其他 DAO 的提案投票。由于是链下的系统,因此没有任何 gas 费用。

DAO 的应用

在开发者方面:由开发者组成的 DAO,通过投票决定接下来的收益分配、开发重心、bug修复优先级等。

在工作领域:打击不公平工作行为的策略可以在全球范围内得到协调和资助,通过投票来决定哪些策略是最佳的。

在艺术领域:KnownOrigin 是一个 NFT 交易市场,在2019年与 OsakaDAO 一起测试了艺术 DAO 的概念。作为一个分布式的赞助人群体,他们筹集了900美元的捐款,然后,他们扮演一个画廊的角色,卖掉所有的东西,获得56%的利润。这笔钱的5%归艺术家所有(除了他们最初的佣金),其余的归 DAO 所有,由 DAO 成员自行决定如何使用[2]。

在元宇宙/虚拟世界领域:通过治理通证进行本地治理,通证持有者可以对理事会成员、财政拨款、土地政策以及内容审核等问题进行投票。

在资产管理领域:理论上,DAO 可以更明智地决定在哪里分配资金,因为在汇总多个独立代理的经验和见解时会出现集体智慧。并在资金使用方面透明,所有相关利益者可以跟踪支出。

相关项目清单

  • MakerDAO —— MakerDAO 的代币 MKR 在去中心化交易所广泛使用。因此,任何人都可以购买对 Maker 协议的未来拥有投票权。
  • MolochDAO —— MolochDAO 专注于资助以太坊项目。他们需要一份成员提案,以便小组可以评估您是否拥有必要的专业知识和资金来对潜在的受助人做出明智的判断。你不能在公开市场上购买对 DAO 的访问权。
  • Aragon —— Aragon 是一套应用程序和服务,支持新形式的全球社区。
  • DAOHous —— DAOhaus 是一个用于启动和运行 DAO 的无代码平台。它由社区拥有和经营。
  • Colony —— Colony 使世界各地的人们可以轻松地在线建立组织,源码 100% 开源。
  • DAOstack —— DAOstack 是一个开源项目,旨在推进去中心化治理的技术。
  • Gnosis Safe —— DAO 的多重签名钱包/金库。
  • Parcel —— 一套用于扩展 DAO 财务运营和授权 DAO 贡献者的工具。
  • Snapshot —— Snapshot 是一个免费、开源、透明的链下投票框架。
  • Otonomos —— Otonomos 帮助加密社区形成链下和链上法律实体。
  • Uniswap —— Uniswap 是一个由 UNI 通证持有者管理的去中心化加密货币交易协议。
  • OpenZeppelin —— OpenZeppelin 是一个安全的区块链应用标准,其提供了 DAO 治理的合约实现。
  • Tally —— Tally 是一个成熟的链上治理应用,它包括投票仪表盘、提案创建向导、实时研究和分析以及教育内容。

进一步学习

参考

[1] 以太坊官方介绍

[2] 15 Ways the World is being Transformed by DAOs

[3] House of DAOs

[4] Aragon: What is a DAO

[5] PoolTogether: Governance 101

[6] Tally: Supported DAOs

[7] Uniswap: Governance

有关什么是 DAO的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  6. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  7. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  8. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  9. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  10. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

随机推荐