---
# System prepended metadata

title: Quorum 研究小組筆記 (10/17)

---

# Quorum 研究小組筆記 (10/17)

## 8.以太坊的理念、路線圖與基金會

### 理念
智能合約尚未出來時，尚無腳本、代幣的概念，若要發幣還要維護公鏈，成本極高；而且不能客製化發幣相關機制，因此V神(Vitalik Buterin)認為應要在鏈上開發一個圖靈完備的腳本系統。
>意即將自製程式放在區塊鏈上，讓區塊鏈去維護該腳本

透過智能合約，可以以更偶效率的方式發幣，除了可限制發幣數量，還可發行獨特代幣。

### 路線圖
![](https://i.imgur.com/nLv5SYk.jpg)
- 寧靜階段的規畫已有幾度更動，因為以太坊發現全面以POS為共識機制的想法有一定困難
- 以太坊的更動攸關挖礦速度與既得利益者，使得每一次升級日期不斷延後
- 每一次升級皆為硬分岔

### 以太坊文件
#### 白皮書
- 以太坊為DAO(去中心化自治組織)
- 可以利用++呼叫合約++的方式與合約交易，其交易可包含數據
- 圖靈完備：可完成各類運算、儲存、判斷、迴圈

#### 黃皮書
- 偏重技術面
- 希望以太坊發展為世界機器(EVM)，如果電腦只能接收0與1，那EVM就只能接受OP code，但不會太過描述op

### 相關組織
- 以太坊基金會：維護以太坊穩定與持續開發，立志邁向POS :smile:
- Status：使客戶可在手機使用以太錢包、開發DAPP瀏覽器
- ECF：以太坊開發基金
- Omisego：打造去中心化線上支付

## 9.測試鏈與公私有鏈
### 測試鏈
一條獨立於公鏈的鏈，提供給開發人員做測試用。目前測試鏈主要有以下三條，本課程將以Rinkeby為主
![](https://i.imgur.com/5eTrnqg.jpg)
- Ropsten常常被以太坊開發人員開刀，因此處理速度極慢
- Kovan速度也不及Rinkeby
- 不要拿真的錢去放在測試鏈！
- [Rinkeby官網](https://www.rinkeby.io/#stats)

### 公鏈、私鏈、聯盟鏈
![](https://i.imgur.com/dAhZT4q.jpg)
- 此處私鏈及聯盟鏈的共識機制僅列出PoA(Proof-of-authority)，但其實尚有RAFT等共識，以下介紹RAFT與PoA之不同處。
    - PoA(Proof of Authority)：基於一組有身份的節點，輪流進行記帳；設計中為了限制單個節點的權力，每個節點的簽名間隔需要大於 N (總節點數)/2，但此共識機制並無抗分岔的功能。
    - RAFT：透過Leader記帳、Follower確認的方式來出塊，但Leader 並不會馬上記錄到鏈上，而是等收到所有 Follower 的確認回執後，記錄並廣播一個執行的消息，之後所有收到執行消息的 Follower 才會將區塊記錄在本地的鏈上。這樣就可以避免分叉，確保最終性(Finality)。
[原文](https://kknews.cc/tech/gan62m8.html)

- 隨堂小考：請問Rinkeby嚴格來說是哪一種鏈呢？
->答：是公有鏈，但一般而言，我們並不會特別去提說測試鏈是哪一種鏈，在這裡提問僅是因應教學需要。

### Faucet
讓開發者取得測試幣的地方。

## 10.Ether與相關單位、Gas、Gas price
### Ether 單位
最基本單位為wei，一個Ether為10^18個wei
### gas
- **gas為與鏈上互動的步驟結算機制**，互動越多或每次帶入的資料越多，則花費的gas越多。而黃皮書詳細記載每一個基本動作、op code所需的gas花費；並由內建的智能合約幫你結算。
- 一個複雜的合約所需gas可達百萬個gas，而若是單純轉帳步驟的話則為21000個gas，所以身為一個優秀的開發者，應要優化自己的程式使自己的花費gas降至最低。
### gas price
**gas price即gas之價格**，通常以Gwei(10^9 wei)為單位計價，只要你開出來的gas price越高，交易便會成交得愈快。

## 11.Mist(重錢包)
### 主要為客戶端操作過程:smile:
以太坊client端為維持以太坊運作的基本程式之一
- 重節點在交易未完成同步之前，餘額不會更新
- mist除了有錢包的功能，還有佈合約、瀏覽器的功能。
- remote node/local node?
- 不管是mist還是Ethereum Wallet這兩個官方錢包，背後都有一個稱為Geth的節點在運作，Geth是以類似命令提示字元的方式在運作，操作極為不便，所以Geth都是在背後自動運作。

在底下附上各種錢包之比較: 
![](https://i.imgur.com/OwKP9JZ.jpg)

### 全節點
全節點須同步所有的帳本與交易，並代表你也加入到維護這個區塊鏈的行列之中，一起驗證鏈上的交易，維持共識機制。通常是由大公司或是基金會共同貢獻，而我們便是享受他們所提供的服務。

## 12.Metamask(輕錢包)
### 輕錢包
- 不會同步交易，只會透過API將自己已簽章的交易透過廣播散播到鏈上，但私鑰仍由私人節點保管。
- 以備份私鑰的方式，可以同時創建多個地址。(地址是由私鑰運算得到)

## 13.EIP、ERC
### EIP(Ethreum Improvement Proposal)
#### 提案流程如下：
- 某人有想法，並符合POS等以太坊終極目標的話，便可提案
- 全體討論達到基金會、社群的共識
- 通過後，將在最近一次更新時實施
![](https://i.imgur.com/RjxYmEp.jpg)
通常會將提案放在github上兩周，全數同意後才會進入final階段

#### 提案分類：
- core：如op code的gas數量
- networking：如EIP-1459利用DNS使節點更容易找到
- interface：EIP-1102需使用者同意才能讀取Metamask帳號
- 假如你的提案能使應用程式擁有更完善架構並成為一種規範，便稱ERC：
  EIP-55提供大小寫檢查碼避免位址輸入錯誤
![](https://i.imgur.com/VNgmpZU.jpg)

#### ERC20
ERC20為一種代幣標準，明確界定了代幣轉移方法、轉移對象等等的標準；若你直接聲明你的代幣按照ERC20，別人便可以以更明確的方式去審核你的代幣。

ERC20只是一個規則，開發者可以另行自訂挖礦規則(透過玩遊戲、ICO等方式得到)、用途等等，且其代幣的信用需要開發者自行爭取。

#### ERC721
數位資產(non-fungible token)的標準
#### ERC918
可利用智能合約來湊隨機數，制定了挖礦難度的標準。

## 15.智能合約入門
### 區塊鏈瀏覽器(15)
如果我要看鏈上的一筆資料，總不可能每次都還要慢慢等同步，耗費大量時間成本。
於是有人將自己作為全節點，將上面的資料轉移至網站之中，供大家瀏覽。
如：[etherscan](https://etherscan.io/)(業界常用)
通常會利用瀏覽器來檢查是否自己的資料已經上鏈。

瀏覽器會包含以下資訊：
- 區塊內容資料揭示、整理、分析
- 你的所有交易內容
- 地址
- 若你有做程式碼驗證，那你也能看到自己的程式碼，否則只能看到op code
- 該交易之ERC的所有資料(持有者統計等等)

### 編譯(15)
編譯意即將原本的solidity原始碼轉換為多個OP code。
**但合約上傳後要記得驗證**，否則原始程式碼會跑不出來，而不會有人敢玩不透明的合約。所以我們要將明碼上傳，讓etherscan去做編譯並與你上鏈的合約比對驗證。驗證完成後便後出現一個綠色勾勾。
若驗證出現問題，多半是編譯器版本出錯或是操作錯誤。

### 部署(15)
部署後，可選擇是否開源，就算不選擇開源，還是可以互動。開源只是差在程式碼是否公開。

### 物件導向(16)
物件導向有以下思考重點：
- 屬性(顏色、車牌、引擎、品牌等**名詞**面向)
- 方法(引擎發動、倒車等改變名詞的**動詞**)
- 事件(倒車時會觸發逼逼叫這個動詞，指**觸發動詞的機制**)

> 簡單而言；**事件**觸發**方法**，**方法**改變**屬性**


以智能合約greedy599為物件導向思考的例子：
- 屬性(倒數秒數、第幾輪、賣出愛心數...)
- 方法(買愛心、領獎)
- 事件(倒數完成時)

以智能合約etherscan為物件導向思考的例子：
- 屬性(read contract information之內容)
- 方法(BuyHeart, withdraw...)

### 運算子(17)
- 兩個*代表次方，如10**3=10^3)
- 下圖c之結果為true 
```javascript
count = 5;
c = 30 > count;
print c;
```
- 同時遇到算術子與比較子時，先走比較子
- 遇到複雜運算時，寧願多加幾個括弧...

### 控制結構(18)
- if-else結構
- [javascript練習平台](https://jsbin.com/?html,output)
- 印出：document.writeln("字符", 運算)
- 換行：<>裡面寫br



`









