iT邦幫忙

2022 iThome 鐵人賽

DAY 11
1
Web 3

Road Map To DApp Developer系列 第 11

【DAY11】 - Wallet and Provider

  • 分享至 

  • xImage
  •  

Preface

在網頁上連接錢包前,想與大家介紹一下 Wallet、Provider、RPC 等在 Ethereum 中很常聽到的名詞到底是什麼。

名詞解釋

Wallet

我們很常聽到的「錢包」,例如 Metamask、Trust Wallet、Keplr Wallet 等,可以幫助我們與區塊鏈互動。例如我們可以透過在 Remix 中的 Environment 選取 Injected Provider,此時便會自動跳出你在瀏覽器裝的錢包,並使用錢包中的地址來發送合約或是與合約互動

但是這個錢包到底是什麼呢?

私鑰管理器

事實上這些錢包是一個集中管理你的私鑰的「管理器」。但是為什麼我們需要這些錢包幫助我們管理這些私鑰?

交易是什麼?

這就牽扯到以太鏈運作的核心--交易(Transaction)了。

交易大致上可以分為三種:(EOA = Externally Owned Address,也就是一般人所擁有的地址)

  1. EOA (from) 匯款給 EOA(to)。
  2. EOA (from) 部屬合約。(此時交易的對象(to)會是 "0"/ "null")
  3. EOA (from) 執行合約(to)中的函式。

一個 transaction object 大致上會長這樣:

{
  from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
  to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
  gasLimit: "21000",
  maxFeePerGas: "300",
  maxPriorityFeePerGas: "10",
  nonce: "0",
  value: "10000000000"
}

交易的生命週期

而一個交易從發起交易到交易完成的流程大致會長這樣:

  1. 交易透過 EOA 發起,而鏈上會透過加密得到一個 transaction hash。
  2. 接著交易會被「節點」廣播到區塊鏈網路中,並會像是集中處理丟到一攤交易池中
  3. 礦工會把你的交易拿起來,把它放到一個區塊中並同時驗證它。(這個過程需要一段時間),並在驗證後確認它交易成功。
  4. 這筆交易會收到 「comfirmation」,有點像是在公家機關蓋章一樣。這時便代表你的交易成功的被記在區塊鏈上了!

Metamask 又做了什麼事?

那問題又回來了,為什麼我們需要這些錢包幫助我們管理私鑰呢?

首先,在發起交易的過程(第一步),需要透過 private key 來做簽署(Signature),表示這一筆交易確實是由「這個地址而不是透過其他人發出的

此外在發起交易之後,EOA 需要連接到一個節點(第二步)才能與鏈上互動,像是下圖。

一般來說會需要透過維持一個全節點(像是 Geth,會同步鏈上的所有資料到用戶端以存放副本)與鏈上直接互動(發起交易)。

但是奇怪的是,Metamask 明明看起來似乎沒有連接到所謂的節點,我們也沒有進行任何與鏈上相關的同步,卻能做到「透過 Metamask 來發起交易」?

Infura

事實上,Metamask 背後其實連接著 Infura 這個節點供應商。簡單的來說,Infura 提供了節點的服務,當 Metamask 想要發送一筆交易時,會傳送一筆 JSON-RPC 給予 Infura,並透過 Infura 與區塊鏈連接與互動。

RPC

但是剛剛好像又提到了一個非常陌生的名詞:RPC。

RPC 的全名為 Remote Procedure Call

原本是用在一般的分散式系統上,由於 Client 端無法直接獲得 Server 端的資訊(像是 function、object 的 method 等),而需要透過在 Server 端將它的這些資訊顯示給 Client 端,

這時 Client 便可以使用 RPC 來達到呼叫 Server 端上的函式。詳細可以見下圖。

RPC on Blockchain

在區塊鏈網路中,Client 就像是我們開發的 DApp,而 Server 則是節點與節點。因此 Metamask 連結到 Infura 的 provider 後便可以透過傳送 RPC 給予 Infura 上的節點達到傳遞交易的功能。

Provider

這樣子可以傳送 RPC 給予節點的裝置,我們則稱之為 provider。這樣的 provider 可以輕量化在 private key 送交易給節點的這個過程,畢竟我們沒有辦法無時無刻都運行著一個全節點,同步區塊鏈上的所有資料。

Closing

今天介紹的東西大概在生活(我的)中已經是一件稀鬆平常的事情了,從利用 metamask 將合約部屬在鏈上,或是直接送出一筆 ETH 給其他地址。但是今天終於搞懂 metamask 實際上到底在做什麼了,算是解決了我長久以來的疑惑!

References


若有文章內有任何錯誤的地方歡迎指點與討論!非常感謝!

歡迎贊助窮困潦倒大學生
0xd8538ea74825080c0c80B9B175f57e91Ff885Cb4


上一篇
【DAY10】 - Construct the basis of website UI
下一篇
【DAY12】 - Connect MetaMask Wallet!
系列文
Road Map To DApp Developer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言