Ownership 所有權 (Ownership)
Sui 上的每個物件都處於五種所有權狀態之一:單一擁有者、共享、不可變(凍結)、物件擁有者,或_ Party_。每種模型都提供獨特的特性,適用於不同的使用情境——正如我們將在下一節看到的,所有權的選擇也決定了觸及該物件的交易如何被執行。
關於如何變更物件的擁有者或所有權型別的細節,請參閱儲存函式章節。
帳戶擁有者(或單一擁有者) (Account Owner (or Single Owner))
帳戶擁有者,也稱為_單一擁有者_模型,是 Sui 中最基本的所有權型別。在此模型中,物件由單一帳戶擁有,該帳戶對該物件在其型別相關行為範圍內擁有專屬控制權。這個模型體現了_真正所有權_的概念:只有擁有者可以在交易中使用該物件——無論是讀取、修改,還是轉移它——沒有其他人可以碰它。這種所有權的明確性,相較於其他區塊鏈系統是一大優勢,在那些系統中所有權的定義可能較為模糊,智慧合約甚至可能在未經擁有者同意的情況下變更或轉移資產。
可以把它想像成你的手機:你可以解鎖並操作它,其他人則不行。Sui 在系統層級強制執行這一點——沒有辦法「破解密碼」去使用屬於別人的物件,所以除非你授權,否則沒有人可以使用你的資產。
共享狀態 (Shared State)
單一擁有者模型有其侷限性。想像一個數位資產的市集:Alice 擁有一個資產 X,想要將它上架出售,讓 Bob——或任何其他人——可以來購買它。若只有單一擁有者物件,這件事出奇地難以表達:為了讓交易在沒有 Alice 參與的情況下發生,該資產必須存放在賣方與任何未來買方都能存取的地方,且不能由單一帳戶作為其擁有者。
為了解決共享資料存取的問題,Sui 提供了_共享_所有權模型。共享物件屬於整個網路:任何帳戶都可以讀取與修改它,而互動的規則則由實作該物件的模組所定義。共享物件的典型用途包括市集、共享資源、託管,以及其他需要多個帳戶存取相同狀態的情境。
Party 物件 (Party Objects)
最新的所有權狀態——party 物件——介於上述兩種模型之間:就像單一擁有者物件一樣,它有一個擁有者——一個需要其許可才能使用該物件的地址——但就像共享物件一樣,觸及它的交易是透過共識排序的。目前 party 物件永遠由單一地址擁有;此狀態的設計最終將支援更複雜的配置,讓權限可以分散在多個參與方之間。
Party 物件以犧牲專屬所有權的速度,換取共識排序的靈活性——這對於經常被高流量服務觸及的資產很有用,因為對同一擁有者可能同時有許多獨立的轉移正在進行。對大多數應用來說,它們是進階選項,而非起點:先從單一擁有者物件開始,等到有具體需求出現時,再考慮使用 party 物件。
這裡列出 party 物件是為了呈現完整全貌。其轉移函式在附錄 C:轉移函式 (Appendix C: Transfer Functions)中有詳細說明,而 sui::party 模組文件則涵蓋了細節。
不可變(凍結)狀態 (Immutable (Frozen) State)
Sui 也提供_凍結物件_模型,在此模型中,物件會永久變為唯讀。這些不可變物件雖然可讀取,但無法被修改、轉移或刪除,為所有網路參與者提供了一個穩定且恆常的狀態。凍結物件非常適合公開資料、參考資料,以及其他希望狀態永久不變的使用情境。
物件擁有者 (Object Owner)
Sui 中最後一種所有權模型是_物件擁有者_:一個物件被另一個物件所擁有。這項特性使得在物件之間建立複雜關係、儲存大型異質集合,以及實作可擴充且模組化的系統成為可能。由於交易是由帳戶所發起,交易會先存取父物件,再透過它觸及子物件。
我們喜歡舉的一個使用情境是遊戲角色。Alice 可以擁有來自某遊戲的 Hero 物件,而 Hero 可以擁有物品:同樣以物件表示,例如「地圖(Map)」或「羅盤(Compass)」。Alice 可以從「Hero」物件中取出「地圖」,然後將它送給 Bob,或在市集上出售它。有了物件擁有者,就能非常自然地想像資產之間該如何互相建構與管理關係。
父子關係背後有兩種機制,兩者都會在本書後面涵蓋到: 動態欄位 (Dynamic Fields) 與 轉移至物件 (Transfer to Object)。
總結 (Summary)
- 單一擁有者: 物件由單一帳戶擁有,對該物件擁有專屬控制權。
- 共享狀態: 物件可以與整個網路共享,允許多個帳戶讀取與修改該物件。
- Party: 物件有單一擁有者,但透過共識排序——這是一種較新的進階選項。
- 不可變狀態: 物件變為永久唯讀,提供穩定且恆常的狀態。
- 物件擁有者: 物件可以擁有其他物件,實現複雜的關係與模組化系統。
下一步 (Next Steps)
在下一節中,我們將討論 Sui 中的交易執行路徑,以及所有權模型如何影響交易的執行。