ERC1155 ticket system 這個專案是 Alu 在今年暑假跟我提出的一個想法,當時的發想請見【DAY3】的內容。
在那之前我一直對於鐵人賽的主題沒有太多想法,原本的主題是:Blockchain Introduction 或是 Ethereum Introduction,這些主題並不是不好,就是沒辦法太深入的去了解一些開發的流程,像是需要先把合約寫好,合約寫完後要 deploy,deploy 後再用 web3js 來呼叫並執行,同時我需要有 metamask 連結才能與 provider 互動等等。
透過這個專案我學到了很多東西,下面來分享一下整體專案我的學習過程與專案中我認為需要改進的地方。
我是依循著之前學習的內容(可見【DAY2】)來建構整個專案的前端,像是 react-router-dom
的使用,自定義 hook function: useFetch()
的使用,整個 css
的參考等。
整體來說我蠻滿意這次的前端開發過程,不僅讓我學到很多東西,也讓我了解前端開發到底是怎麼一回事。
但我認為這個專案可能需要透過 mobile device 會更為實用,畢竟不會有人帶著一台電腦去看奧運比賽吧!因此未來可能需要再學會 React-native 等用於行動裝置開發的框架會比較好,我也在網路上看到有些人可以利用 iphone 上的 Apple wallet 作出應用,像是顯示 NFT 的 QRCode 等等,將應用建立在大家以熟悉的平台上面似乎會是個可以提升使用意願且開發上更方便的選擇。
web3.js
的部分我幾乎都是透過看官方文件還有觀察其他人的專案來完成的,這部分算是完全的自學(嗎)。
雖然可以透過 web3.js 來完成大部分 DApp 所需要的事情,但我覺得我也需要學習另一個好用的 ethers.js
(但我現在還無法說出他們的差異哈哈,需要等到未來的我來說明了)。
除此之外,在使用 web3.js 時也會遇到很多關於 transaction 的事情,也順便讓我補足了關於 Ethereum 中 tx 的知識,真是一舉兩得!
在 solidity 上,我除了看 CryptoZombie 以外,我也有看一些 youtube 上的教學影片。除此以外也會看 solidity doc、看 Openzeppelin 的 doc 來了解一些 ERC 或是 OZ 提供的合約是在幹嘛、甚至也會同時參考 EIP 上的解釋(很多都解釋的很棒!)。
其中有幾天的內容我沒有在專案中實作,除了考量後端的問題(像是我需要一個後端來存取 WhiteList),也考量到驗證方並不是使用者,因此我們不能用使用者的私鑰去做簽章等,最後綜合考量做出最後的驗證方式。
這幾天的內容真的讓我搞懂很多東西,像是透過 Merkle Proof 我了解了 abi.encodePacked
的運作方式、 Buffer
等 library 是如何將 string 轉換成 bytes 的、Signature 使用的驗證方式,公鑰私鑰的產生方式、每次交易的簽章方式等。在 Upkeeper 那邊學會了利用 Chainlink 的系統作出自動化檢查的合約,之後也在一次黑客松上用到了!
每次寫完智能合約,想要測試功能的時候,我多半只會用 remix 的呼叫函式按鈕,或是利用 webjs 來 call function。
但是這樣的測試似乎是不太行的,傳說有個偉人說過要成為一個工程師之前就必須學會測試!(我也不知道誰說的哈哈)因此我認為未來的我也需要學習如何「測試」。
現在有許多框架可以做到測試的功能,如 hardhat、Foundry 等,都還需要了解。
其實暑假的一開始我連 Javascript 都不太會,更不用說 React 了,只是透過網路上的資源學習,慢慢的一步步學習,其中也跟著一些影片做出了一些小小的網頁。
但是在整個開發的過程中,我發現「跟著影片做」是「完全不能夠提升自己的能力」的。
在學習的過程中應該是不斷的思考為什麼「它要這麼用」,「這樣使用背後的邏輯是什麼」,當你了解這些原理時,你在使用這些東西時的邏輯會比較清楚,debug 的時候也很容易能找出一些問題。
我認為我在這段時間中最常做的是:
這樣做並不是不行,但有時候並沒有完全理解為什麼會出現這些 bug,有時是靠運氣來 debug,但我覺得這樣的心態非常不正確。
例如我在 Verify 頁面時,當我登入 MetaMask 後並沒有更新我的 token 有幾張,我一直往 useState()
不會更新的方向去尋找,最後是發現 useEffect
中的 dependency 中是空的!
這可能代表我在遇到問題時,並沒有認真去思考可能是由什麼造成的,因此在遇到問題的時候才會不知所措。
想看專案內容的可以在這個 github repo看到
感謝 Alu aka 我大哥不厭其煩回答我的蠢問題還有找我參加比賽!感謝 YenLong 幫我解決了一些在 ECDSA 上的問題!感謝爸媽的支持,沒有他們便沒有我。
其實這兩個月前我從來沒想到我這個專案會變成一個很複雜的系統,我以為這個專案只會讓我學會怎麼呼叫 MetaMask 而已吧!
我自認為我這兩個月學習到很多,不論是關於 Ethereum 的基本知識,或是開發上的能力都有了顯著的成長,期許我未來可以持續成長,不斷學習,再與大家分享。
這次比賽我的主題是「RoadMap To a DApp developer」,但我這個非本科生仍不敢稱自己是個工程師。透過這次比賽過程,我理解到自己的能力距離他們(本科生或是厲害的人們)還有很大一截,而要追上他們的唯一的途徑沒有別的,只有不斷的努力學習了!
這邊放上一隻我最喜歡的百變怪,希望我可以像他一樣在不同的環境也能不斷改變自己,不斷地充實自己!
百變百變!
感謝看到這邊的人們,希望未來還會參賽,與大家分享一些我喜歡的內容!
歡迎贊助窮困潦倒大學生
0xd8538ea74825080c0c80B9B175f57e91Ff885Cb4