📜 [專欄新文章] 2021 區塊鏈開發入門
✍️ Johnson Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
在我大學的時候,除了學習網頁前端之外,因為課程報告的需要接觸到以太坊(Ethereum),於是開始學寫智能合約,包括它使用的程式語言 solidity。
工作以後鮮少再碰以太坊的相關技術,直到最近想重新把以太坊學起來,故而決定寫這篇文章,讓初次接觸區塊鏈與智能合約的人更好地進入開發者的世界。這篇文章不只面向開發者,同時也希望能夠給對區塊鏈有興趣的人,指引一條清晰的學習路線。
關於區塊鏈
區塊鏈會被廣為人知,無非是因為虛擬貨幣的出現,而虛擬貨幣的鼻祖就是比特幣。在比特幣出現以前,沒有一個能夠在全球網路上通用的數位貨幣;在比特幣出現之後,才真的實現了數位化的貨幣,能夠在全球網路上流通。
這樣的技術性突破,blockchain 的名字從比特幣白皮書中被萃取出來,而這項技術也被更多人拿去做研發以及創新。
區塊鏈這項技術的特性可以簡單概括為兩點:去中心化(decentralized)與不可竄改(immutable)。去中心化有程度上的差別,在公共網路上由世界各地的節點共同維護的區塊鏈,去中心化程度較高;相較之下,私人企業開發由特定節點來驗證交易的區塊鏈,去中心化程度較低。
為什麼是以太坊?
這年頭區塊鏈三個字大行其道,大部分都是為區塊鏈而區塊鏈的商業炒作。容許我獨斷地說,以太坊才是區塊鏈應用的大門。
以太坊由全球最大的區塊鏈社群組成,提供一個去中心化的虛擬機器(Ethereum Virtual Machine)來處理「智能合約」,它是一個公共的區塊鏈平台,逛逛以太坊的官網吧!
智能合約
在以太坊區塊鏈中有所謂的智能合約,智能合約能夠部屬到以太坊區塊鏈上,合約即程式碼,放到區塊鏈上就不能再更新,只能執行合約上的程式,持有以太幣的人能夠與合約進行交易。把智能合約想像成是一台自動販賣機,把錢(以太幣)投進去,飲料會掉出來(合約上的程式會被執行)。
在現實生活中,簽訂合約的雙方認為合約有效而且可以被信任,是因為有國家法律來保障,違反合約可能會受到法律制裁;而用以太幣與智能合約互動,認為智能合約可以被信任,是因為智能合約的不可竄改性 — 以太坊虛擬機會毫無偏袒、完全中立、冰冷不帶任何感情地執行智能合約上已經寫好的程式碼。
建立在智能合約之上的虛擬貨幣
事實上,以太坊擴大了區塊鏈這項技術的應用層面。回頭想想,比特幣來自區塊鏈技術,某個人若想打造一款同比特幣一樣的虛擬貨幣,就得模仿比特幣去建造一個自己的虛擬貨幣區塊鏈,一個區塊鏈網路要能夠有效運作並非易事,還需要節點、需要靠人挖礦去驗證交易。此時,若使用以太坊的智能合約,撰寫虛擬貨幣需要的程式碼,將合約部屬到以太坊區塊鏈上,叮咚!他就可以發行自己的虛擬貨幣,根本不必再去建造底層的區塊鏈,也不用想挖不挖礦了。
此時會發現以太坊就像是一個區塊鏈平台,你不需要親手打造區塊鏈網路,即可享有區塊鏈去中心化與不可竄改的特性。與其他智能合約的開發者共同使用以太坊虛擬機 EVM(Ethereum Virtual Machine),在 EVM 上部屬無上限個智能合約。
以太坊是一項基礎建設,底層區塊鏈幫你架設好,開發者便有更多時間去發想應用到網頁、手機、或物連網設備上,以下是一段簡單的智能合約,該合約創造了一個虛擬貨幣簡稱 MAT…
直接進入開發領域 — 線上編輯器 Remix
Remix 是開發智能合約的線上編輯器,進入Remix官網,點選 Create New File 以後,把上方程式碼複製貼上。在左側欄位中有 solidity compiler 的選項,確認一下左側欄第一列顯示的版本,調成 0.7.0 (上方程式碼使用的版本),就可以按下下方 compile 的按鈕,將智能合約「編譯」成 bytecode(給機器讀的語言)。
接著我們要部屬合約到區塊鏈上,首先到左側欄位點選 DEPLOY & RUN TRANSACTIONS 的選項,可以看到環境是 javascript VM,這是指現在要部屬到的測試用虛擬機。按下下方的按鈕 Deploy 即可將合約「部屬」到 javascript VM 上。成功部屬後,你會發現 ACCOUNT 所持有的以太幣,從 100 變成 99.9999…,我們得知部屬智能合約需要花費一點點以太幣。
左側下方會有 Deployed Contracts,點開來就會列出合約上可供呼叫的函式,點那些函式就能與剛剛部屬上去的智能合約進行互動了。
有些函式呼叫會引發交易,所以需要以太幣,有些則不用。在 ACCOUNT 的地方可以展開來,它提供許多的地址 (address),也就是錢包,每個錢包裡面預設給你 100 顆以太幣,試著用那些地址去操作智能合約,你就能慢慢體會什麼是建立在以太坊之上的虛擬貨幣了。
真正的開發者世界
實際上開發智能合約只能算是以太坊開發的其中一部分,其他包括以太坊區塊鏈擴容方案、節點驗證等等又是另一個開發領域了,那部份我就沒有研究太多。而智能合約的開發是比較接近應用層面的,透過網頁前端或手機應用程式,與智能合約進行互動,稱作 Dapp(Decentralized App) 的開發,也象徵著網際網路走向 web3.0 的時代。
學習 solidity 語言,除了看硬生生的官方文件之外,我推薦去玩cryptozombies,我本身就是從這款網頁遊戲中學習這門語言,聽說是連小孩子都能輕易學習的教材。
除了學 solidity 之外,網路上還有很多方便的開發工具,開發者主要是運用這些工具做測試、自動化部屬、串接前端等等。許多網路上的教學文章會使用 Truffle + Ganache + web3.js 來建置開發環境。但我在這裡推薦另一款開發環境的架構,如果是新手直接從 hardhat 開始也是非常適合的,hardhat 的教學文章寫得清楚完整,本篇文章使用的程式碼也是從 hardhat-hackathon-boilerplate 這個專案而來。hardhat 使用的開發環境是 Waffle + Hardhat + ethers,它幫你把開發環境處理的簡單又舒服,讓開發者可以專注在開發智能合約上。
OpenZeppelin 是很有名的智能合約套件庫,開發時可以引入它的智能合約。智能合約很講究安全性,稍微沒寫好就可能被駭客鑽漏洞,虛擬貨幣就被盜走了!OpenZeppelin 提供的 SafeMath 很常被引入到專案,對新手來說看 OpenZeppelin 的合約也是很好的學習管道。此外,官方也建了一個學習網站ethernaut,主要在教導如何寫出安全性夠強的智能合約,可惜網站在我寫這篇文章的時間一直處於維修不能用的狀態。
最後再介紹一款實際上線的智能合約專案:Argent。它是一款運用智能合約來做虛擬貨幣錢包的公司,除了使用他們的錢包之外,也可以看看他們的智能合約是怎麼寫的,感受一下專業的程式碼架構與寫法。
小結
這篇文章希望能幫助到想了解區塊鏈這項技術的人,同時也想呈現一個智能合約的開發生態系,你大可以不必花太多力氣去了解密碼學、挖礦、節點、共識機制等等五花八門的專有名詞;反之,你可以專注在智能合約的開發,或回到本質去思考去中心化的用意、以及為什麼不可竄改的特性那麼重要。
智能合約除了做虛擬貨幣之外,也能夠做投票系統,原本以貨幣為起始點的區塊鏈技術,是智能合約的出現擴大了區塊鏈更具彈性的用途,這圈子需要更多的開發者來探勘這片新大陸。
尤其鼓勵人文社會科學的人才,無論是哲學、政治、經濟、法律或社會等各方領域,試著撇開人工智慧將主導未來社會的發展路線,與之截然不同的另一種形式:人類社會能否依靠科技的力量,促成彼此之間的合作,創造更有效率的市場、更公平的治理方式?
延伸閱讀:激進市場(Radical Markets: Uprooting Capitalism and Democracy for a Just Society)
2021 區塊鏈開發入門 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有4部Youtube影片,追蹤數超過2萬的網紅Untyped 對啊我是工程師,也在其Youtube影片中提到,常有觀眾問我有沒有推薦給程式設計初學者的軟體工程書籍,今天分享3本我自己很喜歡的電腦科學相關的書。但是,我是個非常懶得看書的人啊!!所以這三本書都是夠實用夠有趣,我才有辦法看,才會分享給你們。 這集會聊到... Overview 💬 💙 準備軟體工程師面試必備書 2:19 Cracking th...
js函式 在 軟體開發學習資訊分享 Facebook 的最佳貼文
本課程將會包含以下內容:
這堂課程分為四個大章節。從基礎 Javascript 開始帶你入門基礎使用方式諸如:運算子、迴圈、邏輯 if else 與進階作用域的使用。到第二章節會講到現代的 ES6 撰寫方式像是:Promise、同步異步、let 與 const 概念、箭頭函式等等,使用逐漸邁向主流的寫法來提升 JS 開發能力。第三章節則會進入本課程重點講解 ReactJS,從生命週期的了解到本地開發 NodeJS 的串聯使用,都是現代網頁必不可少的能力,最後透過學習到的部分嘗試練習建置常見的 Carousel、TimePicker 元件。
https://softnshare.com/javascript-es6-reactjs/
js函式 在 軟體開發學習資訊分享 Facebook 的最佳貼文
本課程將會包含以下內容:
這堂課程分為四個大章節。從基礎 Javascript 開始帶你入門基礎使用方式諸如:運算子、迴圈、邏輯 if else 與進階作用域的使用。
到第二章節會講到現代的 ES6 撰寫方式像是:Promise、同步異步、let 與 const 概念、箭頭函式等等,使用逐漸邁向主流的寫法來提升 JS 開發能力。
第三章節則會進入本課程重點講解 ReactJS,從生命週期的了解到本地開發 NodeJS 的串聯使用,都是現代網頁必不可少的能力,最後透過學習到的部分嘗試練習建置常見的 Carousel、TimePicker 元件。
✅ Javascript 的基礎介紹如:運算子、邏輯使用、迴圈。
✅ ReactJS 開發項目上手。
✅ ES6 撰寫元件庫,套用到 React 函式庫。
✅ 實作 Carousel、TimePicker 等元件。
https://softnshare.com/javascript-es6-reactjs/
js函式 在 Untyped 對啊我是工程師 Youtube 的最佳貼文
常有觀眾問我有沒有推薦給程式設計初學者的軟體工程書籍,今天分享3本我自己很喜歡的電腦科學相關的書。但是,我是個非常懶得看書的人啊!!所以這三本書都是夠實用夠有趣,我才有辦法看,才會分享給你們。
這集會聊到...
Overview 💬
💙 準備軟體工程師面試必備書 2:19
Cracking the Coding Interview 提升程式設計師的面試力
🔗 蝦皮 中文: https://shp.ee/y7rbjqk
🔗 博客來 English : https://www.books.com.tw/exep/assp.php/untypedcoding/products/F013846860?utm_source=untypedcoding&utm_medium=ap-books&utm_content=recommend&utm_campaign=ap-202105
🔗 博客來 中文:
https://www.books.com.tw/exep/assp.php/untypedcoding/products/E050035291?utm_source=untypedcoding&utm_medium=ap-books&utm_content=recommend&utm_campaign=ap-202105
💙 當畫家遇上演算法 看圖學演算法 4:28
Grokking Algorithms 白話演算法!培養程式設計的邏輯思考
🔗 蝦皮 中文: https://shp.ee/k3jtmvg
🔗 博客來 English : https://www.books.com.tw/exep/assp.php/untypedcoding/products/F013567471?utm_source=untypedcoding&utm_medium=ap-books&utm_content=recommend&utm_campaign=ap-202105
🔗 博客來 中文:
https://www.books.com.tw/exep/assp.php/untypedcoding/products/0010887779?utm_source=untypedcoding&utm_medium=ap-books&utm_content=recommend&utm_campaign=ap-202105
💙 置入生活中的演算法 6:20
Algorithms to Live By: The Computer Science of Human Decisions 決斷的演算:預測、分析與好決定的11堂邏輯課
🔗 蝦皮 中文: https://shp.ee/rvvh89e
🔗 博客來 English : https://www.books.com.tw/exep/assp.php/untypedcoding/products/F013864481?utm_source=untypedcoding&utm_medium=ap-books&utm_content=recommend&utm_campaign=ap-202105
📢 📣 📢 本頻道影片內容有輸出成 podcast 📢 📣 📢
可以在各大podcast平台搜尋「Untyped 對啊我是工程師」
請大家多多支持呀!!🙏🏻💁🏻♀️
#書到用時方恨少 #演算法繪本 #ComputerScienceBooks
一定要看到影片最後面並且在「YouTube影片下方」按讚留言訂閱分享唷!
【愛屋及烏】
YouTube 👉 https://www.youtube.com/c/Untyped對啊我是工程師
Podcast 👉 https://open.spotify.com/show/3L5GRMXmq1MRsliQt43oi2?si=3zgvfHlETeuGfp9rIvwTdw
Facebook 臉書粉專 👉 https://www.facebook.com/untyped/
Instagram 👉 https://www.instagram.com/untypedcoding/
合作邀約 👉 untypedcoding@gmail.com
-
Untyped 對啊我是工程師 - There are so many data types in the world of computer science, so are the people who write the code. We aim to UNTYPE the stereotype of engineers and of how coding is only for a certain type of people.
凱心琳: 一個喜歡電腦科學邏輯推理,在科技圈努力為性別平等奮鬥的工程師。
【Disclaimer 聲明】
Some links are affiliated.
上面有些連結是回饋連結,如果你透過這些連結購買商品,我可以得到一些小獎勵,但不會影響到你購買的價格,甚至會是更低的價格!謝謝你的支持💕
【㊫ 電腦科學/軟體工程 學習資源 📖】
用Scala學習函式程式設計
https://bit.ly/2IF0Thv
Scala 函数式程式設計原理
https://bit.ly/3kBQXTb
平行程式設計
https://bit.ly/3pCeaZf
Android 應用程式開發 專項課程
https://bit.ly/3lGCUwW
普林斯頓大學 電腦科學 演算法 基礎理論
https://bit.ly/3nxomAh
Go 語言學起來
https://bit.ly/35AWhlv
Parallel, Concurrent, and Distributed Programming in Java 專項課程
https://bit.ly/2IGnlH4
Java 軟體工程基礎課程
https://bit.ly/3fa4gJi
全端開發 跨平台手機app 開發 完整課程
https://bit.ly/2UCGWum
從0-1學 Python 3
https://tinyurl.com/python-bootcamp-untyped
從0-1學 JavaScript
https://tinyurl.com/js-complete-untyped
js函式 在 老闆,來點寇汀吧。Boss, CODING please. Youtube 的最佳解答
哈囉各位好久不見!
老闆最近在紐約留學,差不多安頓下來了,這裡時差剛好是台灣am轉成pm,但是因為熬夜習慣了好像睡差不多時間
這裡的基礎程式課堂上在教p5.js,是一套很好用的視覺函式庫,雖然有點過度簡化,但很適合快速搭建一些視覺與音像實驗
以前在逛博物館的時候,蠻喜歡這種莫名其妙的動態藝術,所以就趁機練習了一下,結合物件導向把節點模組化,與用數學做些看起來自然的模擬,意外的發現國外的creative coding課跟自己開的特效入門課精神很像
有人有興趣聽這個案例或紐約留學生活的分享嗎~
下週找個台灣晚上時間來直播XD
很像是codepen的openprocessing網站:
https://www.openprocessing.org/sketch/587576
js函式 在 老闆,來點寇汀吧。Boss, CODING please. Youtube 的最佳貼文
在使用很多canvas函式庫時,東西常常已經包裝成物件,
可以輕鬆的拖曳、偵測點擊,
但是他究竟是怎麼把純繪圖的canvas包成物件的呢,如果脫離了像是pixi.js、paper.js等函式庫,要怎麼自立自強?
這一集的週四寫程式,
一起來探索如何設計一個能夠自己自製事件跟偵測,
像是蛋糕一樣,使用物件繼承一層一層堆起介面操作的高塔。
------
手刀訂閱 老闆 來點寇汀吧 Youtube頻道!
https://www.youtube.com/channel/UCHX_XMhPrtvOmgGOnA2eTmA
上次直播-來用socket.io做個即時互動的遊戲吧!
http://to.piee.pw/v-4653934
---
基礎課程【動態互動網頁程式入門】:
https://hahow.in/cr/monoame-webdesign1
進階Canvas+JS應用【動態互動網頁特效入門】:
https://hahow.in/cr/monoame-webdesign2