背景
前段時間,我們在初識TON:帳號、Token、交易與資產安全中討論了TON 的特點及用戶資產安全問題。今天,我們一起來學習另一個新興的高效能區塊鏈平台— Sui,它具備多項創新技術和獨特特性,吸引了開發者和研究人員的注意。 Sui 專注於提供快速、安全的交易體驗,適合各種應用場景。本篇文章將透過說明Sui 的帳號模型、代幣管理、交易機制和資產安全等內容,幫助讀者認識Sui。
帳號模型
地址
Sui 遵循加密貨幣產業中廣泛接受的錢包規範,包括BIP-32(及其變種SLIP-0010)、BIP-44 和BIP-39,以便為用戶提供金鑰管理。
為了派生一個32 位元組的Sui 位址,Sui 使用BLAKE2b(256 位元輸出)雜湊函數將簽章方案標誌(1 位元組)與公鑰位元組連接起來。 Sui 位址目前支援純Ed25519、Secp256k1、Secp256r1 和MultiSig,對應的標誌位元組分別為0x00、0x01、0x02 和0x03。
餘額
在Sui 上,一切都是對象,使用者的餘額也是對象。在轉帳過程中,如果物件中包含的餘額不等於所需的數值,則需要將物件拆分或合併。例如,你有一個包含100 SUI 的對象,但你只想轉帳30 SUI,那麼系統會將這個物件拆分為兩個物件:一個包含30 SUI,另一個包含70 SUI。你可以轉移包含30 SUI 的對象,而保留剩下的對象。反之,如果需要更大的金額,你也可以將多個餘額物件合併,形成一個更大的數額物件。
代幣管理
Sui 官方實作了Coin 的標準程式碼,開發者在發行Coin 時只需要在合約裡呼叫`use sui::coin;` 就可以使用這個標準函式庫的所有功能。
由於使用了Move 語言,與其他區塊鏈常用的程式語言(如Solidity)有所不同,開發者在使用時需要了解並注意一些獨特的功能或特性,我們來看一段程式碼:
這是一個完整的Coin 發行合約,Sui 上的智慧合約設計與以太坊或Solana 等區塊鏈平台有所不同,我們在原始碼中看不到權限的管理。使用該函數建立Coin 時(coin::create_regulated_currency),合約的創建者會收到一個TreasuryCap 對象,該對像是鑄造新Coin 或銷毀現有Coin 所必需的。只有有權存取此物件的地址才能維護Coin 發行。
對於收到Coin 的用戶來說,他的帳號控制了這些代幣的所有權,在調用智能合約使用這些代幣時,也需要傳入這些對象,並對交易進行簽名。
交易機制
交易是基本的區塊鏈世界中的概念,它是與區塊鏈互動的一種方式。交易用於更改區塊鏈的狀態,並且是唯一的方法。在Sui 使用的Move 程式語言中,交易用於呼叫套件中的函數、部署新套件以及升級現有套件。
在建立交易時需要注意,每筆交易要明確地指定其操作的物件!這點和Solana 的交易需要傳入帳號有些相似。
交易包含的內容:
-
發送方– 簽署交易的帳戶
-
指令清單(或指令鏈)– 要執行的操作
-
指令輸入– 指令的參數:純文字– 簡單的值,如數字或字串,或物件– 交易將存取的對象
-
Gas 對象– 用於支付交易的Coin 對象
-
Gas 價格與預算– 交易成本
合約安全
Sui 使用Move 做為智能合約的程式語言,在某種程度上能解決Solidity 高發的漏洞問題,如重入攻擊、整數溢位、雙花、DoS 攻擊和編譯器問題,但避免不了開發者在程式碼中引入錯誤,因此安全審計依舊是必要的。以下是開發者在開發過程中需要注意的一些事項:
1. 權限檢查:分析對外函數所接收的物件類型,對於涉及敏感操作的特權函數,需要確保傳入的物件是具有特權的物件。如果函數接收並使用了特權對象,那麼函數呼叫者必須是該對象的合法擁有者。
2. 對外函數檢查:有些函數本身不應該被外部直接調用,如果有不應該外放的函數接口,開發者要提出該函數不宜公開。
3. 物件分析檢查:由於Sui 裡面的物件可以被轉換成公共物件(Shared Object),因此,開發者要整理出所有用到的物件的類型,確認它們是靜態的還是公共的,以及是否存在錯誤。如果把應該私有化的對象轉換成了公共對象,那麼任何人都可以使用這個對象,這就存在安全風險。
4. Coin 消耗檢查:Sui 的代幣模型與其他鏈的有所不同,其設計允許代幣物件可以被其他物件包含和持有,還可以進行拆分,由此衍生出了幾種代幣消耗模式:
-
直接將代幣物件轉移給另一個物件;
-
將代幣對象進行結構調整後產生一個新的對象,再轉移給目標對象;
-
將代幣物件拆分,並將拆分出來的部分轉移給新物件。
因此,在代幣消耗的情況下,開發者需要檢查以下幾點:
-
消耗的金額是否正確;
-
物件是否已經轉移;
-
如果有拆分,拆分的金額對不對。
5. 預言機價格操縱攻擊:如果Sui 上的合約使用預言機來取得價格,那麼也需要注意價格被操縱的可能性。開發者可以透過引入多個資料來源和共識機制,以防範單一資料來源被操縱的風險。此外,也可以使用時間加權平均價格來防範預言機操縱風險。
6. 治理攻擊:在Sui 上的合約中,如果治理代幣的投票權設計不合理,也存在遭遇治理攻擊的風險,這方面可以參考一些成熟的去中心化組織的社區治理邏輯。
7. 套利攻擊:如果邏輯設計不合理,Sui 上的DeFi 合約也有套利攻擊的風險。開發者在開發的時候應仔細檢視合約中的邏輯,避免被攻擊者利用。
8. 假儲值攻擊:交易所或開發者在處理Sui 代幣充值時,也需要注意檢查交易的狀態是否成功,代幣的Package ID 是否正確,防範假充值攻擊。
總結
在本文中,我們簡單探討了Sui 的設計特點,包括其帳號模型、代幣管理、交易機制以及合約安全性。利用Move 程式語言,Sui 在確保高效能與低延遲的同時,也引入了創新的資料模型和物件儲存方法,顯著提升了安全性和靈活性。相較於其他區塊鏈平台,Move 語言在防止常見的智慧合約漏洞(如溢出、重入攻擊等)方面表現出色,這使得Sui 在技術層面上更加穩健和可靠。然而,開發者仍需關注業務邏輯層面的安全性,特別是在權限管理、物件類型的使用以及代幣消耗方面,謹防由於程式碼中的錯誤或不當設計而導致資產損失。
參考連結:
https://docs.sui.io/
https://docs.sui.io/standards/coin
https://move-book.com/