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

avatar
橙皮书
4年前
本文约3696字,阅读全文需要约5分钟
怎样在挖矿的同时,最大程度的节省gas?

编者按:本文来自 橙皮书(ID:chengpishu),Odaily星球日报经授权转载。

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价格,这与基于链上历史数据的计算方式有明显区别。

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

这篇文章橙皮书找到了星火矿池(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价格的精确度和实时性是有影响的。

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

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

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

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

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

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

橙皮书: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 的图表,能解释下这个图表的含义吗?

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

喵叔:这个图表横轴代表的是交易的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价格。

本文来自投稿,不代表Odaily立场。如若转载请注明出处。

ODAILY提醒,请广大读者树立正确的货币观念和投资理念,理性看待区块链,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。

推荐阅读
星球精选