• 【超完整懶人包】認識比特幣!原理與應用全面解析|動區新手村
  • Account
  • Account
  • BlockTempo Beginner – 動區新手村
  • Change Password
  • Forgot Password?
  • Home 3
  • Login
  • Login
  • Logout
  • Members
  • Password Reset
  • Register
  • Register
  • Reset Password
  • User
  • 不只加密貨幣,談談那些你不知道的區塊鏈應用|動區新手村
  • 動區動趨 BlockTempo – 最有影響力的區塊鏈新聞媒體 (比特幣, 加密貨幣)
  • 所有文章
  • 最完整的「區塊鏈入門懶人包」|動區新手村
  • 服務條款 (Terms of Use)
  • 關於 BlockTempo
  • 隱私政策政策頁面 / Privacy Policy
動區動趨-最具影響力的區塊鏈新聞媒體
  • 所有文章
  • 搶先看
  • 🔥動區專題
  • 🔥Tempo 30 Award
  • 加密貨幣市場
    • 市場分析
    • 交易所
    • 投資分析
    • 創投
    • RootData
  • 區塊鏈商業應用
    • 金融市場
    • 銀行
    • 錢包
    • 支付
    • defi
    • 區塊鏈平台
    • 挖礦
    • 供應鏈
    • 遊戲
    • dApps
  • 技術
    • 比特幣
    • 以太坊
    • 分散式帳本技術
    • 其他幣別
    • 數據報告
      • 私人機構報告
      • 評級報告
  • 法規
    • 央行
    • 管制
    • 犯罪
    • 稅務
  • 區塊鏈新手教學
  • 人物專訪
    • 獨立觀點
  • 懶人包
    • 比特幣概念入門
    • 從零開始認識區塊鏈
    • 區塊鏈應用
  • 登入
No Result
View All Result
  • 所有文章
  • 搶先看
  • 🔥動區專題
  • 🔥Tempo 30 Award
  • 加密貨幣市場
    • 市場分析
    • 交易所
    • 投資分析
    • 創投
    • RootData
  • 區塊鏈商業應用
    • 金融市場
    • 銀行
    • 錢包
    • 支付
    • defi
    • 區塊鏈平台
    • 挖礦
    • 供應鏈
    • 遊戲
    • dApps
  • 技術
    • 比特幣
    • 以太坊
    • 分散式帳本技術
    • 其他幣別
    • 數據報告
      • 私人機構報告
      • 評級報告
  • 法規
    • 央行
    • 管制
    • 犯罪
    • 稅務
  • 區塊鏈新手教學
  • 人物專訪
    • 獨立觀點
  • 懶人包
    • 比特幣概念入門
    • 從零開始認識區塊鏈
    • 區塊鏈應用
  • 登入
No Result
View All Result
動區動趨-最具影響力的區塊鏈新聞媒體
No Result
View All Result
Home 區塊鏈新手教學

文組也該知道的區塊鏈技術知識 <7> 以太坊區塊鏈架構

Blockchain Technical Overview Structure of Blockchain (Ethereum)

Lai Jack 賴彥廷 by Lai Jack 賴彥廷
2019-10-26
in 區塊鏈新手教學
A A
文組也該知道的區塊鏈技術知識《1》 從一筆交易來看 ETH 與 BTC 之異同
273
SHARES
分享至Facebook分享至Twitter

本文作者為賴彥廷,於區塊鏈解決方案服務商 Pelith 沛理科技擔任專案經理,本系列文章並不會談到太深的技術鑽研,而是以深入淺出的方式,讓每一個想要了解區塊鏈技術的讀者,都可以在讀完後說出:原來如此!

本文目錄

  • How Ethereum Blockchain Work
  • 以太坊交易的一生
    • A. 單純的 Ether 轉帳交易
  • B. 部署智慧合約(Smart Contract)
    • C. 呼叫合約進行互動
    • 德國銀行報告|與黃金模型對比分析得出,比特幣將於 2020 年獎勵減半時上看 90,000 美元
    • 農曆新年到,該如何和長輩解釋「什麼是區塊鏈」?
    • 尼克森下台,《銀行保護法》到現今恐怖主義,Mastering Bitcoin作者講述「銀行終究會被比特幣摧毀」的故事

 

上一節 我們帶大家核心地認識了區塊鏈架構的全貌,相信大家都更加瞭解區塊鏈運作的機制和原理。本篇文章我們將接續上篇來介紹 區塊鏈 2.0 以太坊- Vitalik 如何在中本聰設計的比特幣架構上進行升級與改動,透過首度揭曉的「以太坊區塊鏈架構圖」帶大家完整認識以太坊的運作原理!

Vitalik Buterin 領銜設計的 區塊鏈 2.0-以太坊 Ethereum

How Ethereum Blockchain Work

以太坊虛擬機(EVM — Ethereum Virtual Machine)

智慧合約進到各節點之 EVM 執行示意圖
智慧合約進到各節點之 EVM 執行示意圖

介紹以太坊區塊鏈架構前必須要介紹一下「EVM」 ,EVM 是以太坊為了讓人人都能成為節點而創造的計算引擎。由於每個節點的軟硬體環境可能都不一樣,為了確保每個節能都能進行一樣的運算,於是各個節點都 透過 EVM 來執行 Ethereum 交易的狀態轉移與智能合約,以確保每一個節點都有相同的執行環境。

前言完畢,緊接著我們便來一探究竟:

以太坊交易的一生

有別於比特幣的 UTXO,以太坊是採用 Account 的架構。

由於以太坊多了智慧合約的設定,將會分成 A. B. C 三個 part 來做說明,

我們先從最單純的 Ether 轉帳交易開始看起:

A. 單純的 Ether 轉帳交易

「 單純的 Ether 轉帳交易 」示意圖
「 單純的 Ether 轉帳交易 」示意圖
  1. 一個使用者(EOA)欲發起一筆交易。
  2. 透過錢包(管理私鑰的工具)輸入交易資訊
    To: 對方接收地址;
    Amount: 欲轉移的 Ether 數量;
    Gas Price: 單位 Gas 給的手續費;(參閱 第 5 節)
    Gas Limit: 普通的 Ether 轉移交易都是 21,000 Gas,不用動;
    Input Data: 視是否要在交易中留下文字訊息。
  3. 以私鑰簽署交易。
  4. 廣播「加上簽名的交易封包」至鄰近的以太坊節點們。
  5. 節點接收到新交易時,會先至 State Database 檢查交易發起地址是否具有足額 Ether(Balance)可做轉移,若無則該交易會即刻被丟棄。
  6. 若檢查後確認有足額,則該交易會被放入到 Tx Pool 中。
    (按照 Gas Price 設的多寡由高至低排序)
  7. 等待出塊的同時,各節點會
    A. 廣播接收到的交易
    B. 接收未在 Tx Pool 內的交易
  8. 礦工節點們(有在用電腦算力找 nonce 值,拼出塊獎勵的節點)會撈取手續費較高的交易們,進到 EVM 運算並更改狀態值後,將已完成運算的交易們來打包成新區塊(運算中出現錯誤的交易會被丟棄),隨後用電腦算力來計算 nonce 值。
    *註:這邊的 nonce 值 跟前面介紹過的 以太坊地址的 nonce 值 不同(以太坊有兩個 nonce:一個是挖礦的;一個是地址的交易序次。)
    *註 2:運算的同時便會消耗 Gas。
  9. 成功找到 nonce 值,出塊的礦工會獲得出塊獎勵及該區塊所有打包交易給的手續費。
  10. 該礦工節點將新的區塊廣播至全世界的其他節點們。
  11. 其他節點同步 <8660586 區塊高度(最新的區塊)>、
    <State Database>、<Tx Pool> 資料,繼續廣播與接收新交易。
  12. 礦工節點再從 Tx Pool 中撈取未出塊的交易們運算並打包成新的區塊。

以上,便是一筆以太坊交易從發送到出塊會經歷的流程。緊接著我們來一探究竟智慧合約是如何部署的:

B. 部署智慧合約(Smart Contract)

我們在第 2 節 其實有概略性的介紹過一次,此刻我們搭配示意圖更完整地來介紹一遍吧!

「 部署智慧合約 」流程示意圖
「 部署智慧合約 」流程示意圖
  1. 以 Remix 或其它開發工具撰寫完成智慧合約。
  2. 將原始碼編譯為 Bytecode。
  3. 使用者(EOA)透過錢包(管理私鑰的工具)輸入交易資訊
    To: 0x0
    Amount: 視是否要將 Ether 打入合約中
    Gas Limit: 按照合約繁複程度決定要設多少
    Gas Price: 視交易狀況及欲出塊的時間急迫性
    Input Data: 放入合約 Bytecode
  4. 以私鑰簽署交易,廣播「加上簽名的交易封包」至鄰近的以太坊節點們。
  5. 節點接收到新交易時,一樣會先至 State Database 檢查交易發起地址是否具有足額 Ether(Balance)可做轉移(有些情況會把 Ether 打入合約) ,若無足額則該交易會即刻被丟棄。
  6. 若檢查後確認有足額,則該交易會被放入到 Tx Pool 中。
    (按照 Gas Price 設的多寡由高至低排序)
  7. 等待出塊的同時,各節點依舊會
    A. 廣播接收到的交易
    B. 接收未在 Tx Pool 內的交易
  8. 礦工節點們撈取起本筆合約部署交易,進到 EVM 運算。
  9. 將合約程式碼部署至 Program Code ROM,是個部署後便不能進行更動的 Read-Only Memory(唯獨記憶體)。
  10. 同時,智慧合約亦可以另外使用記憶體(Memory)來儲存合約所需要紀錄的資訊。例如:一個發行 ERC-20 Token 的智慧合約,便可以使用記憶體來 紀錄各個以太坊地址所「持有 Token 數量」,追蹤各個地址的 ERC-20 Token Balance。
  11. 上方步驟完成後,便會將運算後的結果(合約地址、Gas Used)寫回到該筆交易中。
  12. 礦工節點們將運算完的交易們 打包成新區塊(運算中出現錯誤 或 Gas 給不夠 的交易會被丟棄),隨後用電腦算力來計算 nonce 值。
  13. 成功找到 nonce 值,出塊的礦工會獲得出塊獎勵及該區塊所有打包交易給的手續費。
  14. 該礦工節點將新的區塊廣播至全世界的其他節點們。
  15. 其他節點同步 <8660586 區塊高度(最新的區塊)>、
    <State Database>、<Tx Pool>、<Contract Code ROM>、
    <ERC-20 Token Balance> 資料,繼續廣播與接收新交易。
  16. 礦工節點再從 Tx Pool 中撈取未出塊的交易們運算並打包成新的區塊。

以上,便是一筆智慧合約部署的交易從發送到出塊會經歷的流程。

最後,我們來解析呼叫智慧合約進行操作與互動:

C. 呼叫合約進行互動

這部分我們在 第 2 節 與 第 4 節 其實也有概略性的介紹過,

此刻我們搭配示意圖,更著重在節點的部分,較完整地來介紹一遍吧!

「 呼叫智慧合約 」流程示意圖
「 呼叫智慧合約 」流程示意圖
  1. 透過 DApp 介面或其它方式來呼叫智慧合約進行互動
  2. 生成以下形式的交易格式:
    To: 合約地址
    Amount: 視是否要將 Ether 打入合約中
    Gas Limit: 按操作合約的繁複程度決定要設多少
    Gas Price: 視交易狀況及欲出塊的時間急迫性
    Input Data: 放入以 hex 型態表示 的「要呼叫的合約 function 與 參數」
  3. 以私鑰簽署交易,廣播「加上簽名的交易封包」至鄰近的以太坊節點們。
  4. 節點接收到新交易時,一樣會先至 State Database 檢查交易發起地址是否具有足額 Ether(Balance)可做轉移(如牽涉到) ,若無足額則該交易會即刻被丟棄。
  5. 若檢查後確認有足額,則該交易會被放入到 Tx Pool 中。
    (按照 Gas Price 給的多寡由高至低排序)
  6. 等待出塊的同時,各節點依舊會
    A. 廣播接收到的交易
    B. 接收未在 Tx Pool 內的交易
  7. 礦工節點們撈取起本筆「合約操作交易」,進到 EVM 運算。
  8. 根據合約地址撈出 Program Code ROM 中的合約程式碼。
  9. 依照 MethodID (Function Hash) 找到合約中對應的 Function。
  10. 將相關參數填入進行對應運算。
    以 ERC-20 Token 的 Transfer Function 為例,運算時便會更改相關地址的 ERC-20 Token Balance。
  11. 上方步驟完成後,便會將運算後的結果(新的 Token Balance、Gas Used)寫回到該筆交易中。
  12. 礦工節點們將運算完的交易們 打包成新區塊(運算中出現錯誤 或 Gas 給不夠 的交易會被丟棄),隨後用電腦算力來計算 nonce 值。
  13. 成功找到 nonce 值,出塊的礦工會獲得出塊獎勵及該區塊所有打包交易給的手續費。
  14. 該礦工節點將新的區塊廣播至全世界的其他節點們。
  15. 其他節點同步 <8660586 區塊高度(最新的區塊)>、
    <State Database>、<Tx Pool>、<ERC-20 Token Balance> 等資料,繼續廣播與接收新交易。
  16. 礦工節點再從 Tx Pool 中撈取未出塊的交易們運算並打包成新的區塊。

以上,我們便核心地介紹完了以太坊區塊鏈的架構。儘管有許多的技術細節我們此時並未完整交代也未深入著墨,但相信對於初學區塊鏈技術讀者來說應該能逐步建立起區塊鏈架構的全貌。未來我們將持續在這基礎上解析更多面向的區塊鏈技術知識,謝謝大家!

以上若有任何

A. 不夠清楚的地方
B.
撰寫上改進的建議
C.
希望我能夠撰寫分享的區塊鏈技術知識內容

?相關報導?

德國銀行報告|與黃金模型對比分析得出,比特幣將於 2020 年獎勵減半時上看 90,000 美元

農曆新年到,該如何和長輩解釋「什麼是區塊鏈」?

尼克森下台,《銀行保護法》到現今恐怖主義,Mastering Bitcoin作者講述「銀行終究會被比特幣摧毀」的故事


《BlockTempo動區動趨》LINE官方號開通囉~立即加入獲得第一手區塊鏈、加密貨幣新聞報導!

加入好友



關於我們

動區動趨

為您帶來最即時最全面
區塊鏈世界脈動剖析
之動感新聞站

訂閱我們的最新消息

動區精選-為您整理一週間的國際動態

戰略夥伴

Foresight Ventures Foresight News

主題分類

  • 關於 BlockTempo

動區動趨 BlockTempo © All Rights Reserved.

No Result
View All Result
  • 所有文章
  • 搶先看
  • 市場脈動
  • 商業應用
  • 區塊鏈新手教學
  • 區塊鏈技術
  • 數據洞察
  • 政府法規
  • RootData
  • 登入

動區動趨 BlockTempo © All Rights Reserved.