你的錢包並不保存一份鏈的副本。它去問一個節點,而它問的那個地址,就是躺在網絡設定裡的那個端點。改掉這個地址只要幾秒鐘,卻會換掉那個回答你關於自己餘額的每一個問題的人。所以這件事值得刻意去做,而不是順手就做。
網絡設定裡的那個端點是什麼
遠程過程調用端點,是你的錢包把問題發過去的一個網址。這個地址上有沒有資金、現在一筆交易要花多少、這一筆被打包了沒有、請把這個已簽名的對象轉發給網絡。端點作答,而它的回答就是你螢幕上看到的東西。
那個地址背後的機器是一個 RPC 節點,它同時對外暴露一個公開接口,好讓錢包與應用不必自己跑一個。下文把這項設定簡稱為端點。
這套安排會引出兩件方向相反的事。端點不是鏈的一部分,所以換掉它,不會改變你的密鑰、你的地址,也不會改變賬上記着的餘額。端點又是你看見鏈的唯一憑藉,所以換掉它,會改變你被展示的一切。
你為什麼會去換一個
最尋常的理由,是現在這個已經答不好了。一個宕機的、在對你限流的、或者落後於鏈頭的節點,不會把這些宣告出來。它給出的是過期的餘額、一筆已確認卻仍顯示為待處理的交易,或者一次在連接上就失敗的廣播 —— 而你的賬戶本身毫無問題。
第二個理由是覆蓋面。錢包內置的網絡清單很短,清單之外的鏈得手工添加,端點也一併添加。添加網絡與添加端點,是在同一個對話框裡完成的同一個動作。
第三個理由是私隱。你發出的每一個請求都經過同一個營運方,於是這個營運方能把你的多個地址彼此關聯、也能與一個 IP 地址關聯。換到另一個提供方,是把這種可見性挪個位置,而不是把它消掉,所以要把這個選擇當成挑選誰在看,而不是當成隱身。
端點能改變什麼,不能改變什麼
分界線是簽名。你的錢包在本地構造交易,並用一把從不離開設備的密鑰簽名,所以端點收到的是一個成品對象 —— 它一改就失效。它可以拒絕轉發、可以拖延、可以轉發到別處,但它改不了裡面的金額和收款方。
它能做的,是塑造你據以決策的輸入。餘額、代幣清單、手續費估算與確認狀態,全都經端點抵達,而一個懷有惡意的端點,儘可以報出乾脆編出來的數字。真正的危險在這裡:不是密鑰被偷,而是決策建立在一幅假的圖景上。
| 你正在看的東西 | 惡意端點能不能偽造 | 靠什麼判定 |
|---|---|---|
| 餘額與代幣清單 | 能 | 在第二個來源上讀同一個地址 |
| 手續費估算 | 能 | 簽名前核對錢包顯示的費用 |
| 交易歷史 | 能 | 一個自己跑基礎設施的區塊瀏覽器 |
| 確認狀態 | 能 | 換一個端點重查一遍 |
| 你簽下的那份內容 | 不能 | 簽名覆蓋了整個載荷 |
| 你的私鑰 | 不能 | 它從不被發往任何地方 |
由此得到的實際結論是:一個端點值得你用審視一個要連錢包的網站那樣去審視。從客服聊天裡貼來的、或由搜尋廣告送到你面前的地址,與一個假冒加密網站屬於同一類東西,理由也一樣。
鏈 ID 是抓住錯網絡的那道檢查
每一條網絡都帶着一個標識符,它就活在被簽名的交易內部。EIP-155 引入它,是為了阻止一筆為某條鏈簽好的交易在另一條鏈上仍然有效;做法是把鏈 ID 摺進參與雜湊與簽名的數據裡。在一個鏈 ID 下做出的簽名,在使用另一個鏈 ID 的鏈上毫無意義。
這給了你一道不必信任任何人的檢查。eth_chainId 方法返回的是用於簽署防重放交易的鏈 ID,所以你可以直接問端點:它認為自己在服務哪條網絡。如果這個答案與你錢包為該網絡條目存下的鏈 ID 不一致,兩者說的就不是同一條鏈。
EIP-3085,那份用程序方式添加鏈的接口提案,把同一道比對寫進了錢包。它要求:當聲明的鏈 ID 與所提供端點報出的不一致時,請求必須被拒絕;並且寫明,這些端點不能被假定為誠實的、正確的,甚至不能假定它們指向同一條鏈。在簽名這一側,它的指令還要更窄:只使用錢包已經持有的鏈 ID,絕不使用從端點收來的那一個。
在把任何東西路由過去之前,先檢查這個端點
四道檢查,按代價從低到高。先確認鏈 ID,因為這是唯一一個不存在程度問題的答案。然後拿它報出的區塊高度,與一個獨立來源對一對。一個遠遠落後於鏈頭的節點不是惡意的,它只是過期,而過期已經足以讓它告訴你的其餘一切都是錯的。
接着比一件你已經知道的事。打開一個你能在別處核實餘額的地址,看兩邊的視圖是否一致。此刻出現出入,就是叫你在簽任何東西之前停下 —— 儘管它還沒告訴你原因是延遲還是惡意。
最後,當這個端點對你是新的、而金額對你不是新的,就先發一筆小額交易,看着它確認。要點不在於風險有多小,而在於一次完整的往返會同時演練廣播與回讀 —— 這正是一個壞端點會分別弄壞的那兩半。
手工添加一個,而不弄壞錢包
要添加,不要覆蓋。凡錢包允許你為同一條鏈保留多個條目,把那個原本能用的留着,就意味着一次糟糕的切換只需選回上一個條目即可撤銷,而不必去重打一個你已經沒有了的網址。給每個條目起一個說明由誰營運的名字,好讓選擇器讀起來是一份營運方名單,而不是一份彼此相同的鏈名清單。
條目的其餘部分,從網絡自己的文檔裡填,不要從把端點交給你的那個人那裡填。鏈 ID、幣種符號和區塊瀏覽器,都屬於錢包之後會顯示的東西;一個端點填對、符號填錯的條目,會悄悄給你看的每一筆金額貼錯標籤。
然後在保存之後檢查這個條目,而不是在保存之前。對話框校驗的是你打進去的字;真正要緊的是這個已保存的條目做了什麼。切換到它,讓餘額加載完,確認它們與上一個條目顯示的一致。一個在你自己餘額這件事上與前任不一致的網絡條目,正在告訴你一些事情,而知道它的時機是在你簽名之前。
什麼時候換端點不是解法
新端點改變的是你能看見什麼,所以它修的是由資訊缺失或過期造成的問題。它夠不到鏈上已經發生的事。一筆交易一旦被廣播,它就待在每一個收到它的節點的內存池裡,而換掉你錢包對話的那個節點,並不能把它召回。
同樣的界限也適用於鏈已經記錄下來的失敗。一筆執行了又被回滾的交易是 reverted,這個結果被寫進一份收據,任何誠實的端點報出來都一樣。從兩個互相獨立的端點都看到它,意味着答案不是再去找第三個。
夾在這兩種情形之間的,是另一類換端點確實能清掉的報錯,因為它來自一份緩存的視圖,而不是來自鏈。一個在換網絡或重裝之後報 Nonce 太高的錢包,是在拿它自己的計數與某個端點告訴它的東西比對;通過一個健康的節點重新連上,能讓它從一個足夠新的來源重新讀一遍這個計數。
小結
端點不是鏈的一部分,也不是你錢包密鑰安全的一部分,但它就是你能看見的全部;而一個建立在編造數字上的決策,代價與一個密鑰被偷之後的決策一樣大。切換端點是針對過期或無響應網絡的常規修復,而讓它安全的紀律很小:知道你要添加的這個由誰營運、確認鏈 ID、並且保留那個原本就能用的條目。
鏈 ID 那道檢查是四道裡最便宜的,也是該最先跑的一道。問端點它服務的是哪條鏈,再與你錢包已經持有的比一比 —— 這一次比對同時抓住兩件事:添加錯網絡這個誠實的失誤,以及一個想讓你相信自己身在別處的端點這個不誠實的情形。想繼續打好這些基礎,請追蹤 Bitbase(幣貝)學院的更多內容。
相關閱讀
幣貝上與本主題相關的其他文章:
- Fill or Kill、Immediate or Cancel 與 All or None 詳解
風險披露:本文為 Bitbase(幣貝)學院的科普內容,僅供教育與資訊參考,不構成任何投資、交易、稅務或財務建議。加密資產波動劇烈,請自行評估風險。本文撰寫於 2026 年 9 月,請以官方最新資訊為準。
參考資料
[1] Ethereum Improvement Proposals,EIP-155: Simple replay attack protection,狀態 Final eips.ethereum.org
[2] Ethereum Improvement Proposals,EIP-3085: wallet_addEthereumChain RPC Method,狀態 Stagnant eips.ethereum.org
[3] ethereum.org 開發者文件,JSON-RPC API,eth_chainId 方法 ethereum.org






