原文:《Doing “Proof-of-Reserves” the Right Way

作者:0xfishylosopher,Web3.com Ventures

翻译:PANews,王尔玉

引言

过去几周,加密世界一片混乱。FTX崩盘后,整个行业都在反思,并呼吁中心化交易所证明未挪用用户资金:即所谓的“准备金证明”。本文将首先概述加密货币交易所为何需要“准备金证明”,然后会深入分析如何利用Merkle Trees(默克尔树)和zk-SNARKs等技术来实现这一证明机制。

“准备金证明”的基本原理

我们为何需要中心化交易所?

FTX的轰然倒塌令人始料不及。将这家中心化交易所的破产比作“加密行业的雷曼时刻”并不为过。2022年1月,FTX估值320亿美元,是加密货币交易量最大的中心化交易所之一。而到了11月初,当人们开始质疑FTX资产(主要体现为其原生代币FTT)的真实价值后,这家交易所遭遇了流动性危机。FTT的价格几乎一夜间暴跌逾90%,债权人争相撤资,风卷残云后,FTX黯然破产。

可想而知,这场风暴也冲击了人们对加密货币市场的信心,尤其是对中心化交易所(CEX)。事实上,CEX在加密世界的地位颇为尴尬,整个行业在意识形态上推崇去中心化的无需信任的模式,而CEX本身却是基于信任的中心化实体。虽然市场上存在许多去中心化交易所(DEX),它们的流动性和多样性也不亚于中心化交易所,加之中心化交易所存在种种显而易见的缺点和风险,但市场对CEX仍有持续的需求。

从根本上说,中心化交易所是新来者涉足加密领域的主要门户之一。要在Uniswap v3等DEX上完成价值5美元的ETH兑(封装)BTC的加密货币交易,用户需要采取多个步骤,并具备各种技术知识。首先,用户要了解并安装一个钱包,如Metamask。这个过程涉及12个词的助记词,针对不同区块链和不同代币的账户管理等,仅这一步就足以令普通用户却步。接着,用户需要使用第三方供应商(如MoonPay)将信用卡里的钱存入钱包。这一步也需要针对第三方供应商进行注册、KYC等,另一个麻烦是还要知道自己的64位钱包地址。用户还要了解所有步骤的gas费、封装币、集中流动性等。整个过程对新用户极不友好。再对比一下CEX上的购买体验:用户只需通过熟悉的过程完成注册和KYC,然后刷信用卡,选择“ETH/BTC”币对,点击“购买”即可。这对新用户非常友好。

此外,中心化交易所不仅服务于个人用户,也服务于传统金融公司和企业等机构客户。除易用性外,机构客户还需要伴随中心化的可靠性和服务支持,以便在需要帮助时可以求助,在遭遇过度剥削时可以起诉责任人。所有这些都不是DEX能比拟的;Web 3要想成为主流,需要传统机构的支持,也需要易用的新手入场机制。因此,我们无法用去中心化交易所取代中心化交易所。事实上,FTX崩盘也并未显著增加所谓“逃离”CEX的加密货币数量。正如Chainalysis所指出的,资金离开CEX后,最主要的目的地其实是其他CEX。

这些都指向一个不容辩驳的结论:尽管中心化交易伴随各种潜在的欺诈和风险,但放弃CEX并非解决办法。

为何CEX需要全额准备金作为支撑?

综上所述,我们不能没有CEX,哪怕是在FTX崩盘等灾难发生之后。但为什么需要全额准备金支撑呢?为什么CEX不能像银行那样依赖于部分准备金呢?

简言之,加密货币交易所的运作方式与银行不同。首先请考量一下银行在经济中发挥的作用。从根本上说,银行是一个汇集借款人和贷款人的平台。假设Alice向银行家Bob存入1000美元(存款利率为5%),准备金率为20%。虽然Bob向Alice承诺她随时可取回,但Bob实际上只会保留200美元作为准备金(20%),以防Alice想提取一些钱来支付账单,但他会赌Alice不会想立即取回全部本金。与此同时,Bob可将剩余的800美元以10%的利率借给企业家Carol。假设Carol创建了一座新鞋厂并卖出了足够多的鞋子,偿还了800美元的本金和80美元的利息。在收到80美元的利息后,Bob会将其中50美元转到Alice的账户,自己保留30美元。

FTX暴雷后,如何信任一家中心化交易所?

银行的部分准备金示例。

理想情况下,所有人都是赢家:Alice得到50美元,Bob得到30美元,Carol得到一座新鞋厂。更重要的是,经济也是赢家:Carol能利用鞋厂生产更多鞋子,但如果Alice选择把1000美元藏在床底下,Carol也就没钱建厂了。经济学家口中的“银行创造货币”正是基于这一点,银行通过借贷创造出必要的新资本,以帮助Carol这样的企业家创造更多经济产出。银行创造的具体货币数量=(存款总量)×(1/准备金率),“1/准备金率”也被称为“货币系数”。准备金率越低,银行创造的经济产出价值越高,同时,银行现金不足以满足提款需求的风险也越高。反过来,如果要求Bob维持100%的准备金率,Carol就会没钱来建设新鞋厂,经济就会停滞,Bob则要自掏腰包支付Alice的存款利息。所有人都是输家。综上所述,由于经济活动主要由借贷提供资金,银行对于保持健康的经济运转和增长至关重要。

银行通过实施部分准备金来“创造货币”并刺激经济增长。但加密交易所并无类似机制。币安、Coinbase或FTX等中心化交易所无法为经济赋能。用户(通常)不会得到任何利息,加密货币交易所通常不会像传统银行那样从事借贷活动。它们的行为更像证券交易所,而非银行,它们只是将持有现金的人与持有加密货币的人联系了起来。中心化交易所只是顺便帮你保管资金(作为托管人),因为追踪自己的加密货币很麻烦(特别是经常买卖时),且存在技术难度。而对于法币,将现金锁在保险箱里并不是太难。

CEX不是银行:CEX最重要的作用是促进资金的交易和提取,而非为了刺激经济生产而进行的借贷。更重要的是,实施部分准备金模式并不能真正使CEX交易者像传统银行储户那样受益。银行需要部分准备金才能充分发挥其重要的经济作用,而加密货币交易所并无同样的需要。所以对于中心化加密货币交易所而言,全额准备金带来的信任和安全性的优势远远超出部分准备金模式可能带来的任何其他优势。因此,中心化加密货币交易所应当采用全额准备金模式。

实施准备金证明机制

上文已经厘清了为何中心化加密货币交易所应当采用全额准备金模式。现在我们需要探究如何部署这一模式,特别是如何以Web 3的原生方式部署,换句话说,如何利用Web 3原生技术而非传统的审计模式来进行部署。全面的“准备经证明”包含两个部分:负债证明和资产证明,以证明CEX资产等于(或大于)负债,藉此,当所有用户要从一家交易所提取所有资金时,交易所才能具备充足的偿付能力。

负债证明

先来看负债证明,即证明用户存款被准确记录在了交易所中。毕竟,我不希望存了1 ETH进币安,想取时却被告知没有被记录在系统内。

提供完整负债证明的最简单方法就是发布每个人的资产的“账户、价值”对。但这会引发隐私问题:人人都能看到其他人有多少钱。一种边际改进方法是仅发布随机的帐户哈希值及账户余额。但所有余额的泄露仍会引发隐私问题。而且所有交易变化(可以说是该交易所的所有交易)也可能泄露给攻击者。

在实际的负债证明中,我们需要向每个人保证他们的余额保存在交易所中,同时不能向任何具体用户泄露其他用户的余额或任何交易信息。如何做到这一点?这里就要用到默克尔树了,这是Web 3中最重要的数据结构之一。

默克尔树(又称二叉哈希树)能通过一种简洁的方法证明列表中存在某一个元素,同时尽量不提供关于所有其他元素的信息。它首先会将列表中所有数据的哈希放在一个二叉树上,作为叶节点,每个父节点包含两个子节点的哈希之和。树的顶端是一个向所有人公开的根节点。要证明具体叶节点(如我的账户)保存在了某个列表(如币安账户列表)中,币安会为我提供一个简短证明(大小为“O(log(n)”),即默克尔证明,它会证明具体的密钥节点存在于树中,藉此,我将能重建并验证树的根。

FTX暴雷后,如何信任一家中心化交易所?

默克尔树负债证明。来源:https://vitalik.ca/general/2022/11/19/proof_of_solvency.html

在下面的例子中,有8个用户拥有不同数量的ETH。假设我是Charlie,我的余额存在币安上,而币安使用默克尔证明部署了“负债证明”机制。币安会发给我一个默克尔证明,包含三个蓝色节点的哈希值。然后我可以使用默克尔树公式(“parentValue = hash(leftValue, rightValue)”)对我自己的值进行哈希处理,将其依次向默克尔树的顶端添加,最终到达根节点。如果得出的根节点值与公布的值相同,便证明我的钱确实存在币安。

在具体实践中,利用默克尔树实现负债证明的方法可谓“老而弥坚”。虽然它已经诞生了一段时间,但最近大部分关于“准备金证明”的呼吁基本无一例外,仍在呼吁交易所使用默克尔树来提供存款证明。正如V神所说:“默克尔树技术基本能发挥出负债证明机制的最高水平。”除默克尔树外,也可以利用zk-SNARKs这一零知识证明(ZKP)来实现更强大的负债证明。zk-SNARKs的基本用途是提供一种简洁证明,以证明“某物”存在,同时无需透露“某物”的具体细节。在负债证明中,这里的“某物”即账户余额。由此,利用ZKP,我们可以在不损害隐私的前提下证明交易所拥有我的账户余额。

资产证明

负债证明只是其中一面。要证明中心化交易所由全额准备金支撑,还需证明其资产大于或等于负债。问题是你如何证明你拥有这些钱?对于法币,最简单的办法就是“拿一箱钱来”。对于加密货币,相应的办法是将交易所资金发送到一个公开同意的钱包,让所有人都能看到里面的钱。V神还指出,如果你不想支付在链上转移现金的费用,也可以发送一个链下的签名消息。

当然,现实情况没这么简单。这一资产证明方法的主要问题是,大部分交易所的余额都存储在链下的物理隔离的冷钱包中。这些冷钱包主要用于保障资金安全:从一台未连网的计算机上窃取私钥要难得多。冷钱包通常会离线生成并签署交易,再通过二维码传输至网络上。因此,哪怕从一只冷钱包中提交交易(更确切地说,任何信息)都会很麻烦。更何况,交易所通常要为每种不同的代币及每条不同的区块链配置大量冷钱包。如果每当有用户希望交易所提供资产证明,都要发送一遍所有权证明消息,这项任务会过于昂贵且不可持续。

此外,虽然交易所可以向所有人公开他们掌控的地址以及这些地址中有多少资金,但这种资产证明方式无法显示资金来源。假设我的资产负债表上只有80 ETH,但储户存入了100 ETH。当我需要提供准备金证明时,我完全可以借入20 ETH(通过朋友或银行),以补齐100 ETH,并将这笔钱发送到商定的钱包,然后吹嘘自己是一个多么负责任的交易所。宣传完毕后,我可以悄悄归还那20 ETH(或者慢慢归还,以与用户提款混淆起来),并重新实施部分准备金机制。使用一次性准备金证明钱包的情况尤其难以避免这方面的担忧。

V神也指出,解决这两个问题的最简单方法是使用一些长期地址来存储你的所有资金。你只需要证明一次这些地址是属于你的,其余时间,人们只需监控进出这些地址的交易,即可追踪你的资金动向,并检查这些资金是否符合你的负债证明默克尔树中所体现的负债。但作为持有数十亿美元用户资金的交易所,将所有储蓄存在几个永不改变的地址中,恐怕也不合理。这无疑会带来安全问题,成为攻击者垂涎的靶子。

可见,资产证明并不像乍看起来那么简单。虽然可以采取一些技术性措施,例如公开地址,甚至公开地址的零知识证明,但交易所似乎总有办法动手脚(比如借钱的例子)并欺瞒消费者。也就是说,至少就资产证明而言,单纯的技术手段目前只能做到这一步。最终仍然需要传统的审计师来切实验证资金来源是否正当。

结论

中心化交易所有存在的必要,但它们要想蓬勃发展,必须取得信任,并保证不会重蹈FTX崩盘的覆辙。而全额准备金是确保这一点的重要步骤。正如币安首席执行官CZ所说:“银行的运营仰赖于部分准备金,但加密货币交易所不应如此。”

FTX暴雷后,如何信任一家中心化交易所?

币安首席执行官赵长鹏(CZ)称加密行业需要准备金证明。来源:https://twitter.com/cz_binance/status/1590055819416330240

FTX崩盘以来,许多人或明或暗地指出,中心化加密货币交易所可通过默克尔树等措施实现纯技术性的“准备金证明”,使审计机构不再有存在的必要。“准备金证明”一词也通过呼应“工作量证明”和“权益证明”,暗中强化了这一意味。但现实远没有这么简单。

纯粹客观的算法,例如使用默克尔证明,绝对有助于增进对于交易所偿付能力现状的保障(例如表明它已记录下所有用户存款)。但通常而言,这还不够。正如我们对“资产证明”的分析所示,聪明(和邪恶)的交易所能轻易绕过这些本可以证明其偿付能力的算法。归根究底,有偿付能力的交易所需要同时提供资产和负债证明。因此仅强调默克尔树能解决所有问题,往好了说是误导,往坏了说就是有意欺骗。本文的关键结论是,即使在Web 3的技术治理的世界中,仍需要人的参与,来监管不法行为。尽管相比传统金融领域,审计的重要性已有所降低,但审计师这一角色仍必不可少。

由此来看,会计师的日子还长着呢。