轻松构建MEV机器人,维护Sui网络健康并获取收益

Sui存储基金的返还是Sui的独特功能,鼓励社区维护Sui网络的健康。

轻松构建MEV机器人,维护Sui网络健康并获取收益

DeepBook是Sui的第一个原生流动性层,未完成的过期订单仍然存在链上,这就占用了网络存储空间。这些过期订单还会计入DeepBook的动态字段限制,而保持一个健康的网络和DeepBook的可操作性则需要清理这些旧订单。

幸运的是, Sui的存储费用机制奖励用户从链上删除对象,有远见的用户可以通过查找并删除DeepBook的未完成订单来赚取Sui存储基金的返还。这些操作还可以释放网络存储空间,保持DeepBook的可用性,并将其用于强大的订单处理。

找到并删除过期订单的最简单方法是部署一个自动执行此操作的机器人。查看下面的最大可提取价值(maximal extractable value,MEV)机器人的参考代码。这个免费使用的代码可以按原样编译,或修改以创建自定义机器人。

Sui存储返还

Sui在交易创建网络上的对象时会收取存储费,同时还会收取gas费。这个存储费将用于Sui存储基金,该基金使用一种权益证明机制来补偿网络运营商维护链上存储的成本。这个设计考虑到运营商随时可能加入和离开网络,因此维护基金以支持那些在创建他们存储的对象之后加入的运营商。

与所有网络一样,未使用的文件和其他物件会随着时间的推移而积累,并占用越来越多的存储空间。当可用的存储空间完全被使用时,服务和性能会下降。在Sui上,增加的存储需求意味着运营商需要增加他们的存储容量,以确保网络性能良好。

从Sui中删除一个对象,比如一个已过期的DeepBook订单,会释放出相关对象所占用的空间。由于存储费是提前收取的,而对象在生命周期内都会收取存储费,因此Sui以$SUI的形式返还原始存储费的99%作为返还。Sui上的存储费非常低,因此单个删除的返还也相应较低。虽然删除对象涉及到一笔gas费,但在许多情况下,存储费返还超过gas费,从而产生净收益。

DeepBook过期订单

在DeepBook上的限价订单中,有人为token设置他们希望花费或获得的金额,但由于找不到匹配的订单,这些订单可能不会成交,类似于有人可能会为拍卖设置过高的价格而流拍。这些未成交的订单最终会过期,但却仍然存在于网络中。每个订单都是一个对象,占用一定数量的存储空间。

此外,每个订单使用动态字段,这是一种可以在对象上随时添加或删除的字段类型。DeepBook在Sui上的所有池中都有1000个动态字段的限制。如果活动订单加上过期订单的数量达到1000个,DeepBook将达到1000个动态字段的限制,直到数量降至1000以下,DeepBook才能再次处理订单。

下面的代码显示了如何构建一个参考的MEV机器人,用于清除DeepBook中的过期订单。当机器人删除一个对象时,与该对象相关的存储费返还将发送到用于执行机器人的地址,从而有助于维护网络的健康状态和DeepBook的可用性,同时奖励机器人的创建者。

构建MEV机器人

以下参考代码,也可在Sui GitHub代码库中找到,该代码演示了如何创建一个简单的MEV机器人,以从网络中删除DeepBook过期订单。

本文仅包括创建机器人所需的代码部分,请在Sui存储库中查看完整代码。

创建一个连接到Sui网络的客户端:

const client = new SuiClient({url: 
"https://explorer-rpc.mainnet.sui.io:443"});

以下行检索使用PoolCreated事件的所有DeepBook池:

let allPools = await retrieveAllPools();

此部分检索每个池中的所有过期订单:

let allExpiredOrdersPromises = [];
for (let pool of allPools) {

allExpiredOrdersPromises.push(retrieveExpiredOrders(pool.pool_id).then((expiredOrders) => {
		return {pool, expiredOrders}
	}));
    
}
let allExpiredOrders = (await Promise.all(allExpiredOrdersPromises)).flat();

此代码显示了如何创建一个 事务来清理所有过期订单,然后使用devInspectTransactionBlock获取估计的存储费返还:

let {rebate, tx} = await createCleanUpTransaction(allExpiredOrders);

console.log(`Total estimated storage fee rebate: ${rebate / 1e9} SUI`);

除了上面的代码之外,存储库中的代码还显示了如何签名和执行事务。

存储库中的代码示例还演示了如何使用Helper函数检索所有页面的动态字段,它展示了如何将返回的数组分割成块。

示例代码中的干扰运行事务返回了网络上的过期订单,类似于以下内容:

Pool d9e45ab5440d61cc52e3b2bd915cdd643146f7593d587c715bc7bfa48311d826 has 6 expired orders out of 28 orders
Pool f0f663cf87f1eb124da2fc9be813e0ce262146f3df60bc2052d738eb41a25899 has 6 expired orders out of 21 orders
Pool 18d871e3c3da99046dfc0d3de612c5d88859bc03b8f0568bd127d0e70dbc58be has 1 expired orders out of 1 orders
Pool 5deafda22b6b86127ea4299503362638bea0ca33bb212ea3a67b029356b8b955 has 5 expired orders out of 57 orders
Pool 7f526b1263c4b91b43c9e646419b5696f424de28dda3c1e6658cc0a54558baa7 has 72 expired orders out of 2925 orders

激励社区

像Sui这样的去中心化、无需许可的网络需要一定程度的社区维护。由于过期订单不属于特定的Sui地址,任何人都可以将其删除,从而有机会获得存储费返还。尽管目前过期的DeepBook订单数量不多,但这种积极的指导将有助于随着使用增加,确保DeepBook系统长期保持健康。