---
# System prepended metadata

title: 區塊鏈與智能合約開發

---

# 區塊鏈與智能合約開發

## 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)
