跳到主要內容

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

 

基本概念

每個產品在實驗室研發出來後,勢必會面臨到賣給客戶的階段,那麼當我們將產品移交給客戶時,意味著也要進行環境的安裝,但問題來了,每一個客戶的環境差異甚大,總不可能為了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的狀況產生。
● 安全性: 由於沙盒的概念,因此程式碼都執行於封閉的盒子中,不會隨意的攻擊主鏈,導致鏈上的其他智能合約無法正常運作。
● 穩定性: 由於環境封閉獨立,不會因為某個合約故障導致整個鏈上資源鎖死,因此對故障的容忍度較高。

結語

沒有仔細了解區塊鏈的相關技術之前都覺得怎麼可能去開發這麼複雜的技術,一步步探究之後才發現事實上與我們傳統的開發核心理念相差不遠,大部分技術與概念都是互相連通的,因此我們在接觸新技術之前不要去排斥,並試著學習跟動手,將知識技術烙印在腦海中才能持續進步。

📚 更多關於Solidity的文章請看這裡…

-------------------------------------------------------------------------------

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

留言

這個網誌中的熱門文章

java西元民國轉換_各種不同格式

C#資料庫操作(新增、修改、刪除、查詢)

【Excel好好玩】 自己的資產自己管!善用Google Sheet來幫我們評估貸款

這次介紹的主題是關於Excel的貸款還款計畫試算,我們人生中總會遇到需要大筆金額的花費,但當資金不夠時就得進行貸款,而貸款之前如果我們能夠審慎評估,並分析自己的還款能力之後在進行凍作,相信風險會小很多,因此就自己動動手來使用Google Sheet進行試算吧! 基本資料 ● 貸款總額: 1000000 ● 貸款期數: 84月 ● 年利率: 2.11% ● 月利率: 0.18% P.S 月利率 = 年利率 / 12 重要函式 PMT : 這是Google Sheet內建的重要年金計算公式,我們可以善用這個公式來計算固定利率及期數的固定攤還本息。因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 動手做 首先我們在Excel表上列出我們的基本資料 圖片來源 其中月利率的部分就使用公式「=B4/12」 接著我們填上第一列的期數跟餘額 圖片來源 =B2 =B3 使用關鍵PMT函數來計算本息的部分 因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 -PMT(貸款利率(月利率), 貸款期數, 貸款總額) =-PMT($B$5,$B$3,$B$2) 圖片來源 計算利息 利息 = 貸款餘額 x 月利率 =B8*$B$5 圖片來源 計算本金 本金 = 本息 - 利息 =C8-D8 圖片來源 製作第二列餘額的部分 餘額的部分 = 上一期的餘額 - 上一期的本金 圖片來源 接著拖曳該兩列往下拉,即可查看每一期的利息與本金 圖片來源 結語 雖然市面上已經有很多貸款銀行都提供了試算功能,但如果我們想要進一步管理自己的資產時,就需要將每一期的金額給計算出來,因此才會將公式運用在Excel表,讓我們的資產管理表能夠結合負債,進一步評估我們理財行動的下一步,希望這樣的經驗可以幫助到正在理財道路上打拼的夥伴,讓我們透過有效的管理,幫助荷包長大吧! 喜歡撰寫文章的你,不妨來了解一下: Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入? 歡迎加入一起練習寫作,賺取知識,累積財富!