• 【超完整懶人包】認識比特幣!原理與應用全面解析|動區新手村
  • 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 區塊鏈新手教學

文組也該知道的區塊鏈技術知識《2》:一次搞懂「以太坊智能合約」如何運作

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

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

本文目錄

  • 何謂智能合約?
  • 如何部署智能合約?
  • 什麼是合約地址?
  • 結論
    • 文組也該知道的區塊鏈技術知識《1》 從一筆交易來看 ETH 與 BTC 之異同
    • 比特幣的最小單位 Satoshi(SAT),究竟要用什麼符號來表示?

 

在上一篇《從一筆交易來看 ETH 與 BTC 之異同》中,我們從一筆交易來概略說明了 ETH 與 BTC 轉帳交易的不同之處,本篇文章我們要來談以太坊智能合約。不會談到實作部分,而是希望能從實際應用場景切入來說明,讓閱讀完本文的讀者都能充分理解智能合約的技術運作原理。

好!那本文便開始囉!我們直接開門見山地來談談:

何謂智能合約?

智能合約本質上是一段部署 ( Deploy,即發佈 ) 到區塊鏈上的程式碼,因為區塊鏈上的程式碼(嚴格來說是二進位碼)可以被檢視,所以具備公開透明的特性。

智能合約被部署到鏈上後會產生一個合約地址,永久存在於鏈上的區塊之中。以下用 Pelith 開發部署之 CryptoCow 智能合約為範例做解說。

如何部署智能合約?

我們從智能合約的誕生談起。

開發者將程式碼開發完成後,要透過發送一筆接收地址為 “0x0” 開頭的交易(一般交易的接收地址為0x開頭,後面接一串字),並在交易的 Input Data 內放上開發完成的程式碼。礦工看到接收地址為 0x0 的交易就會知道交易的發送者想要部署智能合約,隨後便會將 Input Data 內的程式碼部署到區塊鏈上,並生成一個合約地址。

然而我們會發現 Input Data 充滿了看不懂的文字,似乎跟我們印象中的程式碼不太一樣,原因是在以太坊上儲存的合約邏輯是以 Bytecode 的形式,所以開發者以 Solidity 開發的原始碼必須先被編譯成 Bytecode 才能部署上鏈。

目前大多數開發者使用的開發工具,如:Remix 本身都具備編譯的功能,開發者開發完原始碼後只要一鍵進行編譯的動作便能取得 Bytecode 。

至此,我們來整理一下部署智能合約上鏈的流程:

  1. 開發者以 Solidity 編寫完成合約
  2. 原始碼編譯為 Bytecode
  3. 放入交易的 Input Data 中
  4. 接收地址部分留空(0x0)
  5. 節點 (礦工) 判定為要發送合約上鏈
  6. 礦工執行,並部署上鏈生成智能合約
  7. 合約擁有自己的「合約地址」,永久存在鏈上

什麼是合約地址?

在合約生成之後,會創造出一個合約地址,讓合約(Contract Account)和個人帳戶(Externally Owned Account)一樣都有一個地址,會紀錄追蹤 nonce(帳戶的交易次數) 和 balance(帳戶餘額)。

不過合約因為是「被」創造出來的,不像個人帳戶一樣可以「主動操作」來發送交易給別人,所以我們如果要使用智能合約的功能,必須要以個人帳戶發送一筆「接收地址為合約地址」的交易,來主動觸發合約,讓合約執行動作。

因此,任何一筆交易的起點都必須是個人帳戶。

接著,我們來實際看看一筆和智能合約互動的交易,下方是一筆很常見的操作合約交易,內容是將一顆透過智能合約創造出來的 ERC-20 代幣,從一個地址轉移到另一個地址中。而這些操作,必須透過交易發起者將這些操作以程式原始碼撰寫,編譯後放到 Input Data 中。

上方紅框中其實是 Etherscan 解碼(Decode)後呈現的樣式,而 Solidity 原始碼編譯後其實是長得像下列這樣,以 hex(16進位制)的方式表示。

對照上下兩種不同表現形式的圖,我們可以發現下圖紅底線的部分(0x93316cdf)在上圖中被以 MethodID 標示出來。其實 0x 後的前 8 碼表示的是 我們要呼叫合約中的什麼 function(在智能合約撰寫時我們會規劃有哪些功能是可以使用的),後面接的則是該功能的其它參數。

而這個 MethodID(0x93316cdf)其實也有許多其它的別名,這邊列舉一些比較常聽到的:HashID、Function Hash、Function Signature 等。

因此,知道這個之後,未來我們在操作 DAPP 時,便能去檢視背後的操作,也可以直接上以太坊區塊鏈瀏覽器 Etherscan 去追蹤交易(Transaction),看是否智能合約真的有按照 DAPP 應用程式介面顯示的狀態去執行功能。

如果不確定這個 MethodID 是什麼功能或會做什麼,可以到 Ethereum Function Signature Database 上查詢:

把 0x93316cdf 貼上並搜尋後,便能得知這個 MethodID 對應的是什麼 function,可以再以這個 function 到智能合約的程式碼中去確認到底操作了什麼。

結論

  1. 智能合約是一段部署到區塊鏈上的程式碼,可以有各式各樣的功能。因為區塊鏈公開透明的特性,所以可以被任何人檢視和驗證。
  2. 合約部署完成後會生成「合約帳戶」,有自己的合約地址。但所有的交易與操作都必須「個人帳戶」發起,去呼叫合約中的 function 來執行。
  3. 想要確認操作合約的交易到底做了什麼,可以檢視 Input Data 內 0x 後的前八碼 MethodID,並查詢這是什麼 function,再到合約帳戶中去檢視原始碼來確認。

好!介紹到這邊,大家閱讀至此應該都對於智能合約的概念有了基礎的認識,未來在操作 DAPP 與檢視智能合約時也多了更多的背景知識可以去做驗證。下一節我們將來介紹 區塊鏈代幣的演進史,從初代比特幣上的 USDT,到以太坊的 ERC20 token,最後會談到在技術觀點上 Libra 為什麼無法吸引頂尖開發者的目光,謝謝大家。

?相關報導?

文組也該知道的區塊鏈技術知識《1》 從一筆交易來看 ETH 與 BTC 之異同

比特幣的最小單位 Satoshi(SAT),究竟要用什麼符號來表示?


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

加入好友

Tags: 以太坊智能合約

關於我們

動區動趨

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

訂閱我們的最新消息

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

戰略夥伴

Foresight Ventures Foresight News

主題分類

  • 關於 BlockTempo

動區動趨 BlockTempo © All Rights Reserved.

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

動區動趨 BlockTempo © All Rights Reserved.