本文將介紹 Solana 帳戶、Token、交易及如何保障資產安全。

作者: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 以獲取更多安全建議; 在使用錢包時,請用戶務必小心確認每一次簽名的操作,避免遭受損失。 此外,閱讀錢包文檔中的安全提示至關重要,時刻保持警惕是保障資產安全的關鍵。

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。