Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
前言Friend.Tech 是一个基于智能合约的社交平台,用户需要连接自己的推特来进行注册,并“发行”自己的 key,拥有 key 的用户可以进入类似群聊的 room 中和 key 的 owner 进行交流。它依然是一种中心化的社交平台,只是依赖于链上的智能合约实现了 key 的购买、出售逻辑,而主要的功能是基于网页所实现的 IM 应用。而且出售、购买 key 的过程中,会将价值的 10% 划分为两部分,一部分给 Friend.Tech 开发者,另一部分给对应 room 的 owner。那么,在这样的 key 可以绕过前端完成购买、出售的情况下,自然而然会产生链上的机器人来进行打新、买卖、手续费欺骗的操作。那么,它们又是如何实现的?
2 c1 B0 G6 `' f: ]) T" G( s4 J谈谈打新机器人打新机器人在 Friend.Tech 运营的前期能有很可观的收益,因为这个时候链上的狙击机器人还没有进化到一定的程度,在进行简单的信息判断后就可以进行购买且能够有很高的盈利期望。现在,先从最简单的机器人实现逻辑开始,一步步完成一个复杂的 bot 逻辑。
' n0 e4 D/ v2 b当然,在此之前需要介绍 Event,事件是在 Solidity 编程语言下对 EVM 中的日志事件的抽象。通常会搭配一个 emit 语句来触发事件。对应在区块链浏览器中就是交易的 logs,例如下面一笔购买 key 的交易,它触发了一个 Trade 事件,事件中包含了一系列的信息4 y0 ?& G$ C+ |) w8 ?. O

' ~7 A- {2 h" ^Event 是 DApp 中很重要的一部分,通过它们可以监听到合约的状态变更,例如 Friend.Tech 也会监听该合约来对数据库中的一系列数据进行调整,例如前端的显示价格,holding 数量等。
% H0 w( J# j! `6 T( Z: p3 ]最简思路那么,最为简单的一个打新机器人的逻辑是这样:监听 Friend.Tech 的合约事件,在发现一笔交易所触发的事件满足以下条件时就调用 Friend.Tech 的合约跟着买入
: w2 D* h. c' S- O* v! e+ i( Y

    : ^/ [; n7 D# F' B
  • 事件为购买(isBuy 值为真)
    1 ^( T, L) l& A6 R7 I+ N
  • 交易者和 owner 是同一个地址(trader == subject)6 u; L% i  s& j! E# O
  • 交易为创建 room 的交易 (supply 为 1)
    ; `3 l2 V$ P9 i$ s7 T7 x
下图为该过程的流程示意图
+ M7 m0 x0 h) v" ?0 L% p
( T% l6 l. b! E7 X' K& ]+ ~合约?原子性!这样的机器人存在一定的问题:
9 v! K' S, L2 Y" y

    . M8 N: q2 I$ ~/ f. b( a
  • 不能保证打新一定能买到,其次是无法精确地给出能够购买 key 所需要花费的 eth 数量;8 ]0 R# }6 I* P! c- Q$ ]
  • 也不能设置一个上限价格,比如在交易执行时到达多少 key 或者多少价格就不进行购买;
    4 n% p' i5 w/ A+ E) g
  • 容易被狙击,其他人可以通过新地址执行购买操作来吸引这样的机器人,以达到骗取手续费、卖出获利的目的;( R% W3 ?$ T/ o7 M' s9 L2 {4 o
首先考虑解决问题1、2,EVM 的一个好处就是可以原子性地在一个合约中调用其他合约,所以只需要部署一个合约去进行购买,并且设置一系列的条件即可,例如 Github 上开源的合约代码 friendrekt,可以设置最高买入价格,以及数量。
# x  J: W2 {, w& K7 X% F对于问题3,最简单的方式就是利用官方的接口 https://prod-api.kosetto.com/users/{address}进行查询,得到对应地址的用户 Twitter 信息,然后查询 Twitter 粉丝数等信息来进行筛选,筛选后再判断是否购买,购买多少以及最高价格是多少。于此,机器人的操作流程变为如下图所示。+ {: i6 w% P5 f" |
, |+ O" n* r* F+ {) X! E# N  o4 `
技术爆炸可以看到,这个过程增加了信息请求和智能合约调用,机器人在监听到合约事件后,经过简单的逻辑判断后确定为新的账号激活,再利用 api 查询到相关信息以进行过滤,最后利用部署的智能合约来完成购买。但是这样的机器人依然存在缺陷:
# u  h9 f$ z3 h  z* F# v1 B' x9 X
    , b; J8 F5 _) j; O+ N, p4 j
  • 无法判断钓鱼的推特账号,部分账号的粉丝数量较高,但都是僵尸粉,而且也没有任何的价值,买入有很大的风险;
    8 L: y  ^  d! b3 m4 ~. {
  • 粉丝数量不便于判断一个推特用户是否有价值,一些 KOL 粉丝数量少,但是会运营,这样很容易过滤掉这些人;
    ' c& ^$ m# d: Z: \- M+ z- t
  • api 存在一定的延迟,这个接口只有在用户激活后一段时间(60s)内才能查询到,很容易错过很多的地址且有很高的延迟;
    2 Y0 B. s  r( k% V6 V- a+ Z, Z
同样地,一一解决这些问题。先看问题3,得益于 0xleo 的启发 我是如何在 friend.tech 丢失 1万刀的 - 0xleo, X9 G- k& K8 W4 p1 V( M
3 z! u5 X% ~* j$ Q
发现另外一个接口可以在用户注册后就可以查询到地址信息 https://prod-api.kosetto.com/users/by-id/{id},那么可以持续递增地监控这个接口查找最新的 id,并且得到注册者的信息。如果判断为有价值的注册者就将地址存放到缓存中(为了保证重启持久化,还需要一个数据库),在链上事件监听并命中缓存后就进行购买。
! e4 ~/ C% B: }6 j: F" h其次是问题1、2,如何判断一个用户是否有价值?那么就需要一些第三方的 Twitter KOL 评分网站的辅助了,笔者在探索的过程中使用的是 Twiiterscan 来进行查询,由于可以预先得到注册信息,所以在激活前查询 Twiiterscan 所耗费的时间是没有太多的影响的。除此之外,还可以手动设置白名单以及买入价格来完成购买配置。
; ^& w; {4 L$ v3 }- b+ m: `最后,我们所实现的 bot 的基本流程如下。由一个额外的“机器人”去拉取 api 的最新信息,并在判断后存放到数据库、缓存,专门负责购买的机器人则在收到事件后查询缓存信息,在命中缓存后进行购买。这个缓存中也可以存放白名单信息,选择一些有价值的 KOL 后设定价格、数量去买入。
* X8 m! Y; P. w* g' J4 N( H  E) J: j7 p+ E1 |
由于笔者实现这个 bot 的时间比较晚了,所以盈利也不是很客观。9月底开始着手实现、优化,在10月3号左右达到最高1.2E的收益,在那几天没有及时出手后利润回撤,在加上一系列手续费开销后算是没有盈利也没有亏损。这样架构的机器人能够在注册者买入后的第一个区块实现买入,由于 base 上没有内存池扫描这样的骚操作,大多数跟随同一个区块买入的基本上是一种疯狂的玩法:在监听到买入后一直执行买入,直到买入完成,例如在这个过程中看到的另外一个机器人:https://basescan.org/address/0x88e6aeb90795f586542b4062cb9f853a5582966c( A4 u& d/ {% D3 K* K7 d0 N
它的策略很简单,在上面我们所介绍的架构的基础上,不存放数据库,直接开始进行买入,直到买入完成。在优化到这个程度后就是拼资金量的游戏了,烧得起 gas 就可以这样的玩法,并且在策略正确的情况下利润也特别可观。
' a0 _$ c. g: t% d结语在前言部分中我们还提到了买卖、手续费欺骗的操作,在这里就随便介绍一下:
' m% d' P1 R5 V$ z& p% E& {2 P

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

本版积分规则

成为第一个吐槽的人

华梦一生 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13