构建分散式系统带来了传统软件开发中不常见的新挑战。 “快速行动,打破常规”的格言已经不再是一个可行的策略,因为我们已经一次又一次地看到,即使是一个关键的安全漏洞,也很难从一个项目中恢复。此外,这些协议的成功取决于经济激励措施的设计,鼓励不同类型用户之间的均衡参与和增长,从而创造一个最终将产生价值的多边市场。这些奖励结构一旦部署就很难修改,因为没有集中的进行管理。
Gauntlet正在构建一个基于代理的仿真平台,以帮助开发人员验证他们的协议设计,理解不同参数之间的权衡,并确保应用程序能够抵御坏角色的攻击。我们最近发布了另一篇博客文章,对我们的系统进行了更全面的概述。
这篇文章将重点介绍从2019年初开始的Gauntlet和computable团队的一些经验教训,当时我们在Gauntlet平台上合作设计了一个定制场景来优化他们的储备合同参数。通过利用我们的工具和仿真结果,Computable团队随后能够快速迭代并验证在最初执行合同时对一些激励机制的更健壮的设计。仿真分析一直是Computable测试和改进协议计划的一部分,他们选择使用Gauntlet平台来实现这个目标。
注意:Computable刚刚发布了一个新的白皮书,其中包含了许多机制和术语的更改。本文所描述的仿真模型是在原模型的基础上建立的。为了避免混淆,我们将在下面列出一些差异。
可计算的协议
Computable的目标是创建一个分散的数据市场,鼓励大规模的高质量数据集的管理,同时围绕数据隐私和使用提供信任和透明度。该协议的目标是要足够灵活,以适应不同行业应用程序的数据市场。例如,某些市场可能拥有少数大型参与者拥有大部分相关数据的特性,而其他数据市场的成功可能取决于许多个人用户在一段时间内的贡献。每个数据集都有一个与之相关联的唯一代币来激励成长,网络中的参与者或“代理”被分为以下角色:
· 买方-表示对数据的需求。付费查询数据集
· 数据信任 – 提供用于执行查询的计算资源
· 制造商 – 以上市形式向数据市场提供数据销售
· 赞助人 – 提供初始资本,以激励制造商提供数据
确定列表是否有效的机制类似于Token-Curated Registry(代币注册表)。TCR投票的动态可以类似于其他区块链系统,如权益证明共识。然而,在这篇文章的其余部分,我们将重点关注与可计算协议更具体的宏观特性。
粘合曲线
由于每个数据集都有自己的代币,所以存在一个引导问题,因为这些代币的流动性有限,而且很难估值。粘合曲线是一种在买入/卖出时确定代币价格的合约,并作为代币的自动做市商,以鼓励早期参与。下图说明了如何使用粘合曲线发出代币。请注意,有单独的买入/卖出曲线,其中卖出价格低于买入价格,以阻止短期价格操纵,同时允许有机价格发现和流动性,因为市场参与者可以同意在两条曲线之间以任何价格交易代币。
Computable使用粘合曲线在客户将加密货币存入储备时发出代币,在向制造商发出代币以提供数据时发出代币。在本文的其余部分中,我们将使用术语“网络代币”来表示存储在储备中的代币。实际上,网络代币可以是原生于可计算协议的代币,并在多个数据市场之间共享,也可以是原生于底层区块链(例如ETH)的代币。
在此分析中,我们使用的线粘合曲线定义如下:
support_price = conversion_rate + conversion_slope * reserve
withdraw_price = reserve / total_supply,
其中support_price为买入价格,withdraw_price卖出价格,reserve为粘合曲线上锁定的货币总价值,total_supply为粘合曲线上发行的市场代币总数。
代理模型
买方——我们对查询数据的总体需求建模。这种需求是通过在每个模拟时间步骤中对查询进行支付的形式实现的。需求是数据集中列表数量的函数,具有预定义的上限(市场大小)和每个时间步长的有界增长率。查询数据(以网络代币形式)的费用分成如下:
· datatrust_rate_network——以网络代币形式表示的datatrust代理查询费用的百分比。
· reserve e_fee_network—以网络代币的形式进入市场合约准备金的百分比,它增加了支持和撤回价格。
· maker_fee_network—在网络代币中列出所有者的百分比。在我们的模型中,这部分在所有清单中平均分配。如果上市公司不再为制造商所有(见下文convert_listing),那么其股票将进入市场储备。[注]:该参数已从协议中删除,制造商付款现在只使用市场代币。
· maker_fee_market—在市场代币中列出所有者的百分比。该组件在所有列表中平均分配,并被锁定(参见下面的convert_listing),以鼓励长期的创客参与。这部分费用是通过按粘合曲线的支持价格铸造(创建)市场代币来支付的,而且是通货膨胀的,因为它在不增加准备金的情况下增加了市场代币的供应。
Datatrust——如果他们收到的费用大于他们计算的边际成本,这些代理将处理查询。
Maker—我们假定制造者的数量是有上限的(即只有那么多的参与者拥有高质量的数据可贡献给数据集),并且希望列出其数据的制造商的数量取决于上市的预期用途。我们还假设每个制造商最多只能有一个上市。制造商可以采取以下行动:
List——申请在数据集中列出,以获得查询收入的一部分。被列出的预期效用可以建模为:
(maker_fee_network + maker_fee_market * demand_t) / num_listings_t * DF + listed_reward * divest_price_t - listing_cost,
T是查询收入的时间,num_listings_t是t的清单数,,DF是代理应用于未来收益的折现因子,listed_reward是上市时收到的市场代币数量,divest_price_t是粘合曲线给出的售价,listing_cost是与创建列表相关的开销或反sybil成本。
· convert_listing—制造商可以将上市的所有权转移到市场合同,以解锁上市中的市场代币(fromlisted_reward和maker_fee_market),但需要放弃未来的查询收入。如果锁定代币的投资回报率(ROI)低于代理的convert_roi,制造商将这样做。制造商的ROI可以通过在一个观察窗口上使用所收到的股息(包括市场代币)的价值,除以锁定的市场代币的市场价值,并转换为年化回报来估计。[注]:该函数不再是协议的一部分。目前的协议不再要求制造商放弃上市公司的所有权。
Patron -可以通过绑粘合曲线购买或出售市场代币:
· support—以粘合曲线给出的support_price购买代币。如果取款价格的风险调整回报率大于代理的support_roi阈值,并且预期的盈亏平衡时间(因为support_price_t》取款价格)小于代理的support_breakeven时间,那么客户将购买代币。
· withdraw-以粘合曲线给出的提取价格出售代币。如果取出价格的风险调整回报率低于代理取款的roi阈值,客户将出售代币。
模拟环境
我们的仿真平台是围绕一个基于agent的模型构建的,在这个模型中,用户可以指定网络的初始条件,包括agent行为的分布和特定于agent的参数。我们通常遵循拜占庭-利他-理性(BAR)模型来描述代理行为。模拟的每个时间步长包括:
· 更新环境状态变量
· 引入新的代理
· 为正在考虑的每个操作评估代理实用程序函数,并执行那些具有最高实用程序的操作
对于以上的分析,我们做出如下假设:
· 买方的最大需求(即市场规模)是每年100,000个网络代币
· 为了提高性能,制造商的最大数量为25,每个制造商只能有一个清单,而listed_reward是3个网络代币
· 有5个初始用户,每个用户贡献1000个网络代币
· 80%的创造者是理性的(上面描述的行为/效用),剩下的20%是利他的(不会尝试convert_listing)
· 我们运行每个模拟场景5年,即1825个时间步长
发现
制造商的补偿
我们对maker_fee_network和maker_fee_market的不同值进行了仿真,以探索不同的收费结构对创客行为的影响。reserve e_fee保持不变,查询收入的其余部分支付给datatrust代理。回想一下,maker_fee_market是查询收入的一部分,它以市场代币形式支付,并锁定起来以鼓励长期参与。在下面的图中,每个方块代表了模拟的独立运行,而颜色代表了rational制造者所捕获的查询总收入的百分比。
一些观察:
· 当maker_fee_network + maker_fee_market过高时,网络无法创建值,因为datatrust_fee不够高,无法覆盖运行计算的边际成本。
· 当maker_fee_network + maker_fee_market过低时,该网络也不能产生显著的价值,因为创客会快速转换他们的列表,或者一开始就没有足够的动力来上市。
· 在这些参数化下,maker_fee_market似乎对制造商没有长期的好处。在保持maker_fee_network不变的情况下,增加maker_fee_market对增加制造商效用的影响很小,而且在某些情况下,效用实际上会略有下降。
从长远来看,maker_fee_market的增长一般不会给制造商带来多大好处,这一结果肯定有点违反直觉。经过仔细观察,我们意识到这样做是有道理的,原因如下:
· 一旦买方需求趋于稳定,maker_fee_market将继续增加锁定在上市中的代币的价值,同时营收保持不变。这意味着上市公司的投资回报率将继续下降,在某一时刻,制造商将转换上市公司,用未来的收入换取流动性。
· maker_fee_market是通货膨胀(增加市场代币供应,但不增加储备)。在随后的模拟中,当制造商拥有大部分市场代币时(相对于初始用户),每个制造商的保留所有权所占的比例不会增加太多。
· 大多数粘合曲线参数化的结果是,当供给较大时,支撑价格显著大于退出价格,因此转换效率较低,导致maker_fee_market对maker ROI的总体贡献相对于tomaker_fee_network较小。
在这三个因素中,我们怀疑粘合曲线的形状可能影响最大,所以我们决定进一步挖掘。
在原来的粘合曲线公式中,support_price与取款价格的关系不是很紧密,所以我们决定更新support_price的定义。我们现在将曲线定义为:
support_price = conversion_rate + support_multiplier * reserve / max(1, total_supply)
取款价格=储备金/总供应量
我们重新运行上述分析,得到如下结果:
现在看来maker_fee_market参数实际上是有用的!增加maker_fee_market实用理性的制造商,我们会看到对于一个给定的制造费用分配(maker_fee_network + maker_fee_market),最好是平分市场网络和组件之间的非纯粹的代币。注意,在使用市场代币支付时,制造商和用户之间仍然存在权衡,因为maker_fee_market会稀释初始用户。
粘合曲线分析
该协议的成功与否,取决于最初的赞助者向储备基金投入大量资金,以激励制造商列出数据。如果提现价格超过最初的投资价格,顾客最终会获利。我们对新的粘合曲线的参数conversion_rate和support_multiplier进行了仿真。在下面的图中,每个方块代表模拟的独立运行,颜色代表初始用户获取的查询总收入的百分比。
一些观察:
· 高support_multiplier有利于初始用户,因为它限制了在生成市场代币时的稀释
· 当conversion_rate过高时,网络在我们为初始用户设置的时间限制内不能生成足够的值,使其在初始存款上实现收支平衡
· 当conversion_rate和support_multiplier过低时,网络无法生成任何值,因为首先没有足够的动机促使制造商加入
结论
Computable的模拟工作促使对初始协议设计进行了许多更新,包括改进的粘合曲线和简化的Maker payment和convert_listing接口。在此过程中,我们还确定了要优化的关键参数、与不同参数化相关的权衡,以及完全不同的机制可以更有效地实现预期结果的领域。希望这是一个令人信服的例子,让你能清楚的知道模拟是如何指导协议设计过程的!
在单一数据市场的背景下,仿真允许我们将机制设计分析为一个分布式约束优化问题。更广泛地说,该框架可以生成一组参数和初始条件的参考集,这些参数和初始条件是为具有各种不同属性和行业应用程序的数据市场提供服务的。我们的目标是设计一个最大化买方需求的系统,同时以一种统计上可验证的方式保持数据提供者、制造商和用户之间的公平激励。
经济激励对于区块链应用程序的长期安全性和成功至关重要。在不进行仿真的情况下对激励机制设计进行推理是很棘手的,因为网络的突发性很难从局部变化中预测出来,而且为了得到易于处理的结果的解决方案,人们常常对用户行为做出过于简单的假设。基于代理的模拟可以是一个有价值的工具,帮助开发人员验证安全性假设,并了解如何随着时间的推移为网络参与者创建价值。
评论
查看更多