在網頁上使用 web3 並操作區塊鏈
前言
Web3 與 Web2 的不同之處在於 "去中心化",由分散且不同人運營的 Server 來進行交易的驗證與維護帳本。而在乙太坊上因為借力於智能合約,可以讓我們執行更多樣化的邏輯與交易,而為了讓用戶可以輕易地與這些智能合約互動,我們需要一個前端頁面,這時就是 Web3.js 發揮功能的時候。
很多人會問: Web3 是什麼?不也是跟之前一樣用網頁來瀏覽網站嗎,筆者本人當時接觸到 Web3 這個詞是從一個 js 框架叫做 Web3.js 開始,Web3 可以說是一個概念也可以說是一個架構,雖然去中心化以及區塊鏈這些概念在多年前已經有類似的實現,但使用不同的名詞,Web3 改變的底層協議或許不大,但也許是人們對於另一個階段的集體共識的體現,以自己所理解的來認知即可。
我們這邊使用 React.js 前端框架來建構 UI 並使用 web3.js (也可選擇使用 ether.js) 來與剛才建立的 RPC server 溝通,達到一個網頁控制區塊鏈的 DApp。
用戶在與 Dapp 網頁互動的時候會於瀏覽器安裝 Metamask 擴充工具,其為一個區塊鏈錢包,用來存放代幣,並且於執行網頁互動時支付交易手續費。
2024 更新
web3 v4.6.0
初始化方式改為
const { Web3 } = require("web3");
const web3 = new Web3();2021 更新: Metamask connect to web3
web3 v1.3.4
const Web3 = require("web3");
const ethEnabled = () => {
if (window.ethereum) {
window.web3 = new Web3(window.ethereum);
window.ethereum.enable();
return true;
}
return false;
}
ethEnabled();其他連線 web3 方式
Wallet Connect: https://github.com/WalletConnect/web-examples
Ether.js: https://docs.ethers.io/v4/api-providers.html
Web3Modal: https://github.com/Web3Modal/web3modal
Dapp 範例
安裝 React
使用 create-react-app 建構前端環境,這邊我們選擇連線到自行架設的乙太坊測試節點 Geth。
這裡記得因為我們要用瀏覽器存取RPC server,所以geth啟動時RPC server要加上CORS--rpccorsdomain="*"
web3 之API文件
把src/App.js改為如下
web3版本如果大於1.0.0 要改為如下
主要是大部份web3 function 回傳值都改為要從callback第二個參數取出
即可看到列出我們的帳號
接著新增一個資料夾contract裡面放入contract01.js把我們剛才的contract的地址以及內容放入(記得要先去掉at)
上面的Address 可在geth console輸入以下查看
之後App.js改為如下
即可看到

記得把程式碼 改為剛才有餘額的地址
加入簡單轉帳功能

Last updated
Was this helpful?