前言
Friend.Tech 是一個(gè)基于智能合約的社交平臺(tái),用戶需要連接自己的推特來進(jìn)行注冊(cè),并“發(fā)行”自己的 key,擁有 key 的用戶可以進(jìn)入類似群聊的 room 中和 key 的 owner 進(jìn)行交流。它依然是一種中心化的社交平臺(tái),只是依賴于鏈上的智能合約實(shí)現(xiàn)了 key 的購買、出售邏輯,而主要的功能是基于網(wǎng)頁所實(shí)現(xiàn)的 IM 應(yīng)用。而且出售、購買 key 的過程中,會(huì)將價(jià)值的 10% 劃分為兩部分,一部分給 Friend.Tech 開發(fā)者,另一部分給對(duì)應(yīng) room 的 owner。那么,在這樣的 key 可以繞過前端完成購買、出售的情況下,自然而然會(huì)產(chǎn)生鏈上的機(jī)器人來進(jìn)行打新、買賣、手續(xù)費(fèi)欺騙的操作。那么,它們又是如何實(shí)現(xiàn)的?
淺談打新機(jī)器人
打新機(jī)器人在 Friend.Tech 運(yùn)營的前期能有很可觀的收益,因?yàn)檫@個(gè)時(shí)候鏈上的狙擊機(jī)器人還沒有進(jìn)化到一定的程度,在進(jìn)行簡單的信息判斷后就可以進(jìn)行購買且能夠有很高的盈利期望?,F(xiàn)在,先從最簡單的機(jī)器人實(shí)現(xiàn)邏輯開始,一步步完成一個(gè)復(fù)雜的 bot 邏輯。
當(dāng)然,在此之前需要介紹 **Event**,事件是在 Solidity 編程語言下對(duì) EVM 中的日志事件的抽象。通常會(huì)搭配一個(gè) emit 語句來**觸發(fā)事件**。對(duì)應(yīng)在區(qū)塊鏈瀏覽器中就是交易的 logs,例如下面一筆購買 key 的交易,它觸發(fā)了一個(gè) Trade 事件,事件中包含了一系列的信息。
合約時(shí)間
Event 是 DApp 中很重要的一部分,通過它們可以監(jiān)聽到合約的狀態(tài)變更,例如 Friend.Tech 也會(huì)監(jiān)聽該合約來對(duì)數(shù)據(jù)庫中的一系列數(shù)據(jù)進(jìn)行調(diào)整,例如前端的顯示價(jià)格,holding 數(shù)量等。
最簡思路
那么,最為簡單的一個(gè)打新機(jī)器人的邏輯是這樣:監(jiān)聽 Friend.Tech 的合約事件,在發(fā)現(xiàn)一筆交易所觸發(fā)的事件滿足以下條件時(shí)就調(diào)用 Friend.Tech 的合約跟著買入
* 事件為購買(`isBuy` 值為真)
* 交易者和 owner 是同一個(gè)地址(`trader` == `subject`)
* 交易為創(chuàng)建 room 的交易 (`supply` 為 1)
下圖為該過程的流程示意圖
最簡Bot
合約?原子性!
這樣的機(jī)器人存在一定的問題:
1. 不能保證打新一定能買到,其次是無法精確地給出能夠購買 key 所需要花費(fèi)的 eth 數(shù)量;
2. 也不能設(shè)置一個(gè)上限價(jià)格,比如在交易執(zhí)行時(shí)到達(dá)多少 key 或者多少價(jià)格就不進(jìn)行購買;
3. 容易被狙擊,其他人可以通過新地址執(zhí)行購買操作來吸引這樣的機(jī)器人,以達(dá)到騙取手續(xù)費(fèi)、賣出獲利的目的;
首先考慮解決問題1、2,EVM 的一個(gè)好處就是可以原子性地在一個(gè)合約中調(diào)用其他合約,所以只需要部署一個(gè)合約去進(jìn)行購買,并且設(shè)置一系列的條件即可,例如 Github 上開源的合約代碼 [friendrekt],可以設(shè)置最高買入價(jià)格,以及數(shù)量。
對(duì)于問題3,最簡單的方式就是利用官方的接口https://prod-api.kosetto.com/users/{address}
進(jìn)行查詢,得到對(duì)應(yīng)地址的用戶 Twitter 信息,然后查詢 Twitter 粉絲數(shù)等信息來進(jìn)行篩選,篩選后再判斷是否購買,購買多少以及最高價(jià)格是多少。于此,機(jī)器人的操作流程變?yōu)槿缦聢D所示。
引入代購合約
技術(shù)爆炸
可以看到,這個(gè)過程增加了信息請(qǐng)求和智能合約調(diào)用,機(jī)器人在監(jiān)聽到合約事件后,經(jīng)過簡單的邏輯判斷后確定為新的賬號(hào)激活,再利用 api 查詢到相關(guān)信息以進(jìn)行過濾,最后利用部署的智能合約來完成購買。但是這樣的機(jī)器人依然存在缺陷:
1. 無法判斷釣魚的推特賬號(hào),部分賬號(hào)的粉絲數(shù)量較高,但都是僵尸粉,而且也沒有任何的價(jià)值,買入有很大的風(fēng)險(xiǎn);
2. 粉絲數(shù)量不便于判斷一個(gè)推特用戶是否有價(jià)值,一些 KOL 粉絲數(shù)量少,但是會(huì)運(yùn)營,這樣很容易過濾掉這些人;
3. api 存在一定的延遲,這個(gè)接口只有在用戶激活后一段時(shí)間(60s)內(nèi)才能查詢到,很容易錯(cuò)過很多的地址且有很高的延遲;
同樣地,一一解決這些問題。先看問題3,得益于 0xleo 的提醒 [我是如何在 friend.tech 丟失 1萬刀的 - 0xleo],發(fā)現(xiàn)另外一個(gè)接口可以在用戶注冊(cè)后就可以查詢到地址信息 `https://prod-api.kosetto.com/users/by-id/{id}`,那么可以持續(xù)遞增地監(jiān)控這個(gè)接口查找最新的 id,并且得到注冊(cè)者的信息。如果判斷為有價(jià)值的注冊(cè)者就將地址存放到緩存中(為了保證重啟持久化,還需要一個(gè)數(shù)據(jù)庫),在鏈上事件監(jiān)聽并命中緩存后就進(jìn)行購買。
其次是問題1、2,如何判斷一個(gè)用戶是否有價(jià)值?那么就需要一些第三方的 Twitter KOL 評(píng)分網(wǎng)站的輔助了,筆者在探索的過程中使用的是 Twiiterscan 來進(jìn)行查詢,由于可以預(yù)先得到注冊(cè)信息,所以在激活前查詢 Twiiterscan 所耗費(fèi)的時(shí)間是沒有太多的影響的。除此之外,還可以手動(dòng)設(shè)置白名單以及買入價(jià)格來完成購買配置。
最后,我們所實(shí)現(xiàn)的 bot 的基本流程如下。由一個(gè)額外的“機(jī)器人”去拉取 api 的最新信息,并在判斷后存放到數(shù)據(jù)庫、緩存,專門負(fù)責(zé)購買的機(jī)器人則在收到事件后查詢緩存信息,在命中緩存后進(jìn)行購買。這個(gè)緩存中也可以存放白名單信息,選擇一些有價(jià)值的 KOL 后設(shè)定價(jià)格、數(shù)量去買入。
提前監(jiān)聽與影響力分析
由于筆者實(shí)現(xiàn)這個(gè) bot 的時(shí)間比較晚了,所以盈利也不是很客觀。9月底開始著手實(shí)現(xiàn)、優(yōu)化,在10月3號(hào)左右達(dá)到最高1.2E的收益,在那幾天沒有及時(shí)出手后利潤回撤,在加上一系列手續(xù)費(fèi)開銷后算是沒有盈利也沒有虧損。這樣架構(gòu)的機(jī)器人能夠在注冊(cè)者買入后的第一個(gè)區(qū)塊實(shí)現(xiàn)買入,由于 base 上沒有內(nèi)存池掃描這樣的騷操作,大多數(shù)跟隨同一個(gè)區(qū)塊買入的基本上是一種瘋狂的玩法:在監(jiān)聽到買入后一直執(zhí)行買入,直到買入完成,例如在這個(gè)過程中看到的另外一個(gè)機(jī)器人:https://basescan.org/address/0x88e6aeb90795f586542b4062cb9f853a5582966c 。
它的策略很簡單,在上面我們所介紹的架構(gòu)的基礎(chǔ)上,不存放數(shù)據(jù)庫,直接開始進(jìn)行買入,直到買入完成。在優(yōu)化到這個(gè)程度后就是拼資金量的游戲了,燒得起 gas 就可以這樣的玩法,并且在策略正確的情況下利潤也特別可觀。
結(jié)語
在前言部分中我們還提到了買賣、手續(xù)費(fèi)欺騙的操作,在這里就隨便介紹一下:
1. 買賣的是一種跟單機(jī)器人,跟蹤到盈利較好的地址后可以跟隨它的操作,原理也很簡單,將監(jiān)聽的地址過濾一下,如果是目標(biāo)地址就跟隨操作;
2. 手續(xù)費(fèi)欺騙分兩種(筆者在開發(fā)過程中觀察到的),一種是利用粉絲數(shù)較多的推特賬號(hào)來完成的,直接購買并且很快就出售以完成收割。另外一種就是不停建立新地址,轉(zhuǎn)賬然后執(zhí)行購買操作又很快賣出。第二種主要針對(duì)的是最簡邏輯的bot,在初期應(yīng)該也能有很好的盈利。
至此,我們完成了對(duì)鏈上機(jī)器人原理的介紹,具體的實(shí)現(xiàn)涉及到代碼不再進(jìn)行說明,想要了解的朋友也可以參考 [friendrekt]的實(shí)現(xiàn)。
免責(zé)聲明:本文不構(gòu)成投資建議,用戶應(yīng)考慮本文中的任何意見、觀點(diǎn)或結(jié)論是否符合其特定狀況,及遵守所在國家和地區(qū)的相關(guān)法律法規(guī)。
歡迎轉(zhuǎn)載分享!
轉(zhuǎn)載請(qǐng)注明本文地址:
如有文章侵犯了您的權(quán)利,請(qǐng)聯(lián)系本站站長,我們將在第一時(shí)間刪除相關(guān)內(nèi)容,謝謝!