第六章 營建產業的區塊鏈應用示例: 建材溯源
6.4 建材溯源示例之智能合約編寫成果
6.4.1 建材溯源智能合約示例運作流程展示
Remix 為 以 太 坊 提 供 的 線 上 版 官 方 整 合 開 發 環 境 ( Integrated Development Environment),除了編譯程式外,尚能將智能合約佈署至以太坊區塊鏈上。(如同 6-3 節綜整區塊鏈導入框架應用於建材溯源之 R2 結論)
本章節利用 Remix 測試建材溯源範例之智能合約編寫成果,以一批鋼材從上游至 下游之銷售及朔源為例,展示其過程,並且最後實際使用以太幣交易將智能合約 發佈至以太鏈。(如同 6-3 節綜整區塊鏈導入框架應用於建材溯源之 R4 結論)
圖 6-7 Remix 示意圖
如圖 6-7,利用 Solidity 語法事先在編譯器上編寫好智能合約,並將已經編寫好的 智能合約檔案 MaterialManagement.sol 導入 Remix 上(也可以在 Remix 上直接進行 語法編寫),並且選擇對應之 Solidity 版本進行編譯及偵錯,以確保語法無誤可以
圖 6-8 合約編譯通過
如圖 6-8,選擇對應之 Solidity 版本編譯,無偵錯顯示,已確認智能合約編譯通過。
圖 6-9 DEPLOY AND RUN TRANSACTIONS
如圖 6-9,選擇 DEPLOY AND RUN TRANSACTIONS 進行合約的佈署與互動。
圖 6-10 選擇要佈屬合約的錢包地址
圖 6-10,選取 Remix 內建測試用第一個地址(0xca3…733c),按下 Deploy 佈署合約。
圖 6-11 合約佈署成功
圖 6-12 五個合約功能
如圖 6-12 及 6-13,可看到五個合約互動功能:
1. buildProduct: 輸入建材商品資訊上鏈,並生成此建材獨一無二之 hash 雜湊值。
2. addOwnership: 新增建材商品擁有者。
3. changeOwnership:更換建材商品持有者,記錄銷售履歷。
4. Products: 呼叫查詢商品資訊。
5. getProductAddressHistory: 呼叫查詢商品銷售履歷。
圖 6-13 合約輸入值及輸出值
下列為此鋼筋銷售範例中所假設的銷售過程參與者及其地址 中鋼: 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
台大營造廠: 0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db NTU 建設公司: 0x583031d1113ad414f02576bd6afabfb302140225
圖 6-14 功能 buildProduct 輸入值
如圖 6-14,以建材製造商中鋼之地址(0x147…60c)進行合約互動,在 buildProduct 中輸入建材商品資訊上鏈。包含:製造商名稱、流水號、產品名稱、製造日期、號 數標準、強度、數量。
圖 6-15 功能 buildProduct 交易成功
如圖 6-15,交易成功。已將此中鋼第 1 筆建材商品資訊上鏈,並生成此商品 hash 雜湊值: 0x3ce0d5439872ae6ca36d5da9f8540e2c482b6abc41fffced5ea4de612f92dce3
圖 6-16 對功能 Products 進行呼叫
此時透過此商品 hash 雜湊值(0x3ce…ce3)對 Products 進行呼叫。
圖 6-17 功能 Products 交易成功
圖 6-18 建材商品之上鏈資訊
如圖 6-17,交易成功。代表已經可以在區塊鏈網絡上查詢到此建材商品之資訊(圖 6-18)。資料具有公開透明、不可被竄改、分散式存處、可信任的優勢特性。
接下來進行建材商品銷售過程、溯源查詢與合約互動之步驟。
假設中鋼製造此 100 根鋼筋,銷售給台大營造廠,最後再到 NTU 建設公司手上。
圖 6-19 功能 addOwnership 之輸入值
圖 6-20 功能 addOwnership 交易成功
如圖 6-19 及徒 6-20,以中鋼之地址(0x147…60c)進行合約互動,透過 addOwnership 功能新增此訂單擁有者。輸入商品 hash 雜湊值(0x3ce…ce3)及公司名稱後,智能合 約系統將會檢視合約互動者之地址,判斷其是否為當初商品建造者,才能合法地 新增此訂單擁有者。
圖 6-21 功能 changeOwnership 輸入值
圖 6-22 功能 changeOwnership 交易成功
以建材擁有者即中鋼之地址(0x147…60c)進行合約互動,透過 changeOwnership 功 能更換建材持有者為台大營造廠(0x4b0…2db),過程中對此建材記錄著銷售路徑。
圖 6-23 功能 changeOwnershi 第二次輸入值
圖 6-24 功能 changeOwnership 第二次交易成功
如圖 6-23 及圖 6-24。以當前建材合法擁有者即台大營造廠地址(0x4b0…2db)進行 合約互動,透過 changeOwnership 功能更換建材持有者為 NTU 建設公司(0x583…225),
過程中仍然對此建材(當初 buildProduct 生成的商品 hash 雜湊值)記錄著銷售路徑。
圖 6-25 對 getProductAddressHistory 進行呼叫
如圖 6-25,最後用此建材商品 hash 雜湊值(0x3ce…ce3)對 getProductAddressHistory 進行呼叫。
圖 6-26 功能 getProductAddressHistory 交易成功
圖 6-27 建材商品之銷售路徑溯源
如圖 6-26,交易成功。 再來如圖 6-27,結果顯示此建材商品從中鋼(0x147…60c) 轉手到台大營造廠(0x4b0…2db)再轉手到 NTU 建設公司(0x583…225),且轉手再多 的中間商都能顯示。
代表任何人(中間廠商或是最後的消費者)只要擁有此商品之 hash 雜湊值,便可以 在區塊鏈的公開網絡上查詢到此建材商品之銷售路徑。再搭配 Products 查詢建材 製造資訊功能,即為此智能合約範例完整之建材溯源功能。且這些溯源資料具有 區塊鏈之公開透明、不可被竄改、分散式存處、可信任的優勢特性。