为 DeFi 农民寻找手续费最优解,星火矿池谈 GasNow 设计原理

[复制链接]
13645 |0
发表于 2020-9-18 16:30:00 | 显示全部楼层 |阅读模式

GasNow 基于星火矿池内部数据,试图得出实时性和准确度更高的 Gas 价格,这与基于链上历史数据的计算方式有明显区别。

原文标题:《GasNow:为 DeFi 农民寻找最优的 Gas Price》
撰文: orangefans

DeFi 挖矿火爆持续至今,ETH作为 DeFi 最主要的阵地,吞吐量又一次成为瓶颈,其中最重要的表现就是ETH的 Gas 价格(Gas Price)不断创新高,从原本的 40-50 Gwei,飙涨到最高时 400-500 Gwei。

Gas 本质上是一种拍卖机制,区块空间有限,当交易数量过多时,矿工会优先打包给出更高手续费的交易。而流动性挖矿超高收益的背后,每个农民都在争分夺秒的挖提卖。DeFi 玩家对交易打包上链的速度要求,变得异常敏感。

想要更快的完成交易,就需要付出更高的 Gas 价格。那么究竟多少 Gas Price 是合适的呢?一般圈内人习惯通过 etherscan 或者 eth gas station 查看 Gas 费,但很多人不知道的是,这些数据其实都有一定的滞后性,不一定是精准的。

橙皮书最近接触到的一款产品叫 GasNow,它是星火矿池团队面向普通用户的一个实验性小产品,希望为 DeFi 农民提供实时的 Gas 价格,让交易者找到最合算的手续费定价。GasNow 基于星火矿池内部的数据,通过待处理交易队列,试图得出一个实时性和准确度更高的 Gas 价格,这与基于链上历史数据的计算方式有明显区别。

d8ba09b1d1b1fa4978a179f3cd598153.jpg

d8ba09b1d1b1fa4978a179f3cd598153.jpg

这篇文章橙皮书找到了星火矿池(SparkPool)的产品负责人喵叔,一起聊了聊 GasNow 的产品设计。以下是采访正文。

橙皮书:GasNow 这个项目最早是怎么发起的?

喵叔:一开始我们也是去 etherscan 或者 gas station 上查 Gas 价格,后面发现它们的数据都不太准确,很多时候上面显示的 Gas 价格非常高,但我们发现,星火矿池上可能更低手续费的交易已经被打包上了。于是我们就想,能不能通过矿池的数据做一个更精准的数据展示。最初纯粹是为了解决自己的需求。后面发现开放出来给普通用户也挺好的,所以就做成了现在的 GasNow,是一个极简风格的小工具。

现阶段因为 DeFi 流动性挖矿非常火,如果去看 Gas 价格的历史数据,其实是比之前 ICO 那阶段还要高出更多的。当时 ICO 时期,Gas 价格也有一个小幅度的上升,但涨得没有现在这么猛。当然,Gas Limit 其实一直都是接近满负荷的。也就是说,ETH一直以来就比较拥堵,只是最近这个阶段,在拥堵的同时,人们对速度要求更高,「插队」的需求增多了。这是跟以往比较不同的地方。

橙皮书:GasNow 是基于星火矿池待处理交易队列去计算得到的 Gas 价格。相比之下,其他家的数据为什么会没那么精准呢?

喵叔:一般计算 Gas 价格有两种方法,一种是根据链上数据,比如过去 100 区块里 Gas Limit 和 Gas Price 的使用情况,去推测现在的 Gas 费应该是多少,依据历史数据做模型推测。另一种方法就是像我们这样,以当前正在打包的交易队列,看每个交易的 Gas 价格是多少,然后排序找出里面的中位数、平均值等等,得出一个比较合适的数据。

第二种方法是更接近当前时刻的数据。它的实时性更高。对很多 Dex 的交易者来说,速度是有很高要求的,他们对能不能第一时间打包上交易非常敏感,GasNow 希望能针对这些用户,为他们提供一个比较准确的 Gas 价格的参考。

星火矿池本身已经积累下来了这方面的数据,所以我们不需要做二次开发,可以很快做完 GasNow。当然反过来说,GasNow 这个产品天然适合由矿池来做,因为矿池本身的商业模式比较简单,就是要尽可能快地去收集全网的交易,更快地去把这些交易打包进区块。

矿池的职责是守护整个网络的安全,吸引更多人进来挖矿,自己安心做送水的服务挣钱就行了。所以这部分交易的数据,矿池也愿意开放出来,不需要遮遮掩掩,对商业模式没有影响。所以最终,基于矿池开放出 GasNow 这样的产品,就非常名正言顺了。

橙皮书:这种方式跟我自己运行一个节点,然后通过ETH的网络协议,去遍历获取各个节点 Mempool 里的打包交易有什么区别吗?

喵叔:如果是你自己运行一个节点,比如节点设置在杭州,那么因为ETH是个全球网络,你最先能获取到的交易可能是杭州地区,然后是中国地区,最后才是国外地区。国外地区因为网络延时,有些交易数据可能是滞后的。最终你掌握的数据可能只是局部精准的状态,这对你最终计算 Gas 价格的精确度和实时性是有影响的。

而矿池的商业模式决定了它天生就需要更快速、更全面的拿到全网所有待处理的交易数据,所以依附矿池的数据来做会更精准、更快速,同时开发上也更省力。

橙皮书:矿池为什么能比我单个节点拿到全网交易的速度更快?它做了哪些方面的优化呢?

喵叔:其实这是一个非常简单的成本问题:看你能不能架设足够多的节点。矿池为了更快拿到全网的交易数据,它会在全球很多个地方架设不同的节点,速度就更快。相比之下,一个单独的节点肯定是比不过的。矿池的优势在于它可以承担架设这些节点的成本。

橙皮书:所以你们现在全球有多少个节点?这些节点是基于云服务的节点,还是物理节点吗?

喵叔:这个数据现在应该还不方便透露。节点类型的话,只能说各种类型都会有。架设多少节点这个事,主要还是看性价比。它不但跟地理位置有关,也跟不同地区发出交易的频次有关。假设一个极端情况,在北极有一个ETH的节点,那你不可能为了它在北极专门放一台服务器做监测,而且这个北极节点可能几天才发一笔交易,频次很低,那可能就会相应地做一些取舍。相反,其他地区可能发出的交易非常密集,那么就需要在那里布更多的节点监测。

dce3610150b144fe7f7cb46500a08955.jpg

dce3610150b144fe7f7cb46500a08955.jpg

橙皮书:GasNow 的产品设计非常极简,上面现在就四个数字(极速、高速、一般、缓慢),普通用户怎么来用呢?

喵叔:首先要了解一点,每个区块 Gas Limit 的上限是 1250 万,不同类型的交易所需要的 gas 数量不同,普通的 以太坊 转账需要 21000 个 Gas,复杂的合约交易可能需要几百万个 Gas,所以每个区块实际打包到的交易笔数是变化的,最低几十笔甚至几笔交易,最高则可以有 600 多笔交易(1250 万 /21000)。

GasNow 的计算方法,第一步是先把待打包队列中的 2000 笔交易全部列出来 (tx1,tx2,tx3,tx4,……txn……tx2000),然后按 Gas 价格从高到低排列。下一个区块能够打包的是其中的 N 笔交易(tx1,tx2,tx3,tx4……txn),注意这里的 N 是不确定的。

在这一基础上,我们计算出了这四个数字,含义分别如下:「极速」模式,代表的是(tx1,tx2,tx3,tx4……txn)中位数交易的 Gas 价格,「高速」是 txn 的 Gas 价格。「一般」是第 max(tx2n,500) 笔交易的 Gas 价格,「缓慢」则是第 max(tx5n,1000) 笔交易的 Gas 价格。假如下个区块能够打包 300 笔交易,即 n=300,那么「一般」表示第 600 笔交易的 gas 价格,「缓慢」则表示第 1500 笔交易的 gas 价格。

其实更极简一点,我觉得可能只放前两个数字(极速、高速)就够了。

橙皮书:是不是只要我给出的 Gas 价格跟第二个数字(高速模式,即 txn 的 Gas 价格)一样,就肯定能被打包进当前的区块?

喵叔:这其实有非常多种可能性,因为牵涉到 Gas Limit 的问题。比如你给的 Gas 价格跟当前正在打包的块中的最后一笔交易相同,如果这笔交易被打包进去后,刚好用完了这个区块的 Gas Limit,那你就得挪到下一个块。

到了第二个块,如果这时又有人出更高的 Gas 价格,那它又排在了你的前面。你又没法第一时间打包上去了。所以为什么 GasNow 不根据历史数据去做预测呢?因为预测交易被打包的排序真的非常难。我们还是聚焦于当前这一时刻的数据,专注去解决实时性的问题。

橙皮书:除了四个数字,GasNow 上还有一个 Pending Transactions 的图表,能解释下这个图表的含义吗?

9e504d5a4d383bf5379f2c0bfed5a3b7.jpg

9e504d5a4d383bf5379f2c0bfed5a3b7.jpg

喵叔:这个图表横轴代表的是交易的 Gas 价格,纵轴是大于等于这个 Gas 价格的交易笔数。所以 pending transactions 实际上代表了一个全局的信息,囊括所有待处理交易的 Gas 价格信息。我们选出来的四个数字,只是这个全局信息坐标里的四个点而已。

橙皮书:GasNow 这个小产品,后续在商业模式上是怎么考虑的?

喵叔:目前 GasNow 是免费开放给所有用户使用。像 imSNT、MYKEY、MathWallet、NetworkPocket 这些钱包也已经支持了。目前我们的服务器还应付得过来,如果后面数据请求压力太大,可能才会考虑开始收费。GasNow 的网页现在是 8 秒自动刷新一次的,也是基于免费模式性价比的一个考虑。如果我们改用 websocket 长链接的方式,那服务器可以直接把实时的数据推送到前端页面,不过这样我们的开销也会更大一些。

商业模式上,GasNow 没法干涉用户的操作,所以它是很难收费的。对不同的用户来说,发交易时参考一眼我们产品给出的 Gas 价格,这个数据也很难量化出一个固定的价值。我觉得也不是很容易去收费。所以暂且就是免费模式。后面有什么可能性,暂时不知道。

橙皮书:感觉有点像 etherscan?他们好像也没有商业模式,就是在页面上挂一些广告而已。

喵叔:嗯,这种基础性质的数据服务确实不好收费。相比之下,infura 就比较好收费了,它也不用面向普通用户收费,直接赚企业客户的钱,比较好定价。

橙皮书:GasNow 接下来有什么打算?

喵叔:应该会继续保持一个比较极简的产品形式。核心就是提供这四个数据,所以你现在看到的产品,可能已经完成 90% 了,剩下的 10% 是怎样把这四个数据做得更平滑、更精准,但大的方面不会变了。

当然,做了网页版之后,我们发现用户经常需要打开这个页面,然后看一眼 Gas 费,再点开 metamask 发起交易,这样操作会有一个中断,不是很方便,所以我们又开发了一个 mac 版的桌面端小插件,它可以常驻在桌面通知栏,实时显示这四个数据,比较方便。

另一方面,单纯给出这四个数字,很多用户理解起来还是有困难,用文字做解释又需要理解,所以我们现在还在补充一些数据可视化的功能,让用户更直观的看懂这四个数据代表的含义,帮助他们更快速地找到适合自己的 Gas 价格。

橙皮书:Metamask 在发起交易的时候,也有一个 Gas 价格的估算。他们有没有可能去采用你们的数据?

喵叔:Metamask 现在算是最大的浏览器钱包了吧,所以严格来说,不管他们的产品体验做到什么程度,其实用户都必须去使用,没有太多选择。暂时他们还没有联系我们。当然,我们也希望有更多产品能接入我们的数据,让用户在桌面端、移动端都能看到更精准的 Gas 价格。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门版块
快速回复 返回顶部 返回列表