前言
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
合約?原子性!
這樣的機器人存在一定的問題:
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






