您的位置: > 欧 易 OKX 区块链新闻> 正文

打印本文             

By:小白@慢雾安全团队

背景概述

上周写了智能合约安全审计入门篇 —— 重入漏洞,这次我们接着来说一个同样很经典的漏洞 —— 溢出漏洞

前置知识

首先我们还是先来看看溢出是什么:

算术溢出(arithmetic overflow)或简称为溢出(overflow)分为两种:上溢和下溢。所谓上溢是指在运行单项数值计算时,当计算产生出来的结果非常大,大于寄存器或存储器所能存储或表示的能力限制就会产生上溢,例如在 solidity 中,uint8 所能表示的范围是 0 - 255 这 256 个数,当使用 uint8 类型在实际运算中计算 255 + 1 是会出现上溢的,这样计算出来的结果为 0 也就是 uint8 类型可表示的最小值。同样的,下溢就是当计算产生出来的结果非常小,小于寄存器或存储器所能存储或表示的能力限制就会产生下溢。例如在 Solidity 中,当使用 uint8 类型计算 0 - 1 时就会产生下溢,这样计算出来的值为 255 也就是 uint8 类型可表示的最大值。

如果一个合约有溢出漏洞的话会导致计算的实际结果和预期的结果产生非常大的差异,这样轻则会影响合约的正常逻辑,重则会导致合约中的资金丢失。但是溢出漏洞是存在版本限制的,在 Solidity < 0.8 时溢出不会报错,当 Solidity >= 0.8 时溢出会报错。所以当我们看到 0.8 版本以下的合约时,就要注意这个合约可能出现溢出问题。

漏洞示例

看了前置知识我相信大家对溢出漏洞都有一定的了解了,下面我们来结合合约代码来深入了解溢出漏洞:

  •  

// SPDX-License-Identifier: MITpragma solidity ^0.7.6;

contract TimeLock { mapping(address => uint) public balances; mapping(address => uint) public lockTime;

function deposit() external payable { balances[msg.sender] += msg.value; lockTime[msg.sender] = block.timestamp + 1 weeks; }

function increaseLockTime(uint _secondsToIncrease) public { lockTime[msg.sender] += _secondsToIncrease; }

function withdraw() public { require(balances[msg.sender] > 0, "Insufficient funds"); require(block.timestamp > lockTime[msg.sender], "Lock time not expired");

uint amount = balances[msg.sender]; balances[msg.sender] = 0;

(bool sent, ) = msg.sender.call{value: amount}(""); require(sent, "Failed to send Ether"); }}

漏洞分析

我们可以看到,TimeLock 合约充当了时间保险库。用户可以将代币通过 deposit 函数存入该合约并锁定,且至少一周内不能提现。当然用户也可以通过 increaseLockTime 函数来增加存储时间,用户在设定的存储期限到期前是无法提取 TimeLock 合约中锁定的代币的。首先我们发现这个合约中的 increaseLockTime 函数和 deposit 函数具有运算功能,并且合约支持的版本是:0.7.6 向上兼容,所以这个合约在算数溢出时是不会报错的,所以我们这里就可以判断这个合约是可能存在溢出漏洞的,这里可利用的函数有两个,一个是 increaseLockTime 函数,一个是 deposit 函数。我们先来分析这两个函数内参数可影响的范围再来决定如何发起攻击:

1. deposit 函数存在两个运算操作,第一个是影响用户存入的余额 balances 的,这里传入的参数是可控的所以这里会有溢出的风险,另一个是影响用户的锁定时间 lockTime 的,但是这里的运算逻辑是每次调用 deposit 存入代币时会给 lockTime 增加一周,由于这里的参数不可控所以这个运算不会存在溢出风险。

2. increaseLockTime 函数是根据用户传入的 _secondsToIncrease 参数来进行运算从而改变用户的存入代币的锁定时间的,由于这里的 _secondsToIncrease 参数是可控的,所以这里有溢出的风险。

综上所述,我们发现可利用的参数有两个,分别为 deposit 函数中的 balances 参数 increaseLockTime 函数中的 _secondsToIncrease 参数

我们先来看 balances 参数,如果要让这个参数溢出我们需要有足够的资金存入才可以(需要 2^256 个代币存入才能导致 balances 溢出并归零),如果要利用这个溢出漏洞的话,我们把大量资金存入自己的账户并让自己的账户的 balances 溢出并归零从而清空自己的资产,我觉得在坐的各位没有人会这么做吧。所以这个参数可以认为在攻击者的角度是不可用的。

我们再看 _secondsToIncrease 参数,这个参数是我们调用 increaseLockTime 函数来增加存储时间时传入的,这个参数可以决定我们什么时候可以将自己存入并锁定的代币从合约中取出,我们可以看到这个参数在传入之后是直接与账户对应的锁定时间 lockTime 进行运算的,如果我们操纵 _secondsToIncrease 参数让他在与 lockTime 进行运算后得到的结果产生溢出并归零的话这样我们是不是就可以在存储日期到期前将自己账户中的余额取出了呢?

下面我们来看看攻击合约:

攻击合约

  •  

contract Attack { TimeLock timeLock;

constructor(TimeLock _timeLock) { timeLock = TimeLock(_timeLock); }

fallback() external payable {}

function attack() public payable { timeLock.deposit{value: msg.value}(); timeLock.increaseLockTime( type(uint).max + 1 - timeLock.lockTime(address(this)) ); timeLock.withdraw(); }}

这里我们将使用 Attack 攻击合约先存入以太后利用合约的溢出漏洞在存储未到期的情况下提取我们在刚刚 TimeLock 合约中存入并锁定的以太:

1. 首先部署 TimeLock 合约;

2. 再部署 Attack 合约并在构造函数中传入 TimeLock 合约的地址;

3. 调用 Attack.attack 函数,Attack.attack 又调用 TimeLock.deposit 函数向 TimeLock 合约中存入一个以太(此时这枚以太将被 TimeLock 锁定一周的时间),之后 Attack.attack 又调用 TimeLock.increaseLockTime 函数并传入 uint 类型可表示的最大值(2^256 - 1)加 1 再减去当前 TimeLock 合约中记录的锁定时间。此时 TimeLock.increaseLockTime 函数中的 lockTime 的计算结果为 2^256 这个值,在 uint256 类型中 2^256 这个数存在上溢所以计算结果为 2^256 = 0 此时我们刚刚存入 TimeLock 合约中的一个以太的锁定时间就变为 0 ;

4. 这时 Attack.attack 再调用 TimeLock. withdraw 函数将成功通过 block.timestamp > lockTime[msg.sender] 这项检查让我们能够在存储时间未到期的情况下成功提前取出我们刚刚在 TimeLock 合约中存入并锁定的那个以太。

下面是攻击流程图:

solidity

修复建议

到这里相信大家对溢出漏洞都有自己的理解了,那么下面我们就以开发者和审计者的角度来分析如何预防溢出漏洞和如何快速找出溢出漏洞:

(1)作为开发者

1. 使用 SafeMath 来防止溢出;

2. 使用 Solidity 0.8 及以上版本来开发合约并慎用 unchecked 因为在 unchecked 修饰的代码块里面是不会对参数进行溢出检查的;

3. 需要慎用变量类型强制转换,例如将 uint256 类型的参数强转为 uint8 类型由于两种类型的取值范围不同也可能会导致溢出。

(2)作为审计者

1. 首先查看合约版本是否在 Solidity 0.8 版本以下或者是否存在 unchecked 修饰的代码块,如果存在则优先检查参数的溢出可能并确定影响范围;

2. 如果合约版本在 Solidity 0.8 版本以下则需要查看合约是否引用了 SafeMath;

3. 如果使用了 SafeMath 我们需要注意合约中有没有强制类型转换,如果有的话则可能会存在溢出的风险;

4. 如果没有使用 SafeMath 且合约中存在算术运算的我们就可以认为这个合约是可能存在溢出风险的,在实际审计中还要结合实际代码来看。


构建和运行 DAO:为什么治理很重要?

撰文:Tarun Chitra,Gauntlet 创始人兼 CEO

编辑:南风   

随着 DeFi 和 NFT 社区规模的巨大增长,如何管理去中心化协议变得更加重要。现在和未来几年,这些社区面临的最紧迫的挑战之一是解决治理问题——即管理集体决策以优化资金和运营。

然而,治理需要大量的协调成本,因为需要让网络参与者参与对每一个决策进行投票。这些协调成本可以通过一种新型去中心化网络——DAO (去中心化自治组织)——而大幅降低。在 DAO 中,智能合约使参与者能够以合作的方式进行治理。

在 DAO 这种全新的网络中,人们聚集在一起,有一致的动机和共同的利益,没有单一领导者或者单一故障点,几乎完全由代码运行。许多新的去中心化协议正在使用这种结构构建,迄今为止,许多 DAOs 活动都是在基于开放式金融的系统中进行的,但也越来越多地在购买和交易 NFT 艺术品和其他收藏品的文化网络中进行。在许多方面,DAOs 可以被视为投资银行、公司和社交俱乐部的结合体,通过加密承诺将这些角色结合在一起。

尽管被称为「去中心化自治组织」,但DAOs 通常并不是完全自治的——需要有人创建决策框架来确保 DAO 以有效的方式进行治理,并在经济上激励网络参与者参与,以便 DAO 能够发展壮大。

DAOs 创建者和参与者遇到了许多问题:需要做出哪些决策?可以使用什么样的经济激励措施?DAOs 应该在什么条件下组建?当前所需的主要治理任务是什么?什么工具可以用来帮助治理?

在我们回答这些问题之前,让我们先问另一个问题——我们是如何走到这一步的?-并简要探讨DAOs 的发展。这将使我们了解去中心化结构在过去五年是如何形成和变化的,有助于解释为什么经济激励是即将到来的 DAOs 治理时代的一个关键因素。

01. 为现代 DAOs 铺路的早期实验

2016年,世界上首次出现了这种互联网原生的组织。最著名的早期 DAO 被称为“The DAO”,它是一个集体投资工具,旨在成为一种理性主义的众筹形式,也即一种去中心化的风险基金,并首次向人们展示了这样一个通过代码运行的去中心化组织可以如何自我治理。参与者向该 DAO 提供 ETH 并获得 DAO 代币,这些代币代表了持有者在 The DAO 中的经济利益以及投票权。

The DAO 的梦想是允许任何参与者——无论他们对国库的金库是大是小——都能在以太坊生态系统中获得可观的回报 (编者注:任何人都可以向 The DAO 社区宣传他们的想法和项目,并有可能从 The DAO 那里获得投资资金,而任何持有该 DAO 代币的人都可以对投资计划进行投票。如果项目盈利,DAO 代币持有者就会得到回报)。然而,一个关键的智能合约漏洞导致 The DAO 合约中的资金被攻击者抽走,进而导致 DAO 这个术语不再受欢迎,引发了所谓的“DAO寒冬”,与 2017 年之后的熊市同时出现。

尽管期望和关注度减少,这一时期在治理方面进行了许多重要的实验,为现代 DAOs 铺平了道路。首先解决的是安全问题,因为如果用户担心他们的资金会消失,那么没有哪个 DAO 网络能够正常运行,更不用说增长了。首先,诸如 Tezos 等以太坊竞争对手承诺更安全的智能合约编程语言,使开发人员更容易避免 The DAO 的问题。与此同时,在以太坊上也出现了许多实验,比如 Aragon、dxDAO、Kleros 和 Moloch。这些 DAO 实现为这个领域带来了更好的编程标准和全新的代币分发机制。

随着安全问题的减少,早期的 DAOs 组织的最大共同问题是,它们当时无法找到一种能够鼓励选民对 DAO 事务高度参与的激励模式。如果没有具有做出明智决策所需专业知识的选民的参与,那么 DAO 治理就会停滞不前。

02. 经济激励机制的兴起

近年来 DeFi (去中心化金融) 的兴起为更复杂的开放式金融系统和工具打开了大门,这些系统和工具不依赖银行和其他传统系统。伴随 DeFi 的兴起,新的 DeFi DAOs 开始出现,它们利用经济奖励机制来鼓励人们参与这些系统。

这些激励措施,以及它们建立在彼此之上的方式,已经成为了 DAO 治理的关键。如果没有经济激励,网络成员们就没有理由把他们的时间、金钱和精力投入到这些网络中,对治理提案进行投票来改善这些网络,或者关心这些网络是否继续增长和成功。

下面是几种类型的激励机制及其形成过程中的一些关键事件,以帮助读者们了解我们是如何走到这一步的,何时需要 DAOs,激励机制对于治理而言多么至关重要,以及有效治理 DAOs 的策略。

1) 增长激励措施

2020 年 6 月出现了一项重要进展,链上借贷协议 Compound 实现了去中心化,该协议的核心开发者将该协议的运营和所有权移交给了社区。与之前的 DAOs 不同,Compound 的治理 DAO让社区成员控制该协议的储备资产,这些资产是通过向借款人收取费用产生的。对于链上协议来说,这些现金流 (在当时) 是协议产生的最高收入。

Compound 提出了一个新颖的代币分配模式 (编者注,也即所谓的流动性挖矿),旨在既激励协议内的资本 (流动性) 增长,又为用户提供更好的贷款定价。该模式涉及到将 Compound 的原生代币 COMP 持续地分发给向该协议提供流动性或者从协议中进行贷款的用户。Compound 的每个用户都立即成为了该协议的股东,其中一些人成为了积极的贡献者和投票者。

这些经济激励措施对于控制一些关键参数 (比如保证金要求和借贷利率) 至关重要。Compound 的分配方式让人们得以一窥去中心化的梦想,也即由协议用户来控制该协议 (以及协议的现金流)。由于 Compound 协议有着数十亿美元的资产和抵押款需要治理,一种新型 DAO 的基本设置已经设定——参与者有明确的理由使用他们的时间、资产和投票为协议的最佳利益而行动,因为网络的增长和成功可以使他们个人受益。

2) 收益耕作

通过将治理代币分配给协议用户,而不仅仅是给投资者和开发团队,这为许多新的模式的出现创造了一个设计空间。首先是在协议上创造各种激励行动,也即所谓的「收益耕作」(yield farming)。当用户通过借贷、质押 (staking) 或提供其他形式的资产流动性等行为而获得奖励,且这些奖励是以某种代表了协议本身所有权的代币的形式发放,这就是收益耕作。奖励获得者要么可以积累该所有权并寄希望于该协议价值的增长,或者也可以在公开市场上出售该奖励,从而使自己的收益耕作行为产生复利,增加自己的收益。想象一下,如果每次你存钱的时候,大银行都会给你一小部分他们的股票——这样你会更愿意存钱,这对你和银行都有好处。

例如,Compound 的用户可以通过在协议中锁定其资本 (即将资产作为抵押品,从而在协议中进行借贷交易),并赚取指定的 DAO 治理代币,从而获得某种形式的收益。即将资产作为抵押品在协议中通过借贷进行交易)并赚取指定的DAO治理令牌来实现某种形式的收益。通过这种方式,Compound 能够使用 COMP 代币来激励协议增长,并为协议创造一个用户群,这些用户被激励进行投票和为协议做出贡献,因为这些收益吸引力更多的用户。

当开发者们意识到他们可以通过这种「收益耕作」的方式来吸引资金到新的 DeFi 协议中时,2020 年整个夏季都在进行一场流动性竞赛,通过 DAO 治理代币分发来推动 DeFi 协议的发展。去年夏季 DeFi 领域增长的催化剂是 DeFi 收益聚合器 Yearn Finance (YFI) 的推出,该协议通过其“公平分配”(即所有的收益代币都分配给流动性提供者,而不会分配给该协议开发者),将 DeFi 领域的叙事从“由风投资助的项目”转变成了“由社区资助的项目”。当 Yearn Finance 推出并取得快速增长时,许多竞争者推出了该协议的克隆和山寨版,并承诺略有改进,但更重要的是,推出新的 DAO 治理代币。

Yearn Finance 证明,仅通过治理的承诺就可以引导协议的采用。其使用的“公平分配”的模式,以及使用初始代币分配来瞄准理想的未来用户,自那以来已经变得普遍起来。

3) 追溯性空投

一些新的协议已经建立在这些激励模式的基础上,以进一步激励用户。一个突出的例子是空投,也即向当前或以前的用户的钱包投递代币,以传播意识、构建 (协议) 所有权或追溯奖励早期用户。例如,去中心化交易所协议 Uniswap 推出的 UNI 代币以追溯性的方式发放给所有曾经使用过 Uniswap 协议的用户。这次空投使一些早期用户获得了价值数千万美元的 UNI。

更重要的是,空投和代币发行被证明是一种有效的资本 (流动性) 保护武器,很快成为寻求获得市场份额的新 DeFi 协议所必需的方式。代币发行的增加也带来了治理权利的变化——早期用户不知道他们的参与会为自己带来治理权利,他们开始拥有很大一部分的协议治理权,从而推动了更加去中心化的协议治理。

追溯性空投成为了增加代币分配和活跃用户参与治理的工具。

03. 文化类 DAO & 游戏公会

上述经济激励措施的发展促成了 2020 年 DeFi 协议的指数增长。但除了 DeFi DAOs 之外,其他类型的 DAOs 也正在出现,它们有着不同的文化、激励模式和治理结构。最近,我们已经看到这样一类 DAOs 的崛起,它们的代币分配模式并不像 DeFi DAOs 那样与协议使用或参与挂钩。

这些就是收藏家 DAOs,由一群以集体的方式来决定购买艺术品或其他数字物品的人组成。其中一个例子就是 PleasrDAO,这个 DAO 组织是在 pplpleasr (Emily Yang) 为 Uniswap V3 的发布创建了一个纪念视频之后成立的 (我是 PleasrDAO 的创始成员)。该视频被视为捕捉了 2020 DeFi 精神的标志性艺术,且该视频被铸造为一枚 NFT (非同质化代币) 并进行了拍卖,所得款项被用于慈善。此次拍卖以及围绕该艺术品的集体精神,最终推动了一些长期的 DeFi 开发者和企业家创建了 PleasrDAO 来购买艺术品。

PleasrDAO 带来的进步是一个对 NFTs 进行碎片化的独特机制,这使得对单个艺术品的集体所有权更加可行。这一愿景将 PleasrDAO 刻画成了一个艺术博物馆,就像 MoMa (现代艺术博物馆) 一样,只是 PleasrDAO 博物馆里面的所有艺术品都可以有资助者们集体拥有。

另一个具有文化意义的收藏家 DAO 组织是 FingerprintsDAO,产生于 2020 年秋季 (我也是其中的成员)。与 PleasrDAO 不同,FingerprintsDAO 专注于建立一个生成艺术和链上艺术的收藏。基于 NFT 的生成艺术的独特之处在于,它允许艺术品在每次所有权变更时也发生变化。比如像 $HASH (Proof of Beauty) 这样的生成艺术品,每次当该艺术品被转移时,其底层的元数据就会根据区块链状态而随机变化。FingerprintsDAO 收集这些艺术品,并拥有一些最大的生成艺术品系列中的一些艺术品,包括 Autoglyphs、Bitchcoins和 0xDEAFBEEF 系列等。

上图:生产艺术品 Autoglyphs 系列中的几幅艺术品

FingerprintsDAO 和 PleasrDAO 利用他们的 DAO 治理代币来管理他们的金库、执行资产销售 (包括来自 NFT 碎片化的收益) 和资产管理。DAO 代币持有者有权对这些事件进行投票,而且在许多情况下,这些投票的结果是使用诸如 Fractional 或 Uniswap 等 DeFi 协议直接在链上以算法的方式来执行的。

由于这类收藏家 DAOs 的代币分配并不像 DeFi DAOs 那样与协议的使用或参与相挂钩,而且经济激励也通常不像 DeFi DAOs 那样一致,这可能导致早期的这类 DAO 组织者承担越来越大的义务以保持 DAO 的有效运行,以及 DAO 成员之间复杂的动态关系。这种性挑战是特定于文化类 DAOs 的,此领域的构建者应该使用不同类型的治理决策来保持 DAOs 的有效运行。

对于收藏家 DAOs 而言,其中一种策略就是雇用全职工程师和产品经理,可以通过 DAO 治理代币来直接激励他们 (同时确保这种组织结构保持 DAO 的去中心化治理和运作)。通过确保那些为 DAO 工作的人能够在 DAO 的资产中获得越来越大的份额,可以在早期代币持有者和那些从事 DAO 日常管理的人之间创建一个稳定的平衡。

最后一种 DAO 是游戏公会,这种 DAO 有自己的文化、激励模式和治理结构,这是游戏部落 (一群玩家组成的战队) 的 DAO 化版本。这些去中心化的工会以集体的方式拥有 游戏道具和/或收藏品 (NFTs),并共享使用权和出售时所得收益。

与传统的玩家公会不同,Axis Infinity 等区块链游戏中的「边玩边赚」机制能够鼓励玩家之间的合作策略和收益共享。这些机制让游戏公会更像 DeFi DAOs,即参与网络可以获得奖励,同时也可以提升该网络的前景,但网络的治理并不那么依赖于纯粹的经济指标,而更多的是依赖于游戏表现和社交指标。这些 DAOs 值得关注,因为随着它们的发展演变,它们可能会找到新的机制,以其他 DAOs 未曾使用过的方式来增加自身的去中心化。

04. 何时需要 DAO

DAOs 的普遍增长和一些最具创新性的 DAOs 的巨大成功,不可避免地使得人们认为,实现发展和推动强健的网络参与度都需要 DAO 结构。在市场情绪高涨时期,市场力量使人们很容易认为每个组织、社区或项目都需要一个 DAO,就像我们在 2017 年 1CO (首次代币发行) 繁荣时期看到的 Crypto 代币兴起一样。

但这并不一定正确。当与管理、安全性和风险相关的治理负担,能够比由于需要成员们参与每一项决策制定而产生的协调成本的自然增长更快地减少时,DAO 才能运行得最好。这就是为什么协议构建者在决定是否组建 DAO 时,评估组织的真正目标是很重要的。

对于所有 DAOs 来说共同的治理领域包括:

集体资产的所有权和管理。DAO 的金库和资产负债表应像去中心化的公司一样发挥作用,考虑资产和负债、流动性、收入以及在何处分配财务资源。

资产的风险管理。波动性、价格和其他市场状况需要持续监控。

资产策展。从收集的艺术品到借贷的抵押品,所有 DAO 资产都应该受益于围绕策展的目标和流程。

只有当清楚地知道社区需要所有这些治理领域时,才应该组建和形成一个 DAO。

需要注意的是,虽然某个 DAO 可能只专注于这些活动的一个子集,但它确实需要提供所有这三个功能。例如,假设一个文化类 DAO 拥有一项资产,该 DAO 突然有机会从中赚取收益,如果该 DAO 在此之前完全忽略了风险管理 (例如,只专注于资产策展),那么它在出售该资产时会面临资产风险管理方面的挑战。

此类事件中最突出的例子之一是 PleasrDAO 以 2.25 亿美元出售了 $DOG 代币,这些代币中的每一枚都代表了原始的 Dogecoin (狗狗币) 图片 NFT 的部分所有权。但在此之前,PleasrDAO 只专注于资产策展,而忽略了风险管理问题。由于需要通过 Sushi 的 Miso 平台发布该代币,这迫使 PleasrDAO 需要去了解不同的代币分配机制和经济学,尤其是在 NFT 碎片化市场结构刚刚起步的情况下。此外,PleasrDAO 还必须通过建立一个社区发展基金,以确保社区成员正在感受到对该 NFT 的所有权。

上图:基于 DogeCoin (狗狗币) 原型图片的 NFT 被 PleasrDAO 以 1696 ETH 的价格购买,随后 PleasrDAO 通过  Fractional Art 平台将该 NFT 进行了碎片化并铸造了代表该 NFT 所有权的 170 亿枚 DOG 代币 (ERC-20),并在去中心化集资平台 Miso 上拍卖了该代币总量的 20% (近 340 万枚 DOG 代币)。PleasrDAO 仍然保留着大多数 DOG 代币的所有权。

PleasrDAO 案例的教训是,DAOs 将需要随着其活动的变化而增加新的集体技能和治理过程,成功的 DAOs 需要迅速意识到自身的缺点

05. 三个关键的治理领域

处于不断增长的 DAOs 可能会达到这样的程度:它们的社区需要能够满足所有这三个关键治理领域的治理结构。下文中,我将分别对这三个治理领域进行详细介绍,以帮助 DAO 构建者/协议开发者清楚地明确如果他们想构建一个成功的 DAO,他们应该把重点放在哪里。

1) 集体资产管理

所有 DAOs 都有一些初始资本,包括 DAO 智能合约持有的治理代币和用于购买治理代币的资产。例如,如果一个 DAO 一开始铸造了 1000 枚治理代币,并以 100 ETH 的价格将其中 500 枚出售给创世成员,那么该 DAO 的初始金库就是由 500 枚治理代币和 100 ETH 组成。

然而,随着 DAO 在用户或积累的现金流方面的增长 (比如 Compound),社区就需要像公司管理资本一样对这些资本加以管理,因为公司治理的最佳实践很适合 DAOs,尽管与此同时增加的难题是隐私性的减少。

2) 风险管理

由于 DAO 的资产负债表通常由风险资产组成,因此管理好 DAO 的货币敞口以保障未来业务的资金来源就显得尤为重要。许多 DeFi DAOs 和 NFT DAOs 拥有由数亿或数十亿美元资产组成的金库,这些资产被用于资助开发和审计,在底层协议失败时提供保险,并用于用户增长和收购方面的支出。为了实现这些目标,DAOs 需要管理其金库,以满足特定指标或关键绩效指标(KPI),例如,“我们能否在这些资产价格下降 95% 的情况下生存下来?”或者“如果我们通过持有的资产获得 X% 的利息,我们还能购买高价值的 NFTs 吗?”

最近有一个例子可以说明这一情况:最近,去中心化货币市场协议 Aave 的网络参与者发现了在该协议中使用 xSushi 作为抵押品的潜在漏洞,原因是预言机出现了错误报价 (CREAM Finance 协议就是由于预言机定价漏洞而被攻击者窃取 1.3 亿美元)。链上风险管理模拟平台 Gauntlet 通过运行模拟来评估了该威胁,并发现在当下的市场条件下,潜在的攻击者不可能成功地操纵 xSushi。作为一项额外的预防措施,Gauntlet 在 Aave 治理中提出了一项提案 (见下方截图),禁止某些类型的借款以降低风险,该提案得到了参与者的压倒性支持。(Aave 的 DAO 是 Gauntlet 平台一个客户。)

上图:Gauntlet 在 Aave 治理中提出的一项提案,该提案提议禁止某些类型的借款以降低风险

这里面有三个关键的治理因素在发挥着作用——一个能够及时察觉潜在风险的社区通过建模来评估该威胁的真正性质,以及一个准备好进行必要更改的治理过程 (特别是在安全性方面)。

3) 资产策展

进行资产策展 (asset curation) 最自然的地方是 NFT 收藏品 DAOs,比如 PleasrDAO。这些DAOs 与生俱来地充当了艺术和文化的策展人,同时使用 DAO 治理代币来对添加或移除资产进行投票。

但是,DeFi DAOs 也经常面临这个问题。虽然有些 DeFi DAOs 机制 (如 Uniswap) 允许人们 (流动性提供者) 以无须许可的方式添加资产 (也即任何人都可以使用某种全新的资产来创建一个交易池),但其他使用杠杆机制的 DeFi DAOs 却并不允许人们这样做。特别是,像 Aave 和 Compound 这样的借贷协议是通过治理来决定哪些资产可以添加或移除,这是因为必须为每种资产选择许多参数,包括保证金要求、利率曲线、保险成本等,而这些决策对协议的安全性至关重要。

让我们提供一个简单的例子来说明可能出错的情况。假设我们铸造了一种新的资产 TarunCoin,并且我掌握着该币的全部供应。现在假设我创建了一个借贷池,允许我通过抵押 TarunCoin 并以其 100% 的价值来进行借款。如果我控制着 TarunCoin 的美元价格 (例如通过一个 Uniswap 池,我是这个流动性池的唯一流动性提供者),那么我就可以使 TarunCoin 的市值非常高 (比如 1 亿美元),然后使用 TarunCoin 来借入 1 亿美元。然而,由于 TarunCoin 几乎没有流动性,我的贷款不可避免地出现违约,而那些借款人就会因此蒙受损失。

这个例子说明,资产的质量——通过代币分配、流动性/价格操作难易度,以及历史交易量来衡量——对于利用杠杆机制的 DeFi DAOs 而言至关重要。由于许多此类 DAOs 将其治理代币用作隐性或显性的保险基金,以便在不利事件发生时能够偿还借款人,因此,对于此类 DAOs 而言,在选择资产方面保持谨慎并为其制定合理的参数至关重要,这一点至关重要。而随着这一领域的演变,保险产品很可能有助于改善和减少 DeFi 中资产策展所需的治理干预量。

06. 运行 DAO 的方法

基于如上信息,随之而来的一个自然问题是:“我们的社区如何才能真正做到这三项任务?我们的社区只关心 X 啊。”随着 DAOs 的成熟,已经出现了一个不断发展的公司和协议生态系统,旨在通过自动化分析和监控,密切地帮助资产和参数的选择,减轻 DAO 成员的负担。还有一些策略可以降低 DAOs 内部的复杂性,并更有效地分配资源。以下是 DAOs 可以采取的一些步骤:

1) 使用治理工具

首先,出现了一些量化工具,可以让社区将 DAO (以及可能的相关协议) 的风险根据市场条件进行可视化,并让 DAO 成员理解对降低抵押/保证金要求或提高利率进行投票意味着什么。这为 DAO 金库所存在的风险提高了整体透明度,并允许社区更新金库的组成情况来满足特定的 KPI。

例如,借贷协议 Aave 和 Compound 金库所持有的数十亿美元资产,有效地充当了底层借贷协议的保险后盾。例如,如果出现大规模的价格波动,导致大量贷款违约,给协议中的放贷人 (lenders) 造成损失,此时这些 DAOs 可以使用它们的金库来弥补贷款人的损失 (比如,Compound 协议中的 DAI 清算事件)。

调整协议中的参数 (例如调整抵押品需求),有助于减少 DAO 不得不将资金花在此类突发事件上的可能性。下面是 Gauntlet 平台的一个实时仪表盘例子,用于监控 Aave 上的不同市场的风险 (披露:我是提供这些服务的 Gauntlet 平台的创始人和 CEO)。这些用于量化风险的工具包含了将算法交易和人工智能 (如 AlphaGo) 中使用的工具结合起来的模拟工具。

构建和运行 DAO:为什么治理很重要?

撰文:Tarun Chitra,Gauntlet 创始人兼...

关于我们

支持iOS|android|windows等平台

  • 用户支持
  • 帮助中心
  • 服务条款
微信二维码
欧 易 (OKX) 数字货币交易平台 Powered by OKX
QR code