链上机器人的基本原理:以 FriendTech 为例

前言

Friend.Tech 是一个基于智能合约的社交平台,用户需要连接自己的推特来进行注册,并“发行”自己的 key,拥有 key 的用户可以进入类似群聊的 room 中和 key 的 owner 进行交流。它依然是一种中心化的社交平台,只是依赖于链上的智能合约实现了 key 的购买、出售逻辑,而主要的功能是基于网页所实现的 IM 应用。而且出售、购买 key 的过程中,会将价值的 10% 划分为两部分,一部分给 Friend.Tech 开发者,另一部分给对应 room 的 owner。那么,在这样的 key 可以绕过前端完成购买、出售的情况下,自然而然会产生链上的机器人来进行打新、买卖、手续费欺骗的操作。那么,它们又是如何实现的?

谈谈打新机器人

打新机器人在 Friend.Tech 运营的前期能有很可观的收益,因为这个时候链上的狙击机器人还没有进化到一定的程度,在进行简单的信息判断后就可以进行购买且能够有很高的盈利期望。现在,先从最简单的机器人实现逻辑开始,一步步完成一个复杂的 bot 逻辑。

当然,在此之前需要介绍 Event,事件是在 Solidity 编程语言下对 EVM 中的日志事件的抽象。通常会搭配一个 emit 语句来触发事件。对应在区块链浏览器中就是交易的 logs,例如下面一笔购买 key 的交易,它触发了一个 Trade 事件,事件中包含了一系列的信息

合约事件
合约事件

Event 是 DApp 中很重要的一部分,通过它们可以监听到合约的状态变更,例如 Friend.Tech 也会监听该合约来对数据库中的一系列数据进行调整,例如前端的显示价格,holding 数量等。

最简思路

那么,最为简单的一个打新机器人的逻辑是这样:监听 Friend.Tech 的合约事件,在发现一笔交易所触发的事件满足以下条件时就调用 Friend.Tech 的合约跟着买入

  • 事件为购买(isBuy 值为真)

  • 交易者和 owner 是同一个地址(trader == subject

  • 交易为创建 room 的交易 (supply 为 1)

下图为该过程的流程示意图

最简 bot
最简 bot

合约?原子性!

这样的机器人存在一定的问题:

  1. 不能保证打新一定能买到,其次是无法精确地给出能够购买 key 所需要花费的 eth 数量;

  2. 也不能设置一个上限价格,比如在交易执行时到达多少 key 或者多少价格就不进行购买;

  3. 容易被狙击,其他人可以通过新地址执行购买操作来吸引这样的机器人,以达到骗取手续费、卖出获利的目的;

首先考虑解决问题1、2,EVM 的一个好处就是可以原子性地在一个合约中调用其他合约,所以只需要部署一个合约去进行购买,并且设置一系列的条件即可,例如 Github 上开源的合约代码 friendrekt,可以设置最高买入价格,以及数量。

对于问题3,最简单的方式就是利用官方的接口 https://prod-api.kosetto.com/users/{address}进行查询,得到对应地址的用户 Twitter 信息,然后查询 Twitter 粉丝数等信息来进行筛选,筛选后再判断是否购买,购买多少以及最高价格是多少。于此,机器人的操作流程变为如下图所示。

引入代购合约
引入代购合约

技术爆炸

可以看到,这个过程增加了信息请求和智能合约调用,机器人在监听到合约事件后,经过简单的逻辑判断后确定为新的账号激活,再利用 api 查询到相关信息以进行过滤,最后利用部署的智能合约来完成购买。但是这样的机器人依然存在缺陷:

  1. 无法判断钓鱼的推特账号,部分账号的粉丝数量较高,但都是僵尸粉,而且也没有任何的价值,买入有很大的风险;

  2. 粉丝数量不便于判断一个推特用户是否有价值,一些 KOL 粉丝数量少,但是会运营,这样很容易过滤掉这些人;

  3. api 存在一定的延迟,这个接口只有在用户激活后一段时间(60s)内才能查询到,很容易错过很多的地址且有很高的延迟;

同样地,一一解决这些问题。先看问题3,得益于 0xleo 的启发 我是如何在 friend.tech 丢失 1万刀的 - 0xleo

发现另外一个接口可以在用户注册后就可以查询到地址信息 https://prod-api.kosetto.com/users/by-id/{id},那么可以持续递增地监控这个接口查找最新的 id,并且得到注册者的信息。如果判断为有价值的注册者就将地址存放到缓存中(为了保证重启持久化,还需要一个数据库),在链上事件监听并命中缓存后就进行购买。

其次是问题1、2,如何判断一个用户是否有价值?那么就需要一些第三方的 Twitter KOL 评分网站的辅助了,笔者在探索的过程中使用的是 Twiiterscan 来进行查询,由于可以预先得到注册信息,所以在激活前查询 Twiiterscan 所耗费的时间是没有太多的影响的。除此之外,还可以手动设置白名单以及买入价格来完成购买配置。

最后,我们所实现的 bot 的基本流程如下。由一个额外的“机器人”去拉取 api 的最新信息,并在判断后存放到数据库、缓存,专门负责购买的机器人则在收到事件后查询缓存信息,在命中缓存后进行购买。这个缓存中也可以存放白名单信息,选择一些有价值的 KOL 后设定价格、数量去买入。

提前监听与影响力分析
提前监听与影响力分析

由于笔者实现这个 bot 的时间比较晚了,所以盈利也不是很客观。9月底开始着手实现、优化,在10月3号左右达到最高1.2E的收益,在那几天没有及时出手后利润回撤,在加上一系列手续费开销后算是没有盈利也没有亏损。这样架构的机器人能够在注册者买入后的第一个区块实现买入,由于 base 上没有内存池扫描这样的骚操作,大多数跟随同一个区块买入的基本上是一种疯狂的玩法:在监听到买入后一直执行买入,直到买入完成,例如在这个过程中看到的另外一个机器人:https://basescan.org/address/0x88e6aeb90795f586542b4062cb9f853a5582966c

它的策略很简单,在上面我们所介绍的架构的基础上,不存放数据库,直接开始进行买入,直到买入完成。在优化到这个程度后就是拼资金量的游戏了,烧得起 gas 就可以这样的玩法,并且在策略正确的情况下利润也特别可观。

结语

在前言部分中我们还提到了买卖、手续费欺骗的操作,在这里就随便介绍一下:

  1. 买卖的是一种跟单机器人,跟踪到盈利较好的地址后可以跟随它的操作,原理也很简单,将监听的地址过滤一下,如果是目标地址就跟随操作;

  2. 手续费欺骗分两种(笔者在开发过程中观察到的),一种是利用粉丝数较多的推特账号来完成的,直接购买并且很快就出售以完成收割。另外一种就是不停建立新地址,转账然后执行购买操作又很快卖出。第二种主要针对的是最简逻辑的bot,在初期应该也能有很好的盈利。

至此,我们完成了对链上机器人原理的介绍,具体的实现涉及到代码不再进行说明,想要了解的朋友也可以参考 friendrekt 的实现。


Twitter: https://twitter.com/3PDAO

Telegram: https://t.me/Labs_3P

Mirror: https://mirror.xyz/3p-labs.eth

Medium: https://medium.com/@3p-labs

Followin: https://followin.io/zh-Hans/kol/4075816318

Foresight News: https://foresightnews.pro/column/detail/873

Subscribe to 3P-Labs
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.