Professional Documents
Culture Documents
(專題組員為 1 至 2 人為限)
班級:資工三 學號:B0843032 姓名:黃敬中
班級:資工三 學號:B0843017 姓名:陳柏諭
1. 區塊鍊智能合約應用程式開發 (共 1 題,100 分,滿分 100 分)
請以課程中所教授智能合約範例為基礎,構思一 Ethereum 智能合約應用,
並透過 Remix IDE + Metamask 部署於 Test Network。
A. 描述本專題的題目、動機、目的與架構。
動機:
根據統計發現台灣癌症死亡人數占台灣占總死亡人數的 73.3%,那這些人
當中,又有一部份的患者是沒有辦法負擔這筆龐大醫療費用的,要透過台灣癌
症基金會募款來幫助這些弱勢患者。
近幾年又由於虛擬貨幣多興盛,越來越多人在這一個圈子投入許多的資金 ,
有的會利用「挖礦」的方式來獲得虛擬貨幣,不過投資對許多人來說算是一種
不會去動用到的資產,也不會影響自己的生計,所以我們希望透過這學期在金
融科技這堂課程中的所學,建立一個以虛擬貨幣來當做一種捐款的貨幣,來對
台灣的癌症有更近一步的幫助,這樣一來既不會影響生計,也不會造成額外的
麻煩。
目的:
這個合約的主要操作者有兩種:一為基金會、一為捐獻者。
基金會:可以查詢捐獻者的詳細資訊(list_donator_info),包含錢包位址、暱
稱、留言,以及可以簡易顯示錢包位址(get_donator_list),最後可以清除捐獻者
的列表(clean_list)。
捐獻者:可以新增自己的暱稱以及想給基金會的留言,再捐獻給基金會
(donate)。
架構:
B. 解說本專題程式的開發環境、關鍵程式碼。
為了方便完成本專題,我們使用以太坊提供的線上版官方 IDE ,Remix 來
當作我們的開發環境並且使用 Solidity 來當作開發語言。
Remix:
為以太坊提供的線上版官方整合開發環境(IDE),有許多可助於開發者開
發智能合約的功能,其中包含完整的編譯器、執行合約、環境建置、發布合約
等等,讓我們在將智能合約部署於區塊鏈前,能夠先測試該合約。
Solidity:
是以太坊上編寫智能合約的主要程式語言。它是一種契約編寫的程式語言,
也就是說,智能合約可以儲存、交易與編寫在區塊鏈上。
Solidity 與 JavaScript、Python 和 C ++類似,都是有一定難度的程式語言,
它是被用來在 Ethereum Virtual Machine(EVM)上運行,且會儲存在各個全節
點上面,並在上面運行,簡而言之,學會 Solidity 就足夠讓我們在區塊鏈網絡上
建立一個智能合約與應用。
關鍵程式碼:
2. 定義 donate() function,用於給捐獻者捐獻,主要是把捐獻者的暱稱、訊息 、
ETH 的資訊傳送至 log 上並且檢查捐獻的金額是否大於 0,再利用 if 判斷式
來判斷捐獻者名稱是否已經儲存過,避免重複捐獻時名單會再新增一次,最
後在使用 emit 來觸發在一開始定義的事件 event。
3. 定義 list_donator_info() function,用於基金會查找捐獻者的名單,可以讓我
在 donation_history 中的每一個捐獻者可以顯示在 log 上面,方便查看,每跑
一次迴圈,我就可以拿到當前的捐獻者的位址,接下來就可以用 emit 將資
訊送出。
4. 定義 get_donator_list() function,是可以直接列出儲存在 donation_history 中
的捐獻者帳戶位址。
捐獻者的資料,來幫助接收端(基金會)重置捐獻者清單。
C. 呈現本專題程式的執行結果。
此部分將會以兩位捐獻者及基金會來做執行結果。圖片為帳號預設金額
捐獻者 1: 0x42C1C02DFA7DdD63d1cBB48fFAb94953dB6b3eA7
捐獻者 2: 0x6EC384609535C13fa07580762B27dAd5BFcD0295
基金會: 0x9c39e683892dDcae76071C30a54F0bE30CAb0cc9
4. 接著切換到基金會的帳號來進行操作,我們利用 list_donator_info()來觀察捐
獻者的資訊,可以發現暱稱、訊息及轉帳之金額都有顯示出來。
5. 接著利用 get_donator_list()可以直接觀察到捐獻者的錢包位址。發現兩個捐
獻者的位址都有顯示出來。