淺談 Sui 的 Move 其獨特之處

Jarekkkkk
Nov 4, 2022

--

在經歷過以太坊上 Solidity 以及 Solana 上的開發環境後,遲遲總覺得整個開發過程與體驗做了很多相同的步驟,來回寫了很多確認審計方面的code,包含檢查所有涉及交易方的帳戶餘額是否合乎邏輯或是因為區塊鏈透明性而產生的缺陷如三明治陷阱、front-end running 等。如此的結果就是,折騰了許多沒有財金經濟背景的工程師或是不明白區塊鏈底層架構的前端工程師。

以太鏈方面,不單單要求熟悉 Solidity 語法,在優化Gas方面,更是必須了解 Assembly & EVM 的運作。不同於 Ethereum 創立一個智慧合約語言, Solana 開發使用程式語言 Rust 以及 C/ C++ ,降低開發人員學習新語言的門檻,然而如同上述所提,依舊逃脫不出不停來回確認資金是否正確流動等審計問題,在設計方面,開發人員不能安心的只考慮 APP 的邏輯。

Move 語言

其實說到底,區塊鏈比起 web2 ,最直接的概念就是他可以傳送ㄧ有價值的資產與物品,脫離了傳統的可拷貝性。Sui 團隊從這個概念出發,在 2017 年還在 Diem 團隊時,就開始撰寫了Move這個面向資源的智慧合約語言,從開發人員的角來說就是 — OOP物件導向 — 的概念,這也是為何官方 Mysten Labs 説 Move 立志成為 「 web3 的 Javascript 」。

相比Solidity,其導入了資源這個概念撰寫程式。在Solidity,每個資產、金額、物品,還是遵循舊的code計算加減的寫法,當我將A的帳戶轉帳B 500 元,我需要完成以下邏輯:

  1. 確認A是否有$500
  2. 將A的帳戶金額扣除500
  3. 同時增加B帳戶的500
利用數字加減概念的交易

上述是最常見且最直接簡單的交易,但整個邏輯概念上依舊需要開發者或審計人員去思考帳戶的驗證以及整個金流邏輯上的缺陷,這也是為何以太等EVM運行的鏈即使經過審計後或是當跨練時依舊出現資安上的疑慮,需要整個智慧合約寫法上需要注意非常多細節。

然而在Sui的Move語言中,所有的物品都有個 ID 被視為真實存在的物件,開發者只需要在每個指令中要求輸入物品的地址(ID),並依照邏輯更改物品目前的所有人,這個邏輯中,不存在增加或是減少物件的邏輯概念,取而代之的是轉移物品所有權這個概念。 以上述例子為例,當A轉500給B時,開發者只需要要求”500這個資產”的物件ID,並在合約轉移物品時,Move會自動更改目前持有人為B,整個概念上變得更加簡潔並且安全,完全遵循真實世界的邏輯概念也就是 A 將500紙鈔轉交給B 。

面向資源導向的交易

做個小總結,在Solidity & Solana 的開發上,我們將真實世界中的所有有價值的交易,在區塊鏈上另外開一個不可更改的會計帳本記錄下來,確認各項數字的加減或是資產交易過程合乎邏輯, 整個互動流程是透過這個去中心化的「帳本」這個媒介來互動。但在 Sui 的 Move 環境下,代幣與資產更符合現實生活的設計與概念,例如一個“100的資產”、“500的資產”,就相當於真實世界中的一張百元鈔票跟五百元鈔票,而資產的地址 (ID) 就代表每張鈔票上的編號。

--

--