作者:enze,慢霧科技
Solana 是一種快速且高度可擴展的區塊鏈協議,爲去中心化應用(DApps) 提供了強大的基礎設施。近期 Solana 生態復蘇引發廣泛關注,本文將介紹 Solana 账戶、Token、交易,以及如何在這個生態中保障資產安全。
Solana 账戶
了解账戶是保障資產安全的第一步。與以太坊中的账戶不同,在 Solana 中,账戶的主要作用是存儲數據。
Solana 中的账戶主要分爲三種類型:
數據账戶:用於存儲數據。
程序账戶:用於存儲可執行程序。
原生账戶:指 Solana 上的原生程序,例如 System、Stake 以及 Vote。
其中,數據账戶可進一步分爲兩類:
系統所有账戶:由 Solana 上的原生程序生成的账戶。
程序派生账戶(PDA):籤名權限是程序的帳戶,因此不像其他帳戶那樣受私鑰控制。
每個账戶都有一個地址(一般情況下是一個公鑰)以及一個所有者(程序账戶的地址)。前者與以太坊上的類似,後者可以簡單理解爲創建該账戶的程序。
普通用戶通過錢包生成的账戶屬於數據账戶中的系統所有账戶,默認的账戶所有者是系統程序。我們可以簡單理解爲:用戶通過系統程序生成了一個系統所有账戶,這個账戶存儲了用戶的基本信息和資產等數據,而這個账戶擁有一個地址(也就是公鑰)。
以 Solana Explorer 爲例,普通用戶使用的账戶,即系統所有账戶,在瀏覽器上的展示如下圖:
Assigned Program Id 代表账戶的所有者,Allocated Data Size 表示账戶已存儲的數據大小,Executable 表示账戶是否可執行,通常只有程序账戶是可執行的。普通用戶只需關注账戶的地址。
通過以上內容,我們已經對 Solana 账戶有了初步的了解,接下來我們來認識下 Solana Token。
Solana Token
SPL-Token 代表 Solana 網絡上的所有非本地代幣,包括同質代幣和非同質代幣(NFT)。
與 ERC20 和 ERC721 代幣類似,SPL 代幣 在 Solana 上發行和交易,而其與以太坊的區別是:
在 Solana 中,Token 的發行人通過 Solana 上的原生程序 token-program 創建一個 mint-account,並在這個账戶中存儲 Token 的基本信息。例如,Solana Explorer 上的 USDC 的 mint-account 地址爲 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v。瀏覽器中顯示了有關 USDC Token Mint 的詳細信息,包括當前代幣供應量、鑄幣和凍結權限的地址以及代幣的小數精度。
接下來,讓我們了解一下什么是 token-account。
在 Solana 上,每個 Token 持有者都有一個特定的 token-account,記錄了該持有者特定 Token 的余額和相關信息。例如,Alice 同時擁有 USDT 和 USDC 兩種 Token,她將分別擁有兩個 token-account,其中一個記錄 USDT 的余額,另一個記錄 USDC 的余額。
那么如何查看自己的 token-account 呢?
我們可以使用 Solana Beach 瀏覽器,通過輸入數據账戶的地址,點擊 Portfolio,就可以清晰地看到每個 token-account,每個账戶記錄着特定 Token 的余額。
通過 Solana Beach 瀏覽器,還能查看每個账戶記錄的 Token 信息,授權情況等詳細信息。
Solana 交易
在 Solana 上,每筆交易都包含以下關鍵信息:
Instructions(指令):一個或多個指令,定義了交易中的操作,例如轉账、程序交互、Token 轉账等。
Blockhash(塊哈希):包含了最新的塊哈希值,用於確保交易在正確的塊上執行。
Signatures(籤名):一個或多個籤名,表示交易的授權。每個籤名對應着交易中的一個籤名账戶,確保只有授權的账戶可以執行這筆交易。
Solana 上的一筆交易可以包含多個指令,這意味着可以在同一筆交易中執行多個不同的操作,例如用戶可以將多筆轉账指令打包到同一個交易中,這些指令將按順序執行。如果交易中的任何一個指令失敗,整個交易都將失敗。
Solana 的交易記錄與以太坊略有不同,我們來看下如何有效閱讀 Solana 上的交易記錄。
SOL 轉账交易
對於 Solana 上的交易記錄,我們以 SOLSCAN 瀏覽器爲例,關注以下主要信息:
Signature(籤名):類似於交易哈希,在交易記錄中將交易的第一個籤名作爲交易的索引。
Result(結果):交易的執行結果,表明交易是否成功。
Signer(籤名者):執行交易的账戶地址,即籤名者的地址。
Main Actions(主要操作):交易中包含的主要操作指令,可以是轉账,程序調用等。
Instruction Details(指令詳情):交易中執行的具體操作指令。
我們在 Main Actions 中可以看到轉账雙方的账戶地址。
在 Instruction Details 中,我們可以看到 SOL 轉账交易的主要指令是 SOL Transfer,該指令旨在進行 SOL 的轉账。通過詳細查看該指令的詳情,我們可以獲得有關該指令調用的程序,以及涉及到的轉账雙方的账戶地址等信息。
Token 轉账交易
以下交易是 USDT 的轉账,與 SOL 交易類似。
在 Instruction Details 部分,Token 交易通常首先調用 Create Associated Account 指令,爲接收方創建一個 Token 账戶(如果接收方尚未有相應账戶),用於存儲 USDT 余額等數據。
接着執行 Token Transfer 指令,完成 USDT 的轉账。值得注意的是,與 SOL Transfer 指令不同,Token Transfer 指令中的 Source 和 Destination 不代表轉账雙方的直接账戶地址,而是它們的 Token 账戶(PDA 账戶),這點需要特別注意。
Swap 交易
下面是一筆 Swap 交易,用戶將 USDT 兌換爲 USDC。
多個指令交易
在包含多個指令的 Solana 交易中,涉及 SOL 的轉账、Swap 交易以及 Token 的轉账等多個操作。
即便有多個指令,我們仍然能夠通過 Instruction Details 查看交易執行的詳細指令,了解每個步驟的具體操作。
資產安全
俗話說,知己知彼,百战不殆。我們已經初步了解了 Solana 上的账戶、Token 和交易。爲規避資產被盜的風險,我們需要深入了解在使用 Solana 錢包時可能面臨的風險。
私鑰和助記詞泄露
根據慢霧區塊鏈被黑檔案庫(https://hacked.slowmist.io) 統計,2023 年 9 起私鑰泄露安全事件導致的損失就高達 8475 萬美元。在慢霧 AML 團隊處理的被盜案件中,私鑰和助記詞泄露導致資產被盜的事件佔據了相當大的比例。因此,要保證 Solana 錢包上資產的安全,最重要的是管理好錢包私鑰和助記詞。
使用錢包
在錢包使用過程中,籤名是最需要關注的安全風險之一,尤其需要特別注意在 Solana 上與項目互動時所籤名的信息。
而且,Solana 允許將多筆轉账打包成一個交易,也即只需一次籤名即可將錢包中的所有資產一次性轉移。
下面我們來看一個實際案例:
某位受害者在一個釣魚網站上誤操作,僅僅點擊了一次確認,導致錢包中的所有資產被一次性轉走。究竟是什么操作讓受害者只是籤了一次名就能讓黑客將所有資產轉走呢?
是的,黑客利用了上文提到的機制和錢包的一個特點:
受害者使用的是 Phantom Wallet,這款錢包能夠將多筆轉账指令打包成一個交易,僅需一次籤名即可完成整個過程。恰恰是這一功能成爲黑客利用的突破口,導致受害者在一次籤名中失去了所有資產。在使用錢包時,請用戶務必謹慎確認每一次籤名的操作,以免遭受損失。
Phantom Wallet 的官方文檔中也明確介紹了這一關鍵功能:
總結
在本期 Solana 科普文章中,我們首先了解了 Solana 账戶的基礎知識;接着深入研究了 Solana Token 的基本概念;隨後探討了在 Solana 上進行交易的相關內容。在保障錢包資產安全的部分,我們強調了私鑰和助記詞的安全保存,建議用戶閱讀慢霧出品的《區塊鏈黑暗森林自救手冊》:https://github.com/slowmist/Blockchain-dark-forest-selfguard-handbook/blob/main/README_CN.md 以獲取更多安全建議;在使用錢包時,請用戶務必小心確認每一次籤名的操作,避免遭受損失。此外,閱讀錢包文檔中的安全提示至關重要,時刻保持警惕是保障資產安全的關鍵。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。