【開發智能合約 — 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的主因。
為什麼會看到廣告
avatar-img
119會員
268內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
建議閱讀前可以先了解一下「【開發智能合約 — Solidity系列】開發環境準備」,會比較容易操作Remix來開發智能合約。 Remix IDE的Debug方式其實也類似於我們開發軟體程式過程中的Debug流程,編輯好程式碼之後,經過編譯,發佈到暫存鏈上,對每一個區塊進行Debug,過程中逐步排查出
「人」與「人」之間無非時時刻刻都在交易,只是每一種交易的形式與媒介有所不同,而區塊鏈的世界也有特定的交易單位,主要分為兩大類型的單位, 分別是以乙太幣單位以及時間單位。 最小單位為「wei」, 而其餘主要會用到的單位分別是「gwei」與「ether」。 時間單位的部份就比較容易理解了, 非常直觀,
資料型態在合約當中扮演著什麼角色呢? 我們在「【開發智能合約 — Solidity系列】實作篇Ep.2 — 合約中的基本組成元素」有介紹過狀態變數可以儲存一些變化值,而儲存什麼類型的值就是所謂的資料型態,不同的資料型態可以處理的事物也有所不同,因此我們也需要了解一些基本的資料型態以及特性之後,未來開
我們在「【開發智能合約 — Solidity系列】開發環境準備」這一個篇章有教學如何結合Remix與Github來儲存我們的程式碼,使用Remix Editor一段時間後,也順利提交Souce Code到Github,但過程中發現一個小問題,就是在Github上的歷程中發現每一次的提交作者都是「Re
建議閱讀前可以先了解一下「【開發智能合約 — Solidity系列】開發環境準備」,會比較容易操作Remix來開發智能合約。 Remix IDE的Debug方式其實也類似於我們開發軟體程式過程中的Debug流程,編輯好程式碼之後,經過編譯,發佈到暫存鏈上,對每一個區塊進行Debug,過程中逐步排查出
「人」與「人」之間無非時時刻刻都在交易,只是每一種交易的形式與媒介有所不同,而區塊鏈的世界也有特定的交易單位,主要分為兩大類型的單位, 分別是以乙太幣單位以及時間單位。 最小單位為「wei」, 而其餘主要會用到的單位分別是「gwei」與「ether」。 時間單位的部份就比較容易理解了, 非常直觀,
資料型態在合約當中扮演著什麼角色呢? 我們在「【開發智能合約 — Solidity系列】實作篇Ep.2 — 合約中的基本組成元素」有介紹過狀態變數可以儲存一些變化值,而儲存什麼類型的值就是所謂的資料型態,不同的資料型態可以處理的事物也有所不同,因此我們也需要了解一些基本的資料型態以及特性之後,未來開
我們在「【開發智能合約 — Solidity系列】開發環境準備」這一個篇章有教學如何結合Remix與Github來儲存我們的程式碼,使用Remix Editor一段時間後,也順利提交Souce Code到Github,但過程中發現一個小問題,就是在Github上的歷程中發現每一次的提交作者都是「Re
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
BitVM是“比特币虚拟机 Bitcoin Virtual Machine ”的缩写,假设它是一个虚拟测试实验室,在这个虚拟化空间中,开发者可以自由地操作任何计算程序或执行任何智能合约,本文深入介绍了什么是什么是BitVM,以及BitVM与EVM的区别是什么 🚀 币安 - 全球最大加密货币交易所
Thumbnail
智能合约和区块链是当今社会最热门的话题之一,智能合约钱包是指用合约账户作为地址的钱包,是基于智能合约而不是外部账户的钱包,那么,智能合约钱包和区块链的关系是什么?一样安全吗?本文将为大家详细介绍 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
Thumbnail
區塊鏈有什麼特色? 所有交易(操作資訊)紀錄會儲存在各個節點,因此具有公開性 每個節點遵守一套共識機制,基於這套機制來信任讀取的數據 透過密碼學演算法確保交易紀錄無法被串改 不會有資料中心遭受攻擊導致系統癱瘓問題 可能會對使用者喪失隱私 區塊鏈如何運作的? 節點主要可以被區分為兩種類型
Thumbnail
●智能合約 : 區塊2.0的產物   智能合約(Smart Contracts)最早是在1994年由Nick Szabo提出的概念,但一直到2015年,以太坊的創辦人Vitalik Buterin推出了智能合約,並運行於以太坊上,至今以太坊仍是最多人使用的智能合約區塊鏈。   ●智能
Thumbnail
區塊鏈原理 什麼是區塊鏈? 區塊鏈(Blockchain)是一種分散式帳本技術,它基於加密學和分散式計算的原理,通過將數據以區塊的形式連接在一起,形成鏈條。每個區塊包含一定時間內的多筆交易記錄,並使用密碼學哈希函數與前一個區塊相連,這種連接保證了數據的不可篡改性。 2. 區塊鏈的基本結構 2
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
BitVM是“比特币虚拟机 Bitcoin Virtual Machine ”的缩写,假设它是一个虚拟测试实验室,在这个虚拟化空间中,开发者可以自由地操作任何计算程序或执行任何智能合约,本文深入介绍了什么是什么是BitVM,以及BitVM与EVM的区别是什么 🚀 币安 - 全球最大加密货币交易所
Thumbnail
智能合约和区块链是当今社会最热门的话题之一,智能合约钱包是指用合约账户作为地址的钱包,是基于智能合约而不是外部账户的钱包,那么,智能合约钱包和区块链的关系是什么?一样安全吗?本文将为大家详细介绍 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
Thumbnail
區塊鏈有什麼特色? 所有交易(操作資訊)紀錄會儲存在各個節點,因此具有公開性 每個節點遵守一套共識機制,基於這套機制來信任讀取的數據 透過密碼學演算法確保交易紀錄無法被串改 不會有資料中心遭受攻擊導致系統癱瘓問題 可能會對使用者喪失隱私 區塊鏈如何運作的? 節點主要可以被區分為兩種類型
Thumbnail
●智能合約 : 區塊2.0的產物   智能合約(Smart Contracts)最早是在1994年由Nick Szabo提出的概念,但一直到2015年,以太坊的創辦人Vitalik Buterin推出了智能合約,並運行於以太坊上,至今以太坊仍是最多人使用的智能合約區塊鏈。   ●智能
Thumbnail
區塊鏈原理 什麼是區塊鏈? 區塊鏈(Blockchain)是一種分散式帳本技術,它基於加密學和分散式計算的原理,通過將數據以區塊的形式連接在一起,形成鏈條。每個區塊包含一定時間內的多筆交易記錄,並使用密碼學哈希函數與前一個區塊相連,這種連接保證了數據的不可篡改性。 2. 區塊鏈的基本結構 2