Hi 游客

更多精彩,请登录!

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

; m) p+ }. o% q' j  ^! m$ r; O- oEvent 是 DApp 中很重要的一部分,通过它们可以监听到合约的状态变更,例如 Friend.Tech 也会监听该合约来对数据库中的一系列数据进行调整,例如前端的显示价格,holding 数量等。* E: [1 I. P6 o* `5 I# h1 c
最简思路那么,最为简单的一个打新机器人的逻辑是这样:监听 Friend.Tech 的合约事件,在发现一笔交易所触发的事件满足以下条件时就调用 Friend.Tech 的合约跟着买入
3 {4 g% A  ~* e9 [# k/ T9 k
    % S" L9 H# Z, P9 {3 k& K1 I$ ^" j
  • 事件为购买(isBuy 值为真)7 H+ Y+ T3 r2 ~9 Q; x' _* T
  • 交易者和 owner 是同一个地址(trader == subject)
    4 h; H" _& U+ ]) b9 M$ s- Y5 C
  • 交易为创建 room 的交易 (supply 为 1)# @! j' d  m8 ]9 ~$ |
下图为该过程的流程示意图
" h2 z% x, N, [0 D3 d
* E- x- B  u4 b" X" _9 S合约?原子性!这样的机器人存在一定的问题:9 t$ ~% W" R9 S- S( L3 h. i  m

    $ C- ^5 j2 t; h
  • 不能保证打新一定能买到,其次是无法精确地给出能够购买 key 所需要花费的 eth 数量;( \9 S2 n. v1 H, F- y" @1 N
  • 也不能设置一个上限价格,比如在交易执行时到达多少 key 或者多少价格就不进行购买;
    . L) s$ I. M  J2 ?
  • 容易被狙击,其他人可以通过新地址执行购买操作来吸引这样的机器人,以达到骗取手续费、卖出获利的目的;
    - J: T/ X/ B0 o9 i# ]2 w
首先考虑解决问题1、2,EVM 的一个好处就是可以原子性地在一个合约中调用其他合约,所以只需要部署一个合约去进行购买,并且设置一系列的条件即可,例如 Github 上开源的合约代码 friendrekt,可以设置最高买入价格,以及数量。# ^; q9 a3 ^2 @- ]* G$ f" C
对于问题3,最简单的方式就是利用官方的接口 https://prod-api.kosetto.com/users/{address}进行查询,得到对应地址的用户 Twitter 信息,然后查询 Twitter 粉丝数等信息来进行筛选,筛选后再判断是否购买,购买多少以及最高价格是多少。于此,机器人的操作流程变为如下图所示。
& q( |% H* B& j- p! i. Z5 G# V/ q% {2 {% `, j4 L* Z8 h
技术爆炸可以看到,这个过程增加了信息请求和智能合约调用,机器人在监听到合约事件后,经过简单的逻辑判断后确定为新的账号激活,再利用 api 查询到相关信息以进行过滤,最后利用部署的智能合约来完成购买。但是这样的机器人依然存在缺陷:$ g8 O: ]# w6 y4 J, l

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

本版积分规则

成为第一个吐槽的人

华梦一生 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13