You are on page 1of 8

110 學年 第 2 學期 金融科技安全 期末專題報告 日期:2022/6/23

(專題組員為 1 至 2 人為限)
班級:資工三 學號:B0843032 姓名:黃敬中
班級:資工三 學號:B0843017 姓名:陳柏諭
1. 區塊鍊智能合約應用程式開發 (共 1 題,100 分,滿分 100 分)
請以課程中所教授智能合約範例為基礎,構思一 Ethereum 智能合約應用,
並透過 Remix IDE + Metamask 部署於 Test Network。

請於 2022/6/23 23:59 前透過數位學習園區繳交報告及程式碼

A. 描述本專題的題目、動機、目的與架構。

題目:Smart Contract forTaiwan Cancer Foundation

動機:
根據統計發現台灣癌症死亡人數占台灣占總死亡人數的 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 就足夠讓我們在區塊鏈網絡上
建立一個智能合約與應用。

關鍵程式碼:

1. 一開始先定義一個事件 event,在這個事件中會接收到 5 個參數,分別為


foundation(基金會)、donator(捐獻者)、nickname(暱稱)、value(多
少錢)、message(訊息)

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 中

的捐獻者帳戶位址。

5. 定義 clean_list() function,最後的功能是清除所有儲存在 donation_history 中

捐獻者的資料,來幫助接收端(基金會)重置捐獻者清單。

C. 呈現本專題程式的執行結果。
此部分將會以兩位捐獻者及基金會來做執行結果。圖片為帳號預設金額

捐獻者 1: 0x42C1C02DFA7DdD63d1cBB48fFAb94953dB6b3eA7
捐獻者 2: 0x6EC384609535C13fa07580762B27dAd5BFcD0295
基金會: 0x9c39e683892dDcae76071C30a54F0bE30CAb0cc9

▲ 捐獻者 1 ▲ 捐獻者 2 ▲ 基金會


1. 首先我們將寫好的程式碼部屬至 Ropsten 測試網路,原先使用的是 Koven 測

試網路,但我們發現測試用的 ETH 太難取得,所以改用 Ropsten。

2. 接著透過捐獻者 1 的帳號對基金會進行捐助,我們以 1 ETH 來捐贈。


捐獻者 2 同理,所以並無舉例。
3. 下圖為捐獻完成後的帳戶餘額。我們可以觀察到捐獻者的錢都已匯入基金會
的帳號裡。

▲ 捐獻者 1 ▲ 捐獻者 2 ▲ 基金會

4. 接著切換到基金會的帳號來進行操作,我們利用 list_donator_info()來觀察捐
獻者的資訊,可以發現暱稱、訊息及轉帳之金額都有顯示出來。

5. 接著利用 get_donator_list()可以直接觀察到捐獻者的錢包位址。發現兩個捐

獻者的位址都有顯示出來。

6. 最後是 clean_list(),可以將捐獻者的名單直接刪除。我們觀察 log 裡的確捐


獻者的名單都已消失。

You might also like