Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
前言Friend.Tech 是一个基于智能合约的社交平台,用户需要连接自己的推特来进行注册,并“发行”自己的 key,拥有 key 的用户可以进入类似群聊的 room 中和 key 的 owner 进行交流。它依然是一种中心化的社交平台,只是依赖于链上的智能合约实现了 key 的购买、出售逻辑,而主要的功能是基于网页所实现的 IM 应用。而且出售、购买 key 的过程中,会将价值的 10% 划分为两部分,一部分给 Friend.Tech 开发者,另一部分给对应 room 的 owner。那么,在这样的 key 可以绕过前端完成购买、出售的情况下,自然而然会产生链上的机器人来进行打新、买卖、手续费欺骗的操作。那么,它们又是如何实现的?
* S8 }& }' F1 d; c3 T! E谈谈打新机器人打新机器人在 Friend.Tech 运营的前期能有很可观的收益,因为这个时候链上的狙击机器人还没有进化到一定的程度,在进行简单的信息判断后就可以进行购买且能够有很高的盈利期望。现在,先从最简单的机器人实现逻辑开始,一步步完成一个复杂的 bot 逻辑。2 Z; u. S7 V, b
当然,在此之前需要介绍 Event,事件是在 Solidity 编程语言下对 EVM 中的日志事件的抽象。通常会搭配一个 emit 语句来触发事件。对应在区块链浏览器中就是交易的 logs,例如下面一笔购买 key 的交易,它触发了一个 Trade 事件,事件中包含了一系列的信息
! m' `2 z; q, L8 r! i0 L' L4 p- O
' V/ q5 ]. e8 R/ P* T4 REvent 是 DApp 中很重要的一部分,通过它们可以监听到合约的状态变更,例如 Friend.Tech 也会监听该合约来对数据库中的一系列数据进行调整,例如前端的显示价格,holding 数量等。' O( X# p8 {0 T* \: B. N. t% Y
最简思路那么,最为简单的一个打新机器人的逻辑是这样:监听 Friend.Tech 的合约事件,在发现一笔交易所触发的事件满足以下条件时就调用 Friend.Tech 的合约跟着买入
, x' w) S& a2 i: o0 B( [8 K" `4 R
    ( C. Q0 \3 _# v$ o, }2 X
  • 事件为购买(isBuy 值为真), M& ^* d* w% c5 {6 D  H
  • 交易者和 owner 是同一个地址(trader == subject)
    * Q9 p. w# Y/ O' M8 V
  • 交易为创建 room 的交易 (supply 为 1)
    . a- L0 J9 ?3 W  q9 R& R
下图为该过程的流程示意图! Y3 l. W5 s, P2 |+ R3 B

- G  R# Y; E, s5 {合约?原子性!这样的机器人存在一定的问题:
7 [' u9 B; j- D% \8 d5 c8 Y+ m
    4 J' P3 k4 R0 J+ j7 f
  • 不能保证打新一定能买到,其次是无法精确地给出能够购买 key 所需要花费的 eth 数量;0 D7 t( I7 c7 x1 D& o7 j1 a
  • 也不能设置一个上限价格,比如在交易执行时到达多少 key 或者多少价格就不进行购买;7 B9 Y  H; m9 w3 N4 W( p, @
  • 容易被狙击,其他人可以通过新地址执行购买操作来吸引这样的机器人,以达到骗取手续费、卖出获利的目的;+ n) ?) x) u& Z( k1 @- a5 i
首先考虑解决问题1、2,EVM 的一个好处就是可以原子性地在一个合约中调用其他合约,所以只需要部署一个合约去进行购买,并且设置一系列的条件即可,例如 Github 上开源的合约代码 friendrekt,可以设置最高买入价格,以及数量。; |5 k' Y. O8 I8 r% M" p. `2 B2 a
对于问题3,最简单的方式就是利用官方的接口 https://prod-api.kosetto.com/users/{address}进行查询,得到对应地址的用户 Twitter 信息,然后查询 Twitter 粉丝数等信息来进行筛选,筛选后再判断是否购买,购买多少以及最高价格是多少。于此,机器人的操作流程变为如下图所示。4 q" K0 r; ^! J% b8 ]( G8 o* X: v

& t* z# U, b% e0 N9 X技术爆炸可以看到,这个过程增加了信息请求和智能合约调用,机器人在监听到合约事件后,经过简单的逻辑判断后确定为新的账号激活,再利用 api 查询到相关信息以进行过滤,最后利用部署的智能合约来完成购买。但是这样的机器人依然存在缺陷:: }( V" k8 _0 l; X5 u# q$ S

    2 i# \2 L& V$ `) m9 a4 Z# s
  • 无法判断钓鱼的推特账号,部分账号的粉丝数量较高,但都是僵尸粉,而且也没有任何的价值,买入有很大的风险;
    ; C5 U8 w6 V! d
  • 粉丝数量不便于判断一个推特用户是否有价值,一些 KOL 粉丝数量少,但是会运营,这样很容易过滤掉这些人;
    & T6 G' _+ ?, {7 o
  • api 存在一定的延迟,这个接口只有在用户激活后一段时间(60s)内才能查询到,很容易错过很多的地址且有很高的延迟;
    8 ]  }  |3 @2 N) ]* p+ \5 ~
同样地,一一解决这些问题。先看问题3,得益于 0xleo 的启发 我是如何在 friend.tech 丢失 1万刀的 - 0xleo- L# ^  Y0 f$ q/ K1 k- r) T
2 L/ F$ P; G6 q$ t" n
发现另外一个接口可以在用户注册后就可以查询到地址信息 https://prod-api.kosetto.com/users/by-id/{id},那么可以持续递增地监控这个接口查找最新的 id,并且得到注册者的信息。如果判断为有价值的注册者就将地址存放到缓存中(为了保证重启持久化,还需要一个数据库),在链上事件监听并命中缓存后就进行购买。
$ r+ M4 o* r* s其次是问题1、2,如何判断一个用户是否有价值?那么就需要一些第三方的 Twitter KOL 评分网站的辅助了,笔者在探索的过程中使用的是 Twiiterscan 来进行查询,由于可以预先得到注册信息,所以在激活前查询 Twiiterscan 所耗费的时间是没有太多的影响的。除此之外,还可以手动设置白名单以及买入价格来完成购买配置。; Y9 k% ]0 \8 N  H
最后,我们所实现的 bot 的基本流程如下。由一个额外的“机器人”去拉取 api 的最新信息,并在判断后存放到数据库、缓存,专门负责购买的机器人则在收到事件后查询缓存信息,在命中缓存后进行购买。这个缓存中也可以存放白名单信息,选择一些有价值的 KOL 后设定价格、数量去买入。
. H3 z6 f# g3 o7 @4 d8 @8 n* l5 S( i. i' p" l4 y! ]/ U
由于笔者实现这个 bot 的时间比较晚了,所以盈利也不是很客观。9月底开始着手实现、优化,在10月3号左右达到最高1.2E的收益,在那几天没有及时出手后利润回撤,在加上一系列手续费开销后算是没有盈利也没有亏损。这样架构的机器人能够在注册者买入后的第一个区块实现买入,由于 base 上没有内存池扫描这样的骚操作,大多数跟随同一个区块买入的基本上是一种疯狂的玩法:在监听到买入后一直执行买入,直到买入完成,例如在这个过程中看到的另外一个机器人:https://basescan.org/address/0x88e6aeb90795f586542b4062cb9f853a5582966c. ]6 @1 e1 A% ~0 v8 I
它的策略很简单,在上面我们所介绍的架构的基础上,不存放数据库,直接开始进行买入,直到买入完成。在优化到这个程度后就是拼资金量的游戏了,烧得起 gas 就可以这样的玩法,并且在策略正确的情况下利润也特别可观。% F- w0 r9 T: b' X
结语在前言部分中我们还提到了买卖、手续费欺骗的操作,在这里就随便介绍一下:
8 I# m" K: W8 Q# K
    6 r6 o1 W5 A3 s7 X8 F
  • 买卖的是一种跟单机器人,跟踪到盈利较好的地址后可以跟随它的操作,原理也很简单,将监听的地址过滤一下,如果是目标地址就跟随操作;
    " T) q  M) F) n% i; p. C; \
  • 手续费欺骗分两种(笔者在开发过程中观察到的),一种是利用粉丝数较多的推特账号来完成的,直接购买并且很快就出售以完成收割。另外一种就是不停建立新地址,转账然后执行购买操作又很快卖出。第二种主要针对的是最简逻辑的bot,在初期应该也能有很好的盈利。: F0 {7 T' H3 r! L
至此,我们完成了对链上机器人原理的介绍,具体的实现涉及到代码不再进行说明,想要了解的朋友也可以参考 friendrekt 的实现。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华梦一生 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13