智能合約開發實戰(二) - 撰寫智能合約的程式語言

更新於 發佈於 閱讀時間約 5 分鐘

一、Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的,Solidity的語法概念最早是由加文·伍德在2014年提出,後期則以Christian Reitwiessner所領導的以太坊團隊Solidity接手開發。(出處:維基百科)

由於加文·伍德在規劃Solidity語言時參照了ECMAScript的語法概念,所以Solidity語法比較類似JavaScript,對於寫過JavaScript的人來說是相對比較容易上手的,Solidity最後經過編譯後可以放到EVM(Ethereum Virtual Machine)上執行。
區塊鏈其實分為:公鏈(比特幣(Bitcoin)以太坊(Ethereum))、測試鏈(RopstenKovanRinkebyGoerli)、個人鏈(Ganache),這個部份我另外再開篇幅做講解,這裡就不多做解釋。

所以如果您是對於JavaScript相對熟悉的話,那選擇用Solidity來撰寫智能合約就對了,在學習上會來的輕鬆一些,照著官方文件做學習,應該就能學會如何撰寫智能合約了,Solidity官方網站

  1. pragma solidity ^0.4.19;
  2. contract HelloWorld {
  3.   function sayHello() public returns (string) {
  4.     return ("Hello World");
  5.   }
  6. }

學習的話還有另外一個僵屍遊戲教學平台,藉由僵屍遊戲的教學,教你一步一步學習Solidity,由於中間是用僵屍來當做說明的,比如而如何產生一個僵屍、僵屍攻擊等,我個人是覺得還蠻有意思的,簡單易學,還蠻推薦的。

raw-image

二、Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言,針對以太坊虛擬機 (EVM),相對於Solidity是比較相似於JavaScript的,Vyper是較相似於Python的,由於Vyper比Solidity晚出現,所以目前網路上對於Vyper的相關教學相對來說會比較少,但還是可以到Vyper官方網站去做學習,如果你是比較熟悉Python的話,IDE的話一樣都可以使用RemixVisual Studio Code做為開發環境,這個就看個人的習慣了。

  1. # @version ^0.2.0
  2. greet: public(String[100])
  3. @external
  4. def __init__():
  5. self.greet = "Hello World"

兩個程式語言各有各的優缺點,如果你還是很困惑該選哪一個,那我們來比較一下這兩個有什麼差異?在Vyper的官方文件中有詳細的說明,有興趣的人可以點進去了解:Vyper官方文件,下面是我針對有對它的說明做的一些理解說明,有疑慮的可以點進去官方文件中了解。

  • Vyper沒有Modifiers,取而代之的是assert及assert_modifiable。
  • 沒有繼承(Class inheritance),Vyper的說明是去除繼承能夠提升程式的可讀性和安全性,畢竟一個寫的很複雜的繼承會降 低程式的可讀性(要一直找繼承xd),看到頭都暈了,相對的也能提升安全性(易讀就不容易寫錯),這樣說也是有道理。
  • 沒有重載(Function overloading),官方說法是:"這可能會導致在任何給定時間調用哪個函數時產生很多混淆",個人覺得是還好,但官方主要是強調Vyper的程式碼易讀性,也可以說是程式碼的單純性,所以去限制了重載的功能,進而提升程式碼的易讀性(不讓你寫的太複雜xd)。
  • Recursive calling,官方說法是:"Recursive calling會使得無法設置gas limit的上限,為gas limit攻擊敞開大門",gas是合約交易時要支付的費用,可以看成是手續費。
  • Infinite-length loops,官方說是:"和遞歸一樣無法Set gas limits,會有安全性移疑慮"

以上說明,希望各位看的還明白,Solidity是比較早出來的,所以網路上的教學也好、範例也好都是會比較豐富的,但Vyper是最近幾年才出現的,也有它的優點,看得出來是希望讓開發人員撰寫出比較易讀又安全的程式碼,而且是類似Python的(對熟悉Python而不熟JavaScript的人來說是一大吸引力),只是網路上的教學或是範例目前還是相對來說比較少的,選好未來想做為開發合約的程式語言了嗎?那就來繼續往下面走吧。

有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。

留言
avatar-img
留言分享你的想法!
avatar-img
宅D嘉的開發人生
20會員
42內容數
加密貨幣很有趣,遊戲開發也很有趣,AI也有點意思,身為一個跨多領域的軟體工程師,喜歡研究新鮮的事物,歡迎來到我的世界,一起坐上這艘開往未來探索新奇的列車。
宅D嘉的開發人生的其他內容
2025/03/28
    每個程式開發的開始都是從Hello World開始的,當然我也不免淑的來個Hello World。
2025/03/28
    每個程式開發的開始都是從Hello World開始的,當然我也不免淑的來個Hello World。
2025/03/22
 Cocos Creator 2D實戰(一) 環境設定 第二步先做環境設定:環境設定、VS Code 正常來說跟著做就可以完成環境設定了,由於是開發2D,所以右上角先選擇2.4版(目前最高版本)會比較好,比較不容易錯亂,畢竟3.x和2.x的差異很大。
Thumbnail
2025/03/22
 Cocos Creator 2D實戰(一) 環境設定 第二步先做環境設定:環境設定、VS Code 正常來說跟著做就可以完成環境設定了,由於是開發2D,所以右上角先選擇2.4版(目前最高版本)會比較好,比較不容易錯亂,畢竟3.x和2.x的差異很大。
Thumbnail
2025/03/21
Cocos Creator 實戰     Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE),程式語言是使用Javascript或TypeScript,Unity是用C#,但如果是Cocos Creator 3D的話是只能用TypeScript,所以建議還是用TypeS
Thumbnail
2025/03/21
Cocos Creator 實戰     Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE),程式語言是使用Javascript或TypeScript,Unity是用C#,但如果是Cocos Creator 3D的話是只能用TypeScript,所以建議還是用TypeS
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
  Soildity是一種風格類似JavaScript的強型別高階語言,專門用來進行智能合約的開發及編程。本文敘述solidity的獨特之處。   
Thumbnail
  Soildity是一種風格類似JavaScript的強型別高階語言,專門用來進行智能合約的開發及編程。本文敘述solidity的獨特之處。   
Thumbnail
簡單的來說就是把同類型常用的功能打包在一起,讓其他開發者能夠重複使用,達到資源有效利用的效果,以軟體開發來說就是減少多餘的程式碼,而Solidity語言中,Library可以視為物件導向中的靜態類別,不需要產生實體就能使用,因此能有效的減少Gas。 當我們剛完成一份合約時難免因為設計尚未考慮周全而導
Thumbnail
簡單的來說就是把同類型常用的功能打包在一起,讓其他開發者能夠重複使用,達到資源有效利用的效果,以軟體開發來說就是減少多餘的程式碼,而Solidity語言中,Library可以視為物件導向中的靜態類別,不需要產生實體就能使用,因此能有效的減少Gas。 當我們剛完成一份合約時難免因為設計尚未考慮周全而導
Thumbnail
每個產品在實驗室研發出來後,勢必會面臨到賣給客戶的階段,那麼當我們將產品移交給客戶時,意味著也要進行環境的安裝,但問題來了,每一個客戶的環境差異甚大,總不可能為了A客戶就建立一個A客戶的環境,因應B客戶就建立B客戶的環境,這樣隨著產品的銷售量增長也將連帶耗盡公司的資源,想必這不是我們所樂見的現象,當
Thumbnail
每個產品在實驗室研發出來後,勢必會面臨到賣給客戶的階段,那麼當我們將產品移交給客戶時,意味著也要進行環境的安裝,但問題來了,每一個客戶的環境差異甚大,總不可能為了A客戶就建立一個A客戶的環境,因應B客戶就建立B客戶的環境,這樣隨著產品的銷售量增長也將連帶耗盡公司的資源,想必這不是我們所樂見的現象,當
Thumbnail
本篇章會以實際的程式碼來說明開發Solidity的組成脈絡與重要的區塊,讓我們不再害怕閱讀艱澀難懂的程式碼,並且具備基礎知識以後也能看懂外面的合約。 開源程式碼常常會面臨到法律的問題,因此License的宣告就變得非常重要,而Solidity也考慮到這一塊,因此特別規劃了一塊License宣告的區塊
Thumbnail
本篇章會以實際的程式碼來說明開發Solidity的組成脈絡與重要的區塊,讓我們不再害怕閱讀艱澀難懂的程式碼,並且具備基礎知識以後也能看懂外面的合約。 開源程式碼常常會面臨到法律的問題,因此License的宣告就變得非常重要,而Solidity也考慮到這一塊,因此特別規劃了一塊License宣告的區塊
Thumbnail
上一篇我們介紹了智能合約的基本概念,而在開發智能合約之前, 建議先對智能合約具備基礎的概念, 往後進行開發時較容易融會貫通, 還沒閱讀的朋友可以參閱此篇「【開發智能合約 — Solidity系列】 淺談智能合約」。 理解完「智能合約」之後,相信大家已經開始手癢了吧! 應該很想開始動手完成第一個自己專
Thumbnail
上一篇我們介紹了智能合約的基本概念,而在開發智能合約之前, 建議先對智能合約具備基礎的概念, 往後進行開發時較容易融會貫通, 還沒閱讀的朋友可以參閱此篇「【開發智能合約 — Solidity系列】 淺談智能合約」。 理解完「智能合約」之後,相信大家已經開始手癢了吧! 應該很想開始動手完成第一個自己專
Thumbnail
前言 2009年比特幣創世區塊產出,區塊鏈世界就此揭開序幕,並吸引了許多開發者關注,但比特幣網路上僅有轉帳比特幣的功能,應用較為單一且缺乏彈性。 2013年由Vitalik Buterin (a.k.a V神)首次提出以太坊的概念,Vitalik本身是比特幣社群的工程師,曾經提議希望比特幣平台也能有
Thumbnail
前言 2009年比特幣創世區塊產出,區塊鏈世界就此揭開序幕,並吸引了許多開發者關注,但比特幣網路上僅有轉帳比特幣的功能,應用較為單一且缺乏彈性。 2013年由Vitalik Buterin (a.k.a V神)首次提出以太坊的概念,Vitalik本身是比特幣社群的工程師,曾經提議希望比特幣平台也能有
Thumbnail
這次的 NFT 開發,希望讓讀者們在實作時,盡量用最少的程式碼也能夠完成你的 NFT 作品,而這篇文章可以當做是一個暖身,我們會大致瀏覽本次開發 NFT 所需要用到的一些工具與小知識,大概整理之後暫時先分為六大主題...
Thumbnail
這次的 NFT 開發,希望讓讀者們在實作時,盡量用最少的程式碼也能夠完成你的 NFT 作品,而這篇文章可以當做是一個暖身,我們會大致瀏覽本次開發 NFT 所需要用到的一些工具與小知識,大概整理之後暫時先分為六大主題...
Thumbnail
本篇介紹從以太坊的發明開始,區塊鏈技術開始有了革命性的發展! 以太坊 Ethereum 如果比特幣是第一代區塊鏈,以太坊就是第二代區塊鏈,又被稱作世界電腦,可透過全球節點讓所有人使用。跟比特幣不同的是可以運行智能合約。 可運行完整的圖靈完整智能合約,圖靈完整指的是程式邏輯都可以在上面執行。
Thumbnail
本篇介紹從以太坊的發明開始,區塊鏈技術開始有了革命性的發展! 以太坊 Ethereum 如果比特幣是第一代區塊鏈,以太坊就是第二代區塊鏈,又被稱作世界電腦,可透過全球節點讓所有人使用。跟比特幣不同的是可以運行智能合約。 可運行完整的圖靈完整智能合約,圖靈完整指的是程式邏輯都可以在上面執行。
Thumbnail
Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的 Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言
Thumbnail
Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的 Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言
Thumbnail
智能合約(英語:Smart contract)是一種特殊協定,在區塊鏈內製定合約時使用,當中內含了程式碼函式 (Function),亦能與其他合約進行互動、做決策、儲存資料及傳送以太幣等功能(出處:維基百科),簡單的說就是在區塊鏈上做以太幣的交易或互動的一種程式(合約)。
Thumbnail
智能合約(英語:Smart contract)是一種特殊協定,在區塊鏈內製定合約時使用,當中內含了程式碼函式 (Function),亦能與其他合約進行互動、做決策、儲存資料及傳送以太幣等功能(出處:維基百科),簡單的說就是在區塊鏈上做以太幣的交易或互動的一種程式(合約)。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News