iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
Web 3

Smart Contract Development Breakdown系列 第 21

Day 21 - Internet Protocol & JSON-RPC

  • 分享至 

  • xImage
  •  

Internet Protocol & JSON-RPC

Synchronization Link Tree


Intro

因為之後會講到 Geth 和 Blockchain Provider 等內容,所以今天我選擇先分享節點基本互動與網路協議的內容

RPC & RESTful API

  • The RPC API 通常用動詞來表示一個動作,使用上 client 必須知道進程名稱、參數與參數順序。
  • The REST API :針對資源做四大操作,透過 POST/GET/PUT/DELETE 來操作資源,使用上 client 不用特別依賴進程名稱與參數,只需要 URI 和已經實作的 Library 和固定格式就可以了。
Operation RPC (operation) REST (resource)
Signup POST /signup POST /persons
Resign POST /resign DELETE /persons/1234
Read person GET /readPerson?personid=1234 GET /persons/1234
Read person's items list GET /readUsersItemsList?userid=1234 GET /persons/1234/items
Add item to person's list POST /addItemToUsersItemsList POST /persons/1234/items
Update item POST /modifyItem PUT /items/456
Delete item POST /removeItem?itemId=456 DELETE /items/456
  • 區塊鏈比較常是使用 RPC,區塊鏈節點是一個很低階的部位,提供的 API -> JSON-RPC ,如果底層的函數包太多東西上層的應用開發反而會很困難。
  • 我們可以使用 Postman 來測試 API
  • Infura 使用 RESTful API

JavaScript JSON RPC

  • 所有以太坊區塊鏈節點皆提供 JSON RPC
  • 此 JSON RPC 接受的語言為Javascript,也就是說我們可以在 cammand line 的視窗中打上 JS 程式碼來和區塊鏈做互動
  • 這邊的互動就像是 Database <-> MYSQL <-> MYSQL Client(Select...From..., Insert to..., Delete From...)
  • 有許多不同的方法可以和 Javascript JSON RPC連動:RPC, IPC, Websocket
  • 我們可使用 JavaScript JSON RPC 與(在)以下開發工具互動:
    • TRUFFLE, Truffle Developer Console
    • TestRPC
    • MIST
    • Remix
    • WEB3.js

Blockchain Nodes Connections

區塊鏈使用者的互動進程如下:

  1. 首先我們會有客戶端:Javascript(瀏覽器, Web3.js, ethers.js), Java, PHP, Python
  2. 使用 API 與區塊鏈節點聯絡:RPC, IPC, WS
  3. 互動方法與節點廣播:Ethereum Protocal

RPC, IPC, Websocket

  • RPC可以在「不同電腦中」使用,常常連接到 localhost:8545127.0.0.1:8545192.168.1.123:8545。若我們使用像是 192.168.1.123 的非本地端IP地址,同一網路中的其他電腦便可以存取我們的RPC endpoint(危險)
    • RPC 可以透過 Ganache-UI 連接到 locolhost:7545
    • 當我們連接到 HTTP(例如透過瀏覽器中的 web3.js)並與節點溝通時,需要在瀏覽器中提供指令,這樣web3.js就會在背景以非同步請求(e.g. AJAX)的方式,利用 HTTP-RPC 連接到像是 Geth 之類的區塊鏈節點。
  • IPC(Inter-process Communications)是一種可使用 pipe commands 或檔案直接與執行程序溝通的協定
    • IPC 大體上只運作在本地端的電腦中,在串接 Geth 以後,IPC 會參與其中並在本地端創建一個 IPC pipe
    • 同時其他在「同一台電腦」的進程也可以使用 IPC file 來與 Geth 建立雙向資料傳輸
    • IPC 串接 Geth
      • geth console
      • 或在Geth已經在背景運行時,使用 geth attach
  • WebSocket 是一種保持連接狀態的網路傳輸協定
    • WebSocket 又稱作雙向全雙工協議(bidirectional full duplex protocol),允許伺服器端主動向客戶端推播資料,也就是在第一次與客戶端進行交握後,即可進行(保持)雙向資料傳輸
    • 與傳統的 RPC(HTTP)比較,我們常常需要不斷(每隔一段時間)向伺服器提出請求,伺服器才會返回資料給我們(客戶端),如此無論是頻寬資源、即時性 WebSocket 都有更好的表現

HTTP RESTful interface

  • geth --rpc 或 Ganache 或 besu --rpc
    • 通常會開啟 RPC Port 於 8545
  • 我們目前使用的 API 與區塊鏈的互動就像 SQL Serves 與 Interface 的關係
  • 有跨來源資源共用(CORS, Cross-Origin Resource Sharing)的限制問題
  • 當區塊鏈節點在背景運作時,訪問區塊鏈就像是一個普通回傳 JSON 的 REST interface

Closing

如果看不懂今天的文章的話可以考慮接著關注明後兩天的文章!會對 Dapp 的運作模式有很大程度的了解!

Reference


最後歡迎大家拍打餵食大學生0x2b83c71A59b926137D3E1f37EF20394d0495d72d


上一篇
Day 20 - Proof-Of-Work (內有空投活動)
下一篇
Day 22 - Geth & Nodes
系列文
Smart Contract Development Breakdown30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言