附上使用說明書的程式碼 – 智能合約工程內容大揭密
Web3 或是 NFT 的專案都需要一個合約工程師,他們往往肩負著重要的角色。在 Web3 的世界裡,智能合約成為一個不能不知道的詞彙,感覺想要發起一個 Web3 的相關專案,不了解一點智能合約是不行的。每當專案出現問題時,我們總把關注的焦點投向智能合約工程師,放大檢視他們的合約有沒有漏洞,卻不得其門而入,也搞不懂「智能合約」所為何物。
我們在這篇文章邀請了目前在探索鏈 (Tezos) 生態中,相當活躍的智能合約工程師 – NakoOn,他將帶領我們一起探索並揭開智能合約工程的神秘面紗。
合約工程師 NakoOn 小檔案
NakoOn 目前是 akaSwap 的首席智能合約工程師,也是臺灣少數投入且活躍在探索鏈的合約工程師,經手 Tez Dozen、區塊火車(blocktrain)、白晝之夜和阿妹的 ASMeiR NFT 等專案,撰寫合約的功力也引起國外 fxhash 或是 objkt.com 等知名 NFT 平台的關注。相比其他擅長撰寫以太坊合約的工程師,NakoOn 更專注在探索鏈的數位藝術生態,透過他的觀察我們將為大眾揭開探索鏈上智能合約的神秘面紗。
NakoOn 在踏入區塊鏈藝術生態圈之前,主要在製作 VR 和沈浸式體驗的相關專案,引用他本來的原話是「從元宇宙的基礎建設轉向了另一種基礎建設」。大學就讀於資工系,研究所則投入虛擬實境體驗的相關研究。在轉換跑道之前,多半在執行 VR 放鬆體驗,或是博物館的沈浸式體驗。主要工作內容是根據體驗需求的改變,撰寫不同的程式,來協助執行機制的串連,幫助使用者更有效地進入體驗過程,也希望透過機制的建立,來擴大建構 VR 所呈現的感官世界。後來因為公司的願景和轉型,加上對於區塊鏈世界的好奇和對「機制」的熱愛,轉向開啟了「合約工程」之路。
什麼是智能合約?
智能合約 (Smart Contract) 一詞是由學者 Nick Szabo 於 1990 年代初期 提出,倡議可以將交易的條款透過電腦化來落實,在當時並沒有得到太多迴響,但是隨著區塊鏈技術的興起,以太坊 (Ethereum) 的出現,強調「智能合約」是這條區塊鏈的特色,一舉將智能合約推向了一個新的層次,讓大眾注意到智能合約的重要性,也成為了區塊鏈上的主要技術和應用。
不過確切來說,使用「合約」這個語彙來形容「智能合約」容易讓我們產生誤解,因為「智能合約」既不「智能」也不完全是份「合約」。它比較像是一段附上使用規範的「程式碼」,透過程式碼,我們可以用來執行我們希望應用的動作。
正如上述所說,智能合約是以太坊提出相當重要的區塊鏈應用,充分利用了區塊鏈公開透明記錄的特色。在《寫給未來社會的新帳本 — 區塊鏈》一書指出,智能合約必須包含三個要素:
1) 自治:合約一經啟動就會自動運行,無法透過任何人為干預
2) 自足:智能合約將自主控制其計算所涉及的資源,比較明顯的例子就是「自動分潤」這類的機制。
3) 去中心化:通過分散式的節點來自動運行,非依賴中心化的單個伺服器。
「自動化」、「無法透過人為干預」會是智能合約的重要特性,加上區塊鏈公開透明的性質, 非常適合在執行應用動作的代碼加上預設的規則、條款等協議。這種不可更動性,產生了類似「合約」的性質。不過這些智能合約的本質就是一用以執行某些動作和應用的程式碼。
以 akaSwap 為例,購買 NFT 就是使用一份智能合約,合約動作包括了:執行買家支付一筆費用,再從賣場將該 NFT 轉到買家錢包,並依照分潤規則將所得費用分配給賣家、作者和平台方。拍賣、發售等動作,同理也會由不同的智能合約來完成。我們可以視智能合約就是一連串動作的集合,並透明公開地把使用說明和規範標示出來,就像是該程式碼的「使用說明書」。
如何檢測一份好的智能合約內容
也因此工程師和智能合約扮演了相當重要的角色,無疑是整個專案的基石。他們建構起該專案需要合約動作執行的規範和規則,以確保所有動作將會自動不受干擾的運行。那我們可以根據什麼條件來觀察一個智能合約撰寫(或是合約工程師)的好壞呢?
首先,我們可以觀察這條合約是否浪費我們無謂的瓦斯費(gas fee),好的智能合約應該是需要更有效率的執行動作,不會因為無效率的程式執行,導致使用者浪費原本不應該產生的瓦斯費。其次,我們可以觀察該合約是否有漏洞,可能是合約工程師在撰寫過程中,機制設計不良或是思考未有縝密,導致了一些不良使用者,可以透過這些漏洞來獲取不公平的利益。那最後,也可以深入確認這樣的漏洞是無意使然,還是工程師在撰寫合約時,刻意給自己留下的後門或是缺口,便於自己圖利。倘若發現這樣的情況,那勢必是一份最糟糕的智能合約。幸好這些合約協定都公開透明的呈現在鏈上,多少限制了不肖工程師出現的可能性,畢竟每一動作都會在鏈上被記錄下來,供大家放大檢視。
社群和程式之間,「公正」該如何平衡?
公平和公正,往往是專案執行中最在意的事情,也是智能合約在執行過程,最需要好好建構的一環,而「公平公正」的精神也需落實在專案執行的每一個環節。NakoOn 向我們提及,之前在執行 Tez Dozen 專案時,大戰黃牛機器人的精彩事蹟,可以作為一個範例。
Tez Dozen 是早期在 akaSwap 相當成功的 PFP 專案,一共分成 12 輪發行,每輪皆在一個區塊(30 秒)內完售,亮眼的銷售成績和炙手可熱的二級市場,引起部分黃牛機器人的關注。機器人透過程式指令執行,總是能比「正常人類」購買到較多的數量,或是更快搶到。雖説在區塊鏈專案上,大家各憑本事的搶購是司空見慣的事情,但透過機器人購買還是有點超出了「公平正義」的那條線。在聆聽社群意見和團隊討論後,他們決定針對這些黃牛機器人提出應對措施。
首先,探索鏈上各專案都會有各自的黑名單。當時,NakoOn 先跟 objkt 的工程師索取了一份探索鏈生態圈的黑名單。另外,就是觀察較少互動、金流流向可疑,或是交易動作可疑的假帳號。由於合約內容是公開透明,有心人士往往會針對合約內容並利用機器人鎖定合約位址來進行搶購。也因此,NakoOn 和團隊決定在最後一刻更換合約,讓自動化的黃牛機器人反應不及。較勁的結果反映在搶購結果上,該輪搶購成功的都是循規蹈矩,從前端網頁操作的使用者。這次行動也說明了「合約執行」的公正,不一定完全符合人性和社群期待,在社群大眾期待的「公正」和機制死板執行的「絕對公正」,中間是有非常多的討論空間,需要靈活的彈性和對於社群需求的深入觀察。在這樣的前提下,來善用合約工具,而不只是墨守成規。
日新月異的區塊鏈和合約工程,我們需要什麼能力?
最後,NakoOn 與我們分享合約工程師整體使用的程式語言和處理指令的方式,沒有真的與過往的學習相去甚遠。但是在轉職的過程中,由於當時臺灣沒有太多探索鏈的資訊,比較沒有人可以跟他討論分享智能合約的種種細節,他還是需要爬梳大量的資料和範例,來精進合約撰寫的能力。且區塊鏈的變化日新月異,合約工程師必須不斷地更新自己的知識,才能夠了解的更全面。常常專案一開始到撰寫完,鏈上又多了許多功能可以使用,如果沒有常常更新鏈上知識,便很容易被淘汰。
另外,認識社群上的其他角色,觀察其他平台的合約是如何撰寫,多多參與各種面向的討論,都會是身為合約工程師相當重要的功課。指令的執行沒有討論的空間,但是專案服務的對象基本上都是以人的需求為主,在這個過程中,如何找到指令和服務需求的平衡,將會是非常重要的一件事,也區塊鏈和合約工程執行的過程中最有趣的地方。
c2x3 除了會在 Matters 分享Web3相關資訊,也致力將台灣項目推向國際,如果喜歡這些內容,請不吝分享我們的文章讓更多人看見,我們也有 Facebook、Instagram 和英文版的 Twitter、Medium 跟 fxtext 喲,歡迎大家來逛逛,未來還請各位多多指教囉!