本文内容由Dexaran与Polar.io、EOS Asia 共同合作分析整理。
2019 年 12 月 21 日,为解决现行EOS资源模型的发展限制,EOSIO推出了一个重要的资源分配修改提案。这个提案不仅对现行的EOS资源模型做了不少改动,且目前已进入投票测试阶段。
新的资源模型有哪些新玩法?它能够彻底改变旧资源模型的弊端吗?又将会为EOS生态带来哪些改变?
精彩内容,跟着EOS Go一起来看一看吧!
像Windows、安卓和iOS一样,EOSIO是一个由block.one团队开发的区块链底层技术架构,类似区块链中的操作系统,使得更多的开发者能够基于EOSIO平台快速方便的构建分布式应用软件(dApp)。
目前EOS一共有三种资源:RAM、CPU和NET。
RAM属于消耗型资源,用一点儿少一点儿,因此采用购买的方式,可买可卖。
CPU和NET属于占用型资源,用完后可释放,因此采用抵押的方式,抵押EOS获取资源,用后可赎回EOS,不产生费用。
用户创建EOS账号后,该账号会拥有少量基础资源:0.1 EOS CPU、0.1 EOS NET和约3kb的RAM供大家操作使用。EOS上的所有操作都需要资源,但如果你想进行更多操作,就需要投入一些EOS获取更多资源。
CPU和NET以过去3天的平均消耗(以微秒ms为单位)来衡量。 当您发送操作或事务时,CPU带宽会暂时消耗,但随着时间的推移会减少到0。事务运行时间越长,它将消耗的CPU带宽就越多。 可以随时赎回EOS,但是有三天左右的赎回期。
这三种资源中,CPU是最引人关注的,因为它天生脾气“爆”,动不动就价格剧烈波动,不仅开发者们苦不堪言,甚至影响了许多用户的日常操作体验。
CPU之所以会动不动就价格波动,是因为EOS的抵押模式是按用户的CPU抵押量占全网总抵押量的比例来分配该用户可以使用的CPU量。
简单来说就是:
如果你想要获得更多的CPU,你就得抵押更多的EOS;当大家都需要CPU的时候,大家都会抵押更多EOS,这样一来,CPU抵押量占全网的总抵押量比例上升,CPU价格上涨,你反而得不到更多的CPU。
越想得到就越得不到,说的大概就是傲娇的CPU。
另一方面,现行的资源模型会导致闲置资源的浪费。
比如说:
假设EOS主网上只有1000个EOS,一个大户质押了300个EOS获取CPU资源,那么这个大户就获得了整个网络资源的30%,但他一个人用不完这么多资源,主网中理论上也存在这些资源,但是没有被更需要的人使用,这些资源就白白浪费了。
EOSREX(EOS Resource Exchange),即EOS资源交易所。
用户可以在这里出租EOS给需要购买资源(CPU/NET)的人,并收取租息;资源租用者使用较少的EOS就可以租用大量资源(CPU/NET)一段时间(一般是30天)。
我们设计REX时使用的算法将价格提高到无穷大,因为可供租用的EOS的剩余供应量接近零。REX诞生的本意是想要降低使用EOS网络的成本,并将CPU和NET使用成本与EOS的资本减少/损失分离。但最近,REX陷入无法以任何价格租用EOS的情况,因为出于利益考虑,许多选择将EOS租出去的用户取出了他们的EOS。
我们大致算了一下:即使在“价格上涨到无穷大的算法”前提下,REX的实际年化收益大概为4%,这个收益率并不高,不足以激励EOS持有者参与REX获取收益。
因此,在EOS资源需求高涨的时候,EOS持有者们却没有足够大的动力参与REX,这样一来,EOS的资源问题也没有得到很好的解决。
在新的资源模型中,用户想要获取资源,就必须通过rentbw功能。下面让我一起仔细研究 一下此功能。
该提案主要有几点修改:
1、如果你想转账,必须租赁CPU,租赁价格基于CPU / NET资源的供求变化而变化。
2、如果你有闲置EOS,你仍然可以抵押,但是抵押的资源是放到租赁的市场中,你可以获得租赁的收益,收益包括短账号拍卖、RAM交易手续费、CPU租赁收益三部分收益。
3、之前的REX会转资源租赁市场,所有EOS持币者都必须强制使用REX(之前的不是强制使用的)。
该函数有6个参数:
const name& payer
:谁来为资源买单?类似于REX中谁支付租金。
const name& receiver
:谁获得资源?类似于谁在REX中收到资源。
uint32_t days
:资源租用的天数。时间范围由系统合同的rent_days变量确定。调用rentbw函数时,用户只需要使用此参数复制该系统变量的值。如果用户指定的值与系统合同中指定的值不同,则事务将失败。因此,如果系统合同仅允许用户租用30天,则用户只能在此处分配30天。
int64_t net_frac
:用户想要租用的总NET资源的比例。 该变量的10 ^ 15值将对应于rentbw系统管理的资源的100%。
int64_t cpu_frac
:用户想要租用的CPU资源总量的一部分,100%= 10 ^ 15。
const asset& max_payment
:付款人愿意支付的最高金额,代币将从付款人的代币余额中提取。
贷款到期后,资源将不再被委托。 取消授权不会自动发生,但是会在提交新贷款时以相同的操作检查并取消两个已过期的订单。值得注意的是,系统中还有一个rentbwexec参数,该参数还可以处理过期的贷款并将资源返还给租赁市场。
该提案的总体思路是使资源可供出租,以换取永久性的费用。网络利用率越高,租用新资源的费用就越高。
如本文所示,在每次使用率增加后,价格会立即上涨,但在每笔贷款到期后,价格会随着时间逐渐下降。
我们假设:
在提案中,价格(资源租赁的费用金额)与利用率u的关系为:
p(u)=最小价格+(最大价格-最小价格)*(u ^(指数-1.0))
其中最小价格、最大价格和指数等都是可配置的参数,并且u的区间是从0到1。
新模型是在系统智能合约中实现的(了解详情请查阅rentbw.cpp),它将成为EOSIO链上账号的一部分。该合同建议用户必须在指定时期(当前建议的30天)内租用资源,并支付指定费用,付款时会动态计算所需的费用金额。 然后,该费用将被引导到REX池,从而使EOS所有者能够从此新系统中受益。
用户必须提交交易以要求租用资源。由于费用是在请求处理时动态计算的,因此用户必须指定他愿意为给定的资源份额支付的“最大资源租赁费用”。 如果该费用足够,则将资源授予用户,并退还多付的金额,否则该请求将失败。
用户可以请求由Rentbw市场管理其可用资源的一部分,这部分的最小可用租金份额由rentbw_frac变量确定。
rentbw系统中还存在一个eosio.reserv帐户,用户可在此租赁资源,租赁期限到了之后,租用的资源将返回到eosio.reserv这个账号。
为了能让EOS资源模型能够平稳的从REX过渡到Rentbw,我们计划逐步减少用于Staking(质押)的资源,并将这些资源转移到Rentbw市场。
这项工作将通过智能合约进行:通过调整config_rentbw_function完成配置管理总网络资源的特定份额,在逐步实施期间,net_frac和cpu_frac表示调用操作时由市场管理的部分。
值得注意的是,Staking(质押)不会从技术上被排除在系统之外,但效率会降低,即为抵押分配的资源越少,为Rentbw市场分配的资源越多,用户获得1的CPU毫秒数就越少抵押的EOS。
若EOSIO的总供应量为1000个EOS
假设初始配置将10%的资源分配给rentbw,将90%的资源分配给Staking(质押)。
如果一个用户在REX系统中质押500个EOS的CPU时,通过上文公式计算,用户购买总Rentbw(0.5 * 10 ^ 15 frac_cpu)池的50%将获得总网络资源的5%,即每天1.2 CPU。
另一个用户为CPU投入了50个EOS,他获得了由权益模型管理的总CPU的10%,由(50/500 * 24 * 0.9 = 2.16)
计算得出,相当于每天2.16 CPU。
假设过渡的下一步是将rentbw的资源分配更改为30%,将70%的资源分配给Staking(质押)。
如果一个用户在REX系统中质押500个EOS的CPU时,通过计算可得用户每天将获得3.6个CPU小时,而另一个为CPU投入了50个EOS的用户,每天将仅获得1.68个CPU小时。
用户的心理都是逐利的:
资源租赁时间越短,EOSIO资源系统的压力就越大。
资源租赁时间越长,虽然理论上用户可以获得更多收益,但是一旦主网中出现更加有利可图的投资渠道,这些租赁的资源将会带来系统压力。
每当用户账号中存在他们不感兴趣的资源时,只要有获取利益的机会,他们都会选择利用这些资源增加更多网络压力,这个问题无所不在,EIDOS就是一个很好的例子。
通过适当调整系统参数(主要是价格曲线的指数参数),理论上Rentbw可以使资源市场实现接近100%的资源利用率。
这意味着,用户的账号中不存在任何他不需要的闲置资源,但这很难实现。
价格取决于利用率,并且随着利用率的提高而增加。可用资源的数量接近0且利用率接近1.0的场景几乎是不可能的,这实际上意味着从理论上说,永远不会充分利用网络。
在Rentbw资源市场中,大笔贷款到期后价格不会立即下降。相反,它会随着时间而衰减。这意味着价格可能无法反映实际可用资源的数量,并且在某些情况下,价格可能长时间不合理地保持高位。
根据以太坊ICO在2017年的判断可以得出结论,可能生态中会发生一些事情将利用率推升至最高水平,比如一个爆火的项目或者是交易所推出新的交易对等。
在那个时间点,用户将倾向于以任何价格购买资源,因为他们在那个时间点需要此资源。
如果那时大量贷款到期,价格将缓慢下降,但用户将倾向于继续购买,从而使价格保持高位,这将导致租赁市场上的资源可用性与实际可用资源量之间出现差距。
另一方面,如果价格下跌得太快,则将导致极大的价格波动,那些在大笔贷款到期后立即购买资源的幸运买家将具有明显的优势。
应当注意,所提出的系统高度依赖于配置,最显着地取决于指数参数和decay_secs参数。这两个参数之间的关系决定了价格随着网络利用率的增长而急剧上升,以及如果网络利用率下降时价格下降的延迟时间。
所幸的是,所提出的系统在链上是灵活且可配置的。部署系统后,出块节点可以调整大多数参数。
适当调整参数,极大概率能够大大改善资源利用率低下问题,并且每天实际 使用的资源中可能有相当稳定的百分比。这些是理论上的考虑,只有在实际条件下进行测试,才能了解系统在实际市场中的实际运行方式。
此资源模型试图确保租用资源的人将以某种方式使用租用资源,并禁止用户通过占用资源而不使用资源来“冻结”一部分网络资源和网络容量。该模型旨在将市场价格驱动力引入该系统,从而从理论上解决REX的局限性。
EOS阿根廷提出的不同价格曲线系列。
Ultra也曾提议将资源模型更改为CPU / NET质押模型。
Ultra曾这样解释他的提议想法:
Ultra中没有CPU / NET带宽,但账号有一个UltraPower概念:每笔交易都消耗Power,Power代表优先级。交易优先级越低,账号使用网络的机会就越多。超级账户的优先级可能会低于零,这意味着即使绝对没有超级能力,一个账户也可以发送交易并执行连锁操作。较高优先级的账号在每个区块执行交易的可能性越高。
注意:目前尚无源代码可供审查,以上内容只是Ultra开发人员描述的理论思想。
关于 rentbw资源模型你还有什么看法呢?欢迎您加入EOS Go与我们一起探讨。