# Quorum 研究小組筆記 (10/17) ## 8.以太坊的理念、路線圖與基金會 ### 理念 智能合約尚未出來時,尚無腳本、代幣的概念,若要發幣還要維護公鏈,成本極高;而且不能客製化發幣相關機制,因此V神(Vitalik Buterin)認為應要在鏈上開發一個圖靈完備的腳本系統。 >意即將自製程式放在區塊鏈上,讓區塊鏈去維護該腳本 透過智能合約,可以以更偶效率的方式發幣,除了可限制發幣數量,還可發行獨特代幣。 ### 路線圖  - 寧靜階段的規畫已有幾度更動,因為以太坊發現全面以POS為共識機制的想法有一定困難 - 以太坊的更動攸關挖礦速度與既得利益者,使得每一次升級日期不斷延後 - 每一次升級皆為硬分岔 ### 以太坊文件 #### 白皮書 - 以太坊為DAO(去中心化自治組織) - 可以利用++呼叫合約++的方式與合約交易,其交易可包含數據 - 圖靈完備:可完成各類運算、儲存、判斷、迴圈 #### 黃皮書 - 偏重技術面 - 希望以太坊發展為世界機器(EVM),如果電腦只能接收0與1,那EVM就只能接受OP code,但不會太過描述op ### 相關組織 - 以太坊基金會:維護以太坊穩定與持續開發,立志邁向POS :smile: - Status:使客戶可在手機使用以太錢包、開發DAPP瀏覽器 - ECF:以太坊開發基金 - Omisego:打造去中心化線上支付 ## 9.測試鏈與公私有鏈 ### 測試鏈 一條獨立於公鏈的鏈,提供給開發人員做測試用。目前測試鏈主要有以下三條,本課程將以Rinkeby為主  - Ropsten常常被以太坊開發人員開刀,因此處理速度極慢 - Kovan速度也不及Rinkeby - 不要拿真的錢去放在測試鏈! - [Rinkeby官網](https://www.rinkeby.io/#stats) ### 公鏈、私鏈、聯盟鏈  - 此處私鏈及聯盟鏈的共識機制僅列出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都是在背後自動運作。 在底下附上各種錢包之比較:  ### 全節點 全節點須同步所有的帳本與交易,並代表你也加入到維護這個區塊鏈的行列之中,一起驗證鏈上的交易,維持共識機制。通常是由大公司或是基金會共同貢獻,而我們便是享受他們所提供的服務。 ## 12.Metamask(輕錢包) ### 輕錢包 - 不會同步交易,只會透過API將自己已簽章的交易透過廣播散播到鏈上,但私鑰仍由私人節點保管。 - 以備份私鑰的方式,可以同時創建多個地址。(地址是由私鑰運算得到) ## 13.EIP、ERC ### EIP(Ethreum Improvement Proposal) #### 提案流程如下: - 某人有想法,並符合POS等以太坊終極目標的話,便可提案 - 全體討論達到基金會、社群的共識 - 通過後,將在最近一次更新時實施  通常會將提案放在github上兩周,全數同意後才會進入final階段 #### 提案分類: - core:如op code的gas數量 - networking:如EIP-1459利用DNS使節點更容易找到 - interface:EIP-1102需使用者同意才能讀取Metamask帳號 - 假如你的提案能使應用程式擁有更完善架構並成為一種規範,便稱ERC: EIP-55提供大小寫檢查碼避免位址輸入錯誤  #### 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 `
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up