本文深入探討Solana的帳戶結構、Token機制、交易過程,並指導如何在Solana生態中確保資產安全。
本文目錄
1. Solana帳戶
2. Solana Token
3. Solana交易
4. SOL轉帳交易
5. Token轉帳交易
6. Swap交易
7. 多個指令交易
8. 資產安全
9. 私鑰和助記詞洩露
10. 使用錢包
11. 總結
Solana是一種快速且高度可擴展的區塊鏈協議,為去中心化應用(DApps)提供了強大的基礎設施。最近,Solana生態復甦引發廣泛關注,本文將介紹Solana帳戶、Token、交易,以及如何在這個生態中保障資產安全。
瞭解帳戶是保障資產安全的第一步。與以太坊中的帳戶不同,在Solana中,帳戶的主要作用是儲存資料。
Solana中的帳戶主要分為三種類型:
1. 資料帳戶:用於儲存資料。
2. 程式帳戶:用於儲存可執行程式。
3. 原生帳戶:指Solana上的原生程式,例如System、Stake以及Vote。
其中,資料帳戶可進一步分為兩類:
1. 系統所有帳戶:由Solana上的原生程式生成的帳戶。
2. 程式派生帳戶(PDA):簽名許可權是程式的帳戶,因此不像其他帳戶那樣受私鑰控制。
每個帳戶都有一個地址(一般情況下是一個公鑰)以及一個所有者(程式帳戶的地址)。前者與以太坊上的類似,後者可以簡單理解為建立該帳戶的程式。
普通使用者通過錢包生成的帳戶屬於資料帳戶中的系統所有帳戶,預設的帳戶所有者是系統程式。我們可以簡單理解為:使用者通過系統程式生成了一個系統所有帳戶,這個帳戶儲存了使用者的基本資訊和資產等資料,而這個帳戶擁有一個地址(也就是公鑰)。
以Solana Explorer為例,普通使用者使用的帳戶,即系統所有帳戶,在瀏覽器上的展示如下圖:
Assigned Program Id代表帳戶的所有者,Allocated Data Size表示帳戶已儲存的資料大小,Executable表示帳戶是否可執行,通常只有程式帳戶是可執行的。普通使用者只需關注帳戶的地址。
通過以上內容,我們已經對Solana帳戶有了初步的瞭解,接下來我們來認識下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上,每筆交易都包含以下關鍵資訊:
1. Instructions(指令):一個或多個指令,定義了交易中的操作,例如轉帳、程式互動、Token轉帳等。
2. Blockhash(塊hash):包含了最新的塊hash值,用於確保交易在正確的塊上執行。
3. Signatures(簽名):一個或多個簽名,表示交易的授權。每個簽名對應著交易中的一個簽名帳戶,確保只有授權的帳戶可以執行這筆交易。
Solana上的一筆交易可以包含多個指令,這意味著可以在同一筆交易中執行多個不同的操作,例如使用者可以將多筆轉帳指令打包到同一個交易中,這些指令將按順序執行。如果交易中的任何一個指令失敗,整個交易都將失敗。
Solana的交易記錄與以太坊略有不同,我們來看下如何有效閱讀Solana上的交易記錄。
對於Solana上的交易記錄,我們以SOLSCAN瀏覽器為例,關注以下主要資訊:
1. Signature(簽名):類似於交易hash,在交易記錄中將交易的第一個簽名作為交易的索引。
2. Result(結果):交易的執行結果,表明交易是否成功。
3. Signer(簽名者):執行交易的帳戶地址,即簽名者的地址。
4. Main Actions(主要操作):交易中包含的主要操作指令,可以是轉帳、程式呼叫等。
5. Instruction Details(指令詳情):交易中執行的具體操作指令。
我們在Main Actions中可以看到轉帳雙方的帳戶地址。
在Instruction Details中,我們可以看到SOL轉帳交易的主要指令是SOL Transfer,該指令旨在進行SOL的轉帳。通過詳細檢視該指令的詳情,我們可以獲得有關該指令呼叫的程式,以及涉及到的轉帳雙方的帳戶地址等資訊。
以下交易是USDT的轉帳,與SOL交易類似。
在Instruction Details部分,Token交易通常首先呼叫Create Associated Account指令,為接收方建立一個Token帳戶(如果接收方尚未有相應帳戶),用於儲存USDT餘額等資料。
接著執行Token Transfer指令,完成USDT的轉帳。值得注意的是,與SOL Transfer指令不同,Token Transfer指令中的Source和Destination不代表轉帳雙方的直接帳戶地址,而是它們的Token帳戶(PDA帳戶),這點需要特別注意。
下面是一筆Swap交易,使用者將USDT兌換為USDC。
在包含多個指令的Solana交易中,涉及SOL的轉帳、Swap交易以及Token的轉帳等多個操作。
即便有多個指令,我們仍然能夠通過Instruction Details檢視交易執行的詳細指令,瞭解每個步驟的具體操作。
俗話說,知己知彼,百戰不殆。我們已經初步瞭解了Solana上的帳戶、Token和交易。為規避資產被盜的風險,我們需要深入瞭解在使用Solana錢包時可能面臨的風險。
根據慢霧區塊鏈駭客檔案庫統計,2023年9起私鑰洩露安全事件導致的損失就高達8475萬美元。在慢霧AML團隊處理的被盜案件中,私鑰和助記詞洩露導致資產被盜的事件佔據了相當大的比例。因此,要保證Solana錢包上資產的安全,最重要的是管理好錢包私鑰和助記詞。
在錢包使用過程中,簽名是最需要關注的安全風險之一,尤其需要特別注意在Solana上與專案互動時所簽名的資訊。
而且,Solana允許將多筆轉帳打包成一個交易,也即只需一次簽名即可將錢包中的所有資產一次性轉移。
下面我們來看一個實際案例:
某位受害者在一個釣魚網站上誤操作,僅僅點選了一次確認,導致錢包中的所有資產被一次性轉走。究竟是什麼操作讓受害者只是簽了一次名就能讓駭客將所有資產轉走呢?
是的,駭客利用了上文提到的機制和錢包的一個特點:
受害者使用的是Phantom Wallet,這款錢包能夠將多筆轉帳指令打包成一個交易,僅需一次簽名即可完成整個過程。恰恰是這一功能成為駭客利用的突破口,導致受害者在一次簽名中失去了所有資產。在使用錢包時,請使用者務必謹慎確認每一次簽名的操作,以免遭受損失。
Phantom Wallet的官方文件中也明確介紹了這一關鍵功能:
在本期Solana科普文章中,我們首先了解了Solana帳戶的基礎知識;接著深入研究了Solana Token的基本概念;隨後探討了在Solana上進行交易的相關內容。在保障錢包資產安全的部分,我們強調了私鑰和助記詞的安全儲存,建議使用者閱讀慢霧出品的《區塊鏈黑暗森林自救手冊》以獲取更多安全建議;在使用錢包時,請使用者務必小心確認每一次簽名的操作,避免遭受損失。此外,閱讀錢包文件中的安全提示至關重要,時刻保持警惕是保障資產安全的關鍵。