Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
前言Friend.Tech 是一个基于智能合约的社交平台,用户需要连接自己的推特来进行注册,并“发行”自己的 key,拥有 key 的用户可以进入类似群聊的 room 中和 key 的 owner 进行交流。它依然是一种中心化的社交平台,只是依赖于链上的智能合约实现了 key 的购买、出售逻辑,而主要的功能是基于网页所实现的 IM 应用。而且出售、购买 key 的过程中,会将价值的 10% 划分为两部分,一部分给 Friend.Tech 开发者,另一部分给对应 room 的 owner。那么,在这样的 key 可以绕过前端完成购买、出售的情况下,自然而然会产生链上的机器人来进行打新、买卖、手续费欺骗的操作。那么,它们又是如何实现的?: b8 s9 \4 X" t
谈谈打新机器人打新机器人在 Friend.Tech 运营的前期能有很可观的收益,因为这个时候链上的狙击机器人还没有进化到一定的程度,在进行简单的信息判断后就可以进行购买且能够有很高的盈利期望。现在,先从最简单的机器人实现逻辑开始,一步步完成一个复杂的 bot 逻辑。# @* s6 ?+ G3 N& _9 c. Z9 r
当然,在此之前需要介绍 Event,事件是在 Solidity 编程语言下对 EVM 中的日志事件的抽象。通常会搭配一个 emit 语句来触发事件。对应在区块链浏览器中就是交易的 logs,例如下面一笔购买 key 的交易,它触发了一个 Trade 事件,事件中包含了一系列的信息% X+ L" Q( J* P' j
8 C* ?3 a# b6 F; |
Event 是 DApp 中很重要的一部分,通过它们可以监听到合约的状态变更,例如 Friend.Tech 也会监听该合约来对数据库中的一系列数据进行调整,例如前端的显示价格,holding 数量等。
2 Y  o5 w' Z) D5 c" L0 }! U最简思路那么,最为简单的一个打新机器人的逻辑是这样:监听 Friend.Tech 的合约事件,在发现一笔交易所触发的事件满足以下条件时就调用 Friend.Tech 的合约跟着买入$ Q7 b; V% q. r" ]

    8 y. G* q! y6 \' C
  • 事件为购买(isBuy 值为真)) P" p1 v' |1 f% s
  • 交易者和 owner 是同一个地址(trader == subject)
    7 l- Z* U9 d  a+ k! S, Q
  • 交易为创建 room 的交易 (supply 为 1)
    ( P) K! G: T. n) r
下图为该过程的流程示意图
, y3 C" ~0 e: z& N: v: x1 y1 a* |, \6 t% ~8 P$ n
合约?原子性!这样的机器人存在一定的问题:5 [* O; v# U" i* F: n8 [3 _  q
    - F  Z$ v2 P7 Q9 m$ e/ z! e
  • 不能保证打新一定能买到,其次是无法精确地给出能够购买 key 所需要花费的 eth 数量;$ J8 B' \- f  o# p
  • 也不能设置一个上限价格,比如在交易执行时到达多少 key 或者多少价格就不进行购买;, `+ [2 X; I1 e6 L! Y
  • 容易被狙击,其他人可以通过新地址执行购买操作来吸引这样的机器人,以达到骗取手续费、卖出获利的目的;
      R! k. A7 x# S6 C5 P
首先考虑解决问题1、2,EVM 的一个好处就是可以原子性地在一个合约中调用其他合约,所以只需要部署一个合约去进行购买,并且设置一系列的条件即可,例如 Github 上开源的合约代码 friendrekt,可以设置最高买入价格,以及数量。/ c7 {8 B$ Y1 r" r5 `
对于问题3,最简单的方式就是利用官方的接口 https://prod-api.kosetto.com/users/{address}进行查询,得到对应地址的用户 Twitter 信息,然后查询 Twitter 粉丝数等信息来进行筛选,筛选后再判断是否购买,购买多少以及最高价格是多少。于此,机器人的操作流程变为如下图所示。
: U: ?& y" y1 k/ g0 Y5 |9 B' n7 n
  K! X) K2 A3 x2 M技术爆炸可以看到,这个过程增加了信息请求和智能合约调用,机器人在监听到合约事件后,经过简单的逻辑判断后确定为新的账号激活,再利用 api 查询到相关信息以进行过滤,最后利用部署的智能合约来完成购买。但是这样的机器人依然存在缺陷:5 n7 I. f$ w/ T

    . f2 j9 J7 ]+ W$ m9 W, h9 y
  • 无法判断钓鱼的推特账号,部分账号的粉丝数量较高,但都是僵尸粉,而且也没有任何的价值,买入有很大的风险;
    * J6 m; ]( R, ^6 W7 J2 M
  • 粉丝数量不便于判断一个推特用户是否有价值,一些 KOL 粉丝数量少,但是会运营,这样很容易过滤掉这些人;
    $ }9 n; O* @! e& Y3 @
  • api 存在一定的延迟,这个接口只有在用户激活后一段时间(60s)内才能查询到,很容易错过很多的地址且有很高的延迟;
    3 b( I2 O! K6 G. q
同样地,一一解决这些问题。先看问题3,得益于 0xleo 的启发 我是如何在 friend.tech 丢失 1万刀的 - 0xleo0 ?. r* W1 K/ x# m+ Z( y0 Q
/ v0 T& x/ v# S0 u: i0 _
发现另外一个接口可以在用户注册后就可以查询到地址信息 https://prod-api.kosetto.com/users/by-id/{id},那么可以持续递增地监控这个接口查找最新的 id,并且得到注册者的信息。如果判断为有价值的注册者就将地址存放到缓存中(为了保证重启持久化,还需要一个数据库),在链上事件监听并命中缓存后就进行购买。( k4 f; p7 \3 v5 K5 v
其次是问题1、2,如何判断一个用户是否有价值?那么就需要一些第三方的 Twitter KOL 评分网站的辅助了,笔者在探索的过程中使用的是 Twiiterscan 来进行查询,由于可以预先得到注册信息,所以在激活前查询 Twiiterscan 所耗费的时间是没有太多的影响的。除此之外,还可以手动设置白名单以及买入价格来完成购买配置。
6 K- v6 N' F3 s" ?3 R: _1 L最后,我们所实现的 bot 的基本流程如下。由一个额外的“机器人”去拉取 api 的最新信息,并在判断后存放到数据库、缓存,专门负责购买的机器人则在收到事件后查询缓存信息,在命中缓存后进行购买。这个缓存中也可以存放白名单信息,选择一些有价值的 KOL 后设定价格、数量去买入。
) d* k0 @0 C5 n$ B
2 {& |( ~( ~$ X由于笔者实现这个 bot 的时间比较晚了,所以盈利也不是很客观。9月底开始着手实现、优化,在10月3号左右达到最高1.2E的收益,在那几天没有及时出手后利润回撤,在加上一系列手续费开销后算是没有盈利也没有亏损。这样架构的机器人能够在注册者买入后的第一个区块实现买入,由于 base 上没有内存池扫描这样的骚操作,大多数跟随同一个区块买入的基本上是一种疯狂的玩法:在监听到买入后一直执行买入,直到买入完成,例如在这个过程中看到的另外一个机器人:https://basescan.org/address/0x88e6aeb90795f586542b4062cb9f853a5582966c4 e7 M; F* v* M1 e
它的策略很简单,在上面我们所介绍的架构的基础上,不存放数据库,直接开始进行买入,直到买入完成。在优化到这个程度后就是拼资金量的游戏了,烧得起 gas 就可以这样的玩法,并且在策略正确的情况下利润也特别可观。' I6 y+ `: Q/ g! u; j: c' }+ x7 s( m
结语在前言部分中我们还提到了买卖、手续费欺骗的操作,在这里就随便介绍一下:; B" ^. @- A0 a- z6 C

    1 E, h4 s2 x# T( v
  • 买卖的是一种跟单机器人,跟踪到盈利较好的地址后可以跟随它的操作,原理也很简单,将监听的地址过滤一下,如果是目标地址就跟随操作;4 o2 Q: e: I% n6 K  w: l! t+ N
  • 手续费欺骗分两种(笔者在开发过程中观察到的),一种是利用粉丝数较多的推特账号来完成的,直接购买并且很快就出售以完成收割。另外一种就是不停建立新地址,转账然后执行购买操作又很快卖出。第二种主要针对的是最简逻辑的bot,在初期应该也能有很好的盈利。5 o5 U4 {2 x/ I) ]! V: A) I
至此,我们完成了对链上机器人原理的介绍,具体的实现涉及到代码不再进行说明,想要了解的朋友也可以参考 friendrekt 的实现。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华梦一生 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13