帳戶與安全
買了新代幣卻賣不掉?Honeypot(貔貅盤)買入前檢查與卡住後的處理
代幣買得進、賣不出,是因為合約的轉帳邏輯可以限制賣出。本文以 OpenZeppelin 官方文件說明原理,列出買入前在區塊瀏覽器檢查原始碼、權限與試賣的順序,以及已經賣不掉時先做什麼、別做什麼。
買進一個新代幣很順利,價格看起來還在漲,等到想賣的時候,兌換頁卻一直顯示交易失敗,或者賣出後幾乎拿不回任何錢。這類「只進不出」的代幣,常被叫做 Honeypot(中文圈也稱「貔貅盤」)。這篇說明它為什麼做得到、買入前可以檢查哪些地方,以及已經買了賣不掉時該先做什麼、不要做什麼。
適用讀者:準備在鏈上兌換新代幣,或錢包裡已經有一個賣不掉的代幣的人。 前置:會用區塊瀏覽器查合約頁;知道代幣所在的鏈。合約地址本身怎麼確認,請先看〈同名代幣有好幾個,哪個才是真的?合約地址核對步驟〉。
為什麼代幣可以「買得進、賣不出」?
在 Ethereum 與相容鏈上,ERC-20 代幣的每一筆轉帳都由代幣合約自己的程式碼決定能不能成立。最常被使用的開源實作 OpenZeppelin Contracts,就把轉帳、鑄造、銷毀集中在一個 _update 函式,並在官方文件寫明「所有對轉帳的客製化都應該覆寫這個函式」:

這個設計本身是正常的,手續費代幣、可暫停的代幣都靠它實作。但也代表部署者可以在這裡寫進任何條件。在兌換池賣出代幣,本質上就是把代幣從你的地址轉給流動性池合約,所以只要轉帳邏輯對「轉給池子」這個方向加了限制,就會出現買入(池子轉給你)成功、賣出(你轉給池子)失敗的情況。
常見的寫法有幾類:
- 黑名單或白名單:只有名單內的地址能轉出,或特定地址被禁止轉出。
- 可調整的賣出稅:合約擁有者能隨時把賣出手續費調高,調到接近 100% 時,賣出等於把代幣送給對方。
- 交易開關:擁有者可以暫停交易,或只對自己開放。
- 單筆或冷卻限制:限制每筆最大數量或兩筆之間的間隔,嚴重時讓一般人實際上無法賣出。
所以「看得到價格在漲」不代表能賣。圖表上的成交可能大多是買單,或是名單內地址的交易。
買入前怎麼檢查一個代幣能不能賣?
以下順序從成本最低的開始,任何一步出現問題就停下,不要用「先買一點點看看」來跳過前面的檢查。
1. 先確認合約地址是對的
從專案官網或官方文件取得合約地址,與區塊瀏覽器、兌換頁上的地址逐字比對。地址都不對,後面的檢查就沒有意義。
2. 在區塊瀏覽器看合約原始碼是否已驗證
打開該鏈的區塊瀏覽器,搜尋合約地址,進入合約分頁(通常標示為 Contract)。
- 有已驗證的原始碼:可以閱讀,進行下一步。
- 只有位元碼、沒有原始碼:你無法知道轉帳邏輯寫了什麼,對一般讀者來說應視為不可交易。
3. 在原始碼裡找會影響賣出的函式
不需要讀懂整份合約,用瀏覽器的頁內搜尋找這些關鍵字,看它們出現在哪裡、誰能呼叫:
blacklist、whitelist、isExcluded、botsetFee、setTax、sellFee、_sellTaxpause、tradingEnabled、enableTradingmaxTx、maxWallet、cooldown- 在
_update或_transfer裡判斷to是否為交易對(pair)地址的條件
看到這些字不一定是騙局,很多正常代幣也有交易開關或手續費。關鍵是這些開關誰能改、改的上限是多少。如果只有 onlyOwner 能呼叫、而且稅率沒有上限,就代表擁有者隨時可以讓你賣不掉。
4. 看擁有者權限與合約能不能被替換
- 在合約的讀取分頁(Read Contract)查
owner。回傳零地址0x000…000通常表示權限已放棄。 - 但如果合約是代理合約(瀏覽器會標示 Proxy,或有 Read as Proxy 分頁),程式碼可以被升級成另一份,前面看到的邏輯不代表以後。這種情況要再查誰有升級權限。
5. 用模擬工具交叉參考,但不要當成保證
網路上有一些 Honeypot 檢測網站,原理是用模擬交易試買試賣,回報能否賣出與實際稅率。它們可以幫你快速發現明顯的問題,但只反映模擬當下的狀態:擁有者之後調高稅率或加入黑名單,結果就會改變。另外,使用這類網站不需要連接錢包,要求你連錢包或簽名的,就直接離開。
6. 真的要買,先用極小金額走完一次「買入+賣出」
前面都沒發現問題,再用你可以完全損失的金額買入,馬上試賣一次,確認:
- 賣出交易在瀏覽器上顯示成功;
- 收到的金額與兌換頁預估接近,差額可以用手續費與價格影響解釋(怎麼算請看〈滑點容忍度設多少?價格影響與「最低收到」怎麼算〉)。
試賣成功也只證明「這一刻、這個金額」能賣,不代表之後還能。
已經買了卻賣不掉,先做什麼?
- 先確認是不是代幣本身的問題:把滑點容忍度稍微調高、換一個兌換介面再試一次。如果錯誤訊息是
INSUFFICIENT_OUTPUT_AMOUNT或類似的輸出不足,可能只是稅率或價格變動,不一定是 Honeypot;如果交易一律在合約內回退(瀏覽器顯示 Fail 或 Reverted),而且別人也賣不出,就要往 Honeypot 判斷。 - 不要為了「解鎖」再付錢或簽名:自稱能幫你解除限制、要你先付手續費或連接錢包簽名的人或網站,是常見的二次詐騙。合約限制只有合約擁有者能改,第三方沒有辦法替你解除。
- 檢查並撤銷對這個代幣或兌換合約的授權:如果你在過程中按過無上限授權,用區塊瀏覽器的授權檢查頁或可信的錢包功能撤銷,避免其他代幣被一併轉走。
- 不要追加買入攤平:賣出限制不會因為你持有更多而消失。
- 保留紀錄:記下合約地址、你的交易 TxID、購買管道與宣傳來源。若涉及詐騙宣傳,可向當地警方或相關機關報案時使用。
常見問題
錢包裡突然多了一個沒買過的代幣,可以賣掉嗎? 不要主動去兌換或連到它附帶的網址。這類空投代幣常用來誘導你到假網站授權或簽名。不理它是最安全的做法。
合約擁有者已經放棄權限,就一定能賣嗎? 不一定。放棄權限前設定好的限制仍然有效;代理合約也可能由別的地址掌握升級權。放棄權限只是降低之後被改規則的風險。
價格影響很大,算不算 Honeypot? 不算。流動性很少時賣出本來就會壓低成交價,但交易能成立,這是流動性問題。若還擔心送出交易被夾擊,可參考〈鏈上兌換被三明治夾了?看懂路由、MEV 與送出前的防護設定〉。
重點整理
- 代幣能不能賣,由合約的轉帳邏輯決定,價格圖表不能證明。
- 買入前依序查:合約地址、原始碼是否驗證、賣出相關開關誰能改、擁有者與升級權限、模擬工具結果,最後才用極小金額買入並立刻試賣。
- 賣不掉時不要付費「解鎖」、不要追加買入,先撤銷授權並保留紀錄。
