# 區塊鏈與智能合約開發 ## Blockchain 介紹 - Blockchain 的起源是因為Bitcoin的出現 - Blockchain 是一個distributed network - Blockchain 本身不涉及任何加密方法 ### Digital Signature 特性 - Autentication - Integrity - Non-Repudiation ### Hash Function - Avalanche Effect: 當input 發生最微小的改變時,也會導致output 的極大的改變 - SHA-256 - Merkle Tree/Hash Tree: 將多個Hash 值做壓縮 ### 競爭機制 Hash 完的output < 某個設定的數字 => Try 區塊裡的 Nonce ### 驗證機制 PoW (Proof-of-Work): 通常要等待few round 才會被確認 ## 智能合約介紹 - 智能合約是一段可執行的程式碼 - 減少中介者的需求 - 屬性: 1. 地址 2. 餘額 3. 合約狀態與函式 - 轉成位元碼後可以執行在以太坊的虛擬機(EVM)上 - 開發語言: 1. Solidity 2.Vyper ## 智能合約開發 ### 開發概念 - Provider: 可理解成一網址(節點),且此網址具有以太坊客戶端程式,可與Blockchain 溝通,e.g. 1. Ganache 2. Geth、Parity node(locally) 3. Infura、Cloudflare - RPC API: 遠端程序呼叫協定,最早用於API 互動,e.g. XML-RPC、JSON-RPC。與RPC API相返的就是REST API - Web3: 將以太坊JSON-RPC做包裝 - 前端網頁程式/框架: 除了三大框架巨頭,智能合約常用Trufflesuite ### MetaMask 創建 ![](https://i.imgur.com/6srnxEV.png) ### Rinkeby 測試網路取的測試以太幣 ![](https://i.imgur.com/jb4ozCd.png) ### 設計YZU Token #### 1.變數、事件宣告 ![](https://i.imgur.com/5YHtMQo.png) #### 2.建構Constructor ![](https://i.imgur.com/1jTgG6E.png) #### 3.建立合約函式 ![](https://i.imgur.com/FUFKW5N.png) ![](https://i.imgur.com/ruomtdD.png) #### 4.前端透過Web3.js 與以太坊構通 ##### (1)初始化Web3.js 和Contract ![](https://i.imgur.com/K7vcSm8.png) ##### (2)設定按鈕觸發事件 ![](https://i.imgur.com/1THILlr.png) ##### (3)取得餘額 ![](https://i.imgur.com/69ULPxR.png) #### 5.利用Truffle部屬合約即完成 ![](https://i.imgur.com/bQrmddj.png)