Friend.Tech 是一個基於智慧合約的社交平臺,使用者需要連線自己的推特來進行註冊,並 「發行」 自己的 key,擁有 key 的使用者可以進入類似群聊的 room 中和 key 的 owner 進行交流。
(前情提要:Friend.Tech爆紅冒出各種「仿盤」,誰能將SocialFi帶往下個階段? )
(背景補充:Friend.tech爆紅》盤點8個不可錯過的華語KOL )
前言
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)
下圖為該過程的流程示意圖
合約?原子性!
這樣的機器人存在一定的問題:
- 不能保證打新一定能買到,其次是無法精確地給出能夠購買 key 所需要花費的 eth 數量;
- 也不能設定一個上限價格,比如在交易執行時到達多少 key 或者多少價格就不進行購買;
- 容易被狙擊,其他人可以通過新地址執行購買操作來吸引這樣的機器人,以達到騙取手續費、賣出獲利的目的;
首先考慮解決問題 1、2,EVM 的一個好處就是可以原子性地在一個合約中呼叫其他合約,所以只需要部署一個合約去進行購買,並且設定一系列的條件即可,例如 Github 上開源的合約程式碼 [ friendrekt ],可以設定最高買入價格,以及數量。
對於問題 3,最簡單的方式就是利用官方的介面
https://prod-api.kosetto.com/users/{address}
進行查詢,得到對應地址的使用者 Twitter 資訊,然後查詢 Twitter 粉絲數等資訊來進行篩選,篩選後再判斷是否購買,購買多少以及最高價格是多少。於此,機器人的操作流程變為如下圖所示。
技術爆炸
可以看到,這個過程增加了資訊請求和智慧合約呼叫,機器人在監聽到合約事件後,經過簡單的邏輯判斷後確定為新的帳號啟用,再利用 api 查詢到相關資訊以進行過濾,最後利用部署的智慧合約來完成購買。但是這樣的機器人依然存在缺陷:
- 無法判斷釣魚的推特帳號,部分帳號的粉絲數量較高,但都是殭屍粉,而且也沒有任何的價值,買入有很大的風險;
- 粉絲數量不便於判斷一個推特使用者是否有價值,一些 KOL 粉絲數量少,但是會運營,這樣很容易過濾掉這些人;
- 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 就可以這樣的玩法,並且在策略正確的情況下利潤也特別可觀。
結語
在前言部分中我們還提到了買賣、手續費欺騙的操作,在這裡就隨便介紹一下:
- 買賣的是一種跟單機器人,追蹤到盈利較好的地址後可以跟隨它的操作,原理也很簡單,將監聽的地址過濾一下,如果是目標地址就跟隨操作;
- 手續費欺騙分兩種(筆者在開發過程中觀察到的),一種是利用粉絲數較多的推特帳號來完成的,直接購買並且很快就出售以完成收割。另外一種就是不停建立新地址,轉帳然後執行購買操作又很快賣出。第二種主要針對的是最簡邏輯的 bot,在初期應該也能有很好的盈利。
至此,我們完成了對鏈上機器人原理的介紹,具體的實現涉及到程式碼不再進行說明,想要了解的朋友也可以參考 [ friendrekt ] 的實現。