【開發智能合約 — Solidity系列】概念篇: 關於虛擬沙盒Ethereum Virtual Machine(EVM

閱讀時間約 3 分鐘

基本概念

每個產品在實驗室研發出來後,勢必會面臨到賣給客戶的階段,那麼當我們將產品移交給客戶時,意味著也要進行環境的安裝,但問題來了,每一個客戶的環境差異甚大,總不可能為了A客戶就建立一個A客戶的環境,因應B客戶就建立B客戶的環境,這樣隨著產品的銷售量增長也將連帶耗盡公司的資源,想必這不是我們所樂見的現象,當然在最理想的狀況下只要能夠一個封閉的環境,將系統中的所有組件逐一打包成一個可執行的「虛擬環境檔」,而我們帶到客戶端的部分只有這一包「虛擬環境檔」,安裝後,所有環境都封閉在虛擬環境之中,客戶外部系統不論如何異動都不會去影響到產品的運作,想必聽到這裡,大家心裡應該都浮現了幾個重要名詞,VM、Docker、Virtual Box…,這類的產品就是在實現這樣的夢想,但區塊鏈呢?
沒錯,區塊鏈也是有一套虛擬機的設計機制,區塊鏈的最重要特性莫過於不可竄改的特性,執行結果理應也是可靠的,而且也不應該開發一份智能合約之後去影響到區塊鏈上的千千萬萬個智能合約,因此才會有Ethereum Virtual Machine(EVM)的產生,開發者只要專注於開發智能合約,不需要去擔心環境問題,這樣的隔離方式才能夠讓整個區塊鏈更加健康、安全,這也就是Ethereum Virtual Machine(EVM)為什麼需要存在的最大原因。
以程式語言來說,就好比Java的JVM一樣,程式轉譯成Byte Code並執行於JVM環境之中,而作業系統只要能夠運行JVM即可,而且環境獨立封閉,基本上不會受到外部的干擾。

關鍵的ByteCode

由於Ethereum Virtual Machine(EVM)所認定的程式碼是ByteCode這種較低階的語言,因此人類不容易閱讀,通常也不會有人直接去寫ByteCode,因此才發展出高階語言Solidity,讓開發更平易近人,以易讀的語言來進行設計,最後再轉譯成ByteCode讓Ethereum Virtual Machine(EVM)讀取並執行。
來一段ByteCode的範例,第一眼看到的反應大部分應該會是「天啊!這什麼文字天書」,相信看到就不會想玩智能合約了!
PUSH1 0x00 CALLDATALOAD
PUSH1 0x00
SSTORE
再來看看Solidity這套程式語言的範例,相對平易近人又容易讀取:
// Pay salary
function pay() public view returns (uint) {
return salary;
}
也由於這種高階語言的出現,讓市面上的許多智能合約應用如雨後春筍般的出現。

重要功能

  • 容易測試: 為了確保各式各樣的智能合約能夠順利執行,必須讓環境一致,而環境統一的狀況下,開發者只要專注於程式碼的開發並測試邏輯的正確與否,因此不容易因為外部系統改A壞B的狀況產生。
  • 安全性: 由於沙盒的概念,因此程式碼都執行於封閉的盒子中,不會隨意的攻擊主鏈,導致鏈上的其他智能合約無法正常運作。
  • 穩定性: 由於環境封閉獨立,不會因為某個合約故障導致整個鏈上資源鎖死,因此對故障的容忍度較高。
沒有仔細了解區塊鏈的相關技術之前都覺得怎麼可能去開發這麼複雜的技術,一步步探究之後才發現事實上與我們傳統的開發核心理念相差不遠,大部分技術與概念都是互相連通的,因此我們在接觸新技術之前不要去排斥,並試著學習跟動手,將知識技術烙印在腦海中才能持續進步。

實際動動手來編譯一下智能合約吧

我們可以使用browser-solc套線上編譯工具,讓撰寫好的智能合約編譯成Bytecode,而這些Bytecode就是EVM能夠讀得懂的語言,雖然一層的轉譯會受到一些效能的挑戰,但安全、隔離的環境相信帶來的好處更甚,因此也是為什麼會有一層EVM的主因。
為什麼會看到廣告
95會員
235內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
開發金 台股 2024~2021六月第一週筆記台股收在21858點,然後就端午節了。有好幾年都很怕端午變盤,沒想到做股票久了就也不怕了。 端午節前發現開發金有漲,查了一下,原來是改名+二王子要回來了,目前股價15元。
Thumbnail
avatar
瑩瑩米袋子
2024-06-10
開發logo靈感合集欣賞親愛的讀者,你知道什麼是LOGO嗎? LOGO是:外來語到對標誌擁有公司的識別和推廣的作用,透過形象的logo可以讓消費者記住公司主體和品牌文化。 標誌特徵與特性: 延展性:企業logo是應用最為廣泛,出現頻率最高的視覺傳達要素,必須在各種傳播媒體上廣泛應用。logo圖形要針對印刷
Thumbnail
avatar
全能Logo設計師
2024-05-14
生技論壇闡述產業前景火熱,長佳智能、台康、開發金、鑽石生技正面看待,凸顯ABVC集團這顆耀眼金星《經濟日報》日前於台北國際會議中心盛大舉辦「2023生技論壇」,邀請衛福部長薛瑞元、生策會副會長楊泮池、長佳智能董座陳明豐在內的多位官、商、學界專家、學者參與盛會,深入研討新冠肺炎疫情後的經濟重組;瞄準再生醫療、精準醫療、大健康領域等生技產業範疇,藉由共同發聲、齊心努力,對此應有推波助瀾之效。
Thumbnail
avatar
Michael
2023-11-16
如何進行求職平台的產品分析?產品開發順序怎麼制定?|EP38剛好前陣子在求職平台/人力銀行服務,一直在思考整個產品要如何進行迭代優化,以及要如何根據使用者需求來制定產品路線圖、開發優先順序,這篇會介紹求職平台的產品特點、使用者路徑、以及從產品優化的角度如何拆解。
Thumbnail
avatar
張家惟 Evan Chang
2023-09-29
[micro:bit]Yahboom 亞博智能搖桿遙控擴展開發板 購買網站:https://shopee.tw/【樂意創客官方店】 使用方式 擴展網址:https://github.com/lzty634158/GHBit 在擴展頁面輸入“https://github.com/lzty634158/GHBit” 按下Enter 搜尋,就可以發現GHBit
Thumbnail
avatar
艾利斯
2023-09-20
智能合約開發實戰(12) - struct這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
Thumbnail
avatar
宅D嘉
2022-04-02
智能合約開發實戰(11) - Mapping此篇我們也來介紹另外一個也是蠻常用又蠻重要的Mapping,它和陣列有點像,但比較不同的是:它不能用迴圈的方式取出裡面所有的資料,但陣列可以,Mapping比較像是一個查詢系統,用key值可以取出裡面的value值。
avatar
宅D嘉
2022-03-26
智能合約開發實戰(十) - Array 陣列這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
Thumbnail
avatar
宅D嘉
2022-03-19
智能合約開發實戰(九) - 錯誤處理函數(require、revert、assert)在寫程式裡面,錯誤的檢查和處理是一定要有的,也是相對重要的,但Solidity裡面並沒有ErrorMessage這種東西,有的是Require()、Revert()、Assert()這三個函數,作用大概也跟ErrorMessage差不多,這裡介紹這三種函數的用法
avatar
宅D嘉
2022-03-05
智能合約開發實戰(八) - 函式修飾詞我們知道function除了四種可見度 (visibility) 之外,還有三種比較常見的函式修飾詞(view、pure、payable),這篇就也來認識一下這三種函式修飾詞是做什麼用的吧。
avatar
宅D嘉
2022-02-26