GasNow 基于星火矿池内部数据,试图得出实时性和准确度更高的 Gas 价格,这与基于链上历史数据的计算方式有明显区别。
原文标题:《GasNow:为 DeFi 农民寻找最优的 Gas Price》
撰文: orangefans
DeFi 挖矿火爆持续至今,以太坊作为 DeFi 最主要的阵地,吞吐量又一次成为瓶颈,其中最重要的表现就是以太坊的 Gas 价格(Gas Price)不断创新高,从原本的 40-50 Gwei,飙涨到最高时 400-500 Gwei。
Gas 本质上是一种拍卖机制,区块空间有限,当交易数量过多时,矿工会优先打包给出更高手续费的交易。而流动性挖矿超高收益的背后,每个农民都在争分夺秒的挖提卖。DeFi 玩家对交易打包上链的速度要求,变得异常敏感。
想要更快的完成交易,就需要付出更高的 Gas 价格。那么究竟多少 Gas Price 是合适的呢?一般圈内人习惯通过 etherscan 或者 eth gas station 查看 Gas 费,但很多人不知道的是,这些数据其实都有一定的滞后性,不一定是精准的。
橙皮书最近接触到的一款产品叫 GasNow,它是星火矿池团队面向普通用户的一个实验性小产品,希望为 DeFi 农民提供实时的 Gas 价格,让交易者找到最合算的手续费定价。GasNow 基于星火矿池内部的数据,通过待处理交易队列,试图得出一个实时性和准确度更高的 Gas 价格,这与基于链上历史数据的计算方式有明显区别。
这篇文章橙皮书找到了星火矿池(SparkPool)的产品负责人喵叔,一起聊了聊 GasNow 的产品设计。以下是采访正文。
橙皮书:GasNow 这个项目最早是怎么发起的?
喵叔:一开始我们也是去 etherscan 或者 gas station 上查 Gas 价格,后面发现它们的数据都不太准确,很多时候上面显示的 Gas 价格非常高,但我们发现,星火矿池上可能更低手续费的交易已经被打包上了。于是我们就想,能不能通过矿池的数据做一个更精准的数据展示。最初纯粹是为了解决自己的需求。后面发现开放出来给普通用户也挺好的,所以就做成了现在的 GasNow,是一个极简风格的小工具。
现阶段因为 DeFi 流动性挖矿非常火,如果去看 Gas 价格的历史数据,其实是比之前 ICO 那阶段还要高出更多的。当时 ICO 时期,Gas 价格也有一个小幅度的上升,但涨得没有现在这么猛。当然,Gas Limit 其实一直都是接近满负荷的。也就是说,以太坊一直以来就比较拥堵,只是最近这个阶段,在拥堵的同时,人们对速度要求更高,「插队」的需求增多了。这是跟以往比较不同的地方。
橙皮书:GasNow 是基于星火矿池待处理交易队列去计算得到的 Gas 价格。相比之下,其他家的数据为什么会没那么精准呢?
喵叔:一般计算 Gas 价格有两种方法,一种是根据链上数据,比如过去 100 区块里 Gas Limit 和 Gas Price 的使用情况,去推测现在的 Gas 费应该是多少,依据历史数据做模型推测。另一种方法就是像我们这样,以当前正在打包的交易队列,看每个交易的 Gas 价格是多少,然后排序找出里面的中位数、平均值等等,得出一个比较合适的数据。
第二种方法是更接近当前时刻的数据。它的实时性更高。对很多 Dex 的交易者来说,速度是有很高要求的,他们对能不能第一时间打包上交易非常敏感,GasNow 希望能针对这些用户,为他们提供一个比较准确的 Gas 价格的参考。
星火矿池本身已经积累下来了这方面的数据,所以我们不需要做二次开发,可以很快做完 GasNow。当然反过来说,GasNow 这个产品天然适合由矿池来做,因为矿池本身的商业模式比较简单,就是要尽可能快地去收集全网的交易,更快地去把这些交易打包进区块。
矿池的职责是守护整个网络的安全,吸引更多人进来挖矿,自己安心做送水的服务挣钱就行了。所以这部分交易的数据,矿池也愿意开放出来,不需要遮遮掩掩,对商业模式没有影响。所以最终,基于矿池开放出 GasNow 这样的产品,就非常名正言顺了。
橙皮书:这种方式跟我自己运行一个节点,然后通过以太坊的网络协议,去遍历获取各个节点 Mempool 里的打包交易有什么区别吗?
喵叔:如果是你自己运行一个节点,比如节点设置在杭州,那么因为以太坊是个全球网络,你最先能获取到的交易可能是杭州地区,然后是中国地区,最后才是国外地区。国外地区因为网络延时,有些交易数据可能是滞后的。最终你掌握的数据可能只是局部精准的状态,这对你最终计算 Gas 价格的精确度和实时性是有影响的。
而矿池的商业模式决定了它天生就需要更快速、更全面的拿到全网所有待处理的交易数据,所以依附矿池的数据来做会更精准、更快速,同时开发上也更省力。
橙皮书:矿池为什么能比我单个节点拿到全网交易的速度更快?它做了哪些方面的优化呢?
喵叔:其实这是一个非常简单的成本问题:看你能不能架设足够多的节点。矿池为了更快拿到全网的交易数据,它会在全球很多个地方架设不同的节点,速度就更快。相比之下,一个单独的节点肯定是比不过的。矿池的优势在于它可以承担架设这些节点的成本。
橙皮书:所以你们现在全球有多少个节点?这些节点是基于云服务的节点,还是物理节点吗?
喵叔:这个数据现在应该还不方便透露。节点类型的话,只能说各种类型都会有。架设多少节点这个事,主要还是看性价比。它不但跟地理位置有关,也跟不同地区发出交易的频次有关。假设一个极端情况,在北极有一个以太坊的节点,那你不可能为了它在北极专门放一台服务器做监测,而且这个北极节点可能几天才发一笔交易,频次很低,那可能就会相应地做一些取舍。相反,其他地区可能发出的交易非常密集,那么就需要在那里布更多的节点监测。
橙皮书:GasNow 的产品设计非常极简,上面现在就四个数字(极速、高速、一般、缓慢),普通用户怎么来用呢?
喵叔:首先要了解一点,每个区块 Gas Limit 的上限是 1250 万,不同类型的交易所需要的 gas 数量不同,普通的 ETH 转账需要 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 的图表,能解释下这个图表的含义吗?
喵叔:这个图表横轴代表的是交易的 Gas 价格,纵轴是大于等于这个 Gas 价格的交易笔数。所以 pending transactions 实际上代表了一个全局的信息,囊括所有待处理交易的 Gas 价格信息。我们选出来的四个数字,只是这个全局信息坐标里的四个点而已。
橙皮书:GasNow 这个小产品,后续在商业模式上是怎么考虑的?
喵叔:目前 GasNow 是免费开放给所有用户使用。像 imToken、MYKEY、MathWallet、TokenPocket 这些钱包也已经支持了。目前我们的服务器还应付得过来,如果后面数据请求压力太大,可能才会考虑开始收费。GasNow 的网页现在是 8 秒自动刷新一次的,也是基于免费模式性价比的一个考虑。如果我们改用 websocket 长链接的方式,那服务器可以直接把实时的数据推送到前端页面,不过这样我们的开销也会更大一些。
商业模式上,GasNow 没法干涉用户的操作,所以它是很难收费的。对不同的用户来说,发交易时参考一眼我们产品给出的 Gas 价格,这个数据也很难量化出一个固定的价值。我觉得也不是很容易去收费。所以暂且就是免费模式。后面有什么可能性,暂时不知道。
橙皮书:感觉有点像 etherscan?他们好像也没有商业模式,就是在页面上挂一些广告而已。
喵叔:嗯,这种基础性质的数据服务确实不好收费。相比之下,infura 就比较好收费了,它也不用面向普通用户收费,直接赚企业客户的钱,比较好定价。
橙皮书:GasNow 接下来有什么打算?
喵叔:应该会继续保持一个比较极简的产品形式。核心就是提供这四个数据,所以你现在看到的产品,可能已经完成 90% 了,剩下的 10% 是怎样把这四个数据做得更平滑、更精准,但大的方面不会变了。
当然,做了网页版之后,我们发现用户经常需要打开这个页面,然后看一眼 Gas 费,再点开 metamask 发起交易,这样操作会有一个中断,不是很方便,所以我们又开发了一个 mac 版的桌面端小插件,它可以常驻在桌面通知栏,实时显示这四个数据,比较方便。
另一方面,单纯给出这四个数字,很多用户理解起来还是有困难,用文字做解释又需要理解,所以我们现在还在补充一些数据可视化的功能,让用户更直观的看懂这四个数据代表的含义,帮助他们更快速地找到适合自己的 Gas 价格。
橙皮书:Metamask 在发起交易的时候,也有一个 Gas 价格的估算。他们有没有可能去采用你们的数据?
喵叔:Metamask 现在算是最大的浏览器钱包了吧,所以严格来说,不管他们的产品体验做到什么程度,其实用户都必须去使用,没有太多选择。暂时他们还没有联系我们。当然,我们也希望有更多产品能接入我们的数据,让用户在桌面端、移动端都能看到更精准的 Gas 价格。
来源链接:mp.weixin.qq.com