Web3.js 是一個用于連接以太坊網絡的 JavaScript 庫。在本文中,我們將介紹如何使用 Web3.js 來連接以太坊節(jié)點,并且查詢以太坊區(qū)塊鏈上的數據。
1. 安裝 Web3.js
首先,我們需要安裝 Web3.js。在命令行中,輸入以下命令:
npm install web3
2. 連接以太坊節(jié)點
在使用 Web3.js 之前,我們需要先連接到以太坊節(jié)點。例如,我們可以使用以下代碼來連接到 Infura 提供的以太坊節(jié)點:?
const Web3 = require('web3'); const web3 = new Web3('https://mainnet.infura.io/v3/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
其中,'https://mainnet.infura.io/v3/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 是 Infura 提供的以太坊節(jié)點地址和 API 密鑰。
3. 查詢以太坊區(qū)塊鏈上的數據
連接到以太坊節(jié)點后,我們就可以使用 Web3.js 來查詢以太坊區(qū)塊鏈上的數據。例如,我們可以使用以下代碼來查詢指定地址的以太幣余額:
const balance = await web3.eth.getBalance('0x123456...'); console.log('Balance:', web3.utils.fromWei(balance, 'ether'));
其中,'0x123456...' 是指定地址的以太坊錢包地址。
除了查詢余額外,我們還可以使用 Web3.js 來查詢其他的區(qū)塊鏈數據,例如交易信息和區(qū)塊信息。以下是一些常用的查詢方法:
// 查詢指定交易的信息
const tx = await web3.eth.getTransaction('0x123456...');
console.log('Transaction:', tx);
// 查詢指定區(qū)塊的信息
const block = await web3.eth.getBlock(12345);
console.log('Block:', block);
// 查詢最新的區(qū)塊號
const latestBlockNumber = await web3.eth.getBlockNumber();
console.log('Latest block number:', latestBlockNumber);
以上代碼分別演示了如何查詢指定地址的以太幣余額、指定交易的信息、指定區(qū)塊的信息和最新的區(qū)塊號。
4. 發(fā)送交易
除了查詢區(qū)塊鏈數據外,Web3.js 還可以用于發(fā)送交易。例如,我們可以使用以下代碼向指定地址轉賬:
const accounts = await web3.eth.getAccounts(); const txHash = await web3.eth.sendTransaction({ ? from: accounts[0], ? to: '0x123456...', ? value: web3.utils.toWei('1', 'ether'), }); console.log('Transaction hash:', txHash);
其中,accounts[0] 是發(fā)送賬戶的地址,'0x123456...' 是接收賬戶的地址,'1' 是轉賬金額(單位為以太),并且使用了 web3.utils.toWei() 方法將以太轉換為 wei 單位。
?5. 部署智能合約
除了發(fā)送交易外,Web3.js 還可以用于部署智能合約。例如,我們可以使用以下代碼部署一個簡單的智能合約:
const contractABI = [ ? { ? ? "inputs": [], ? ? "name": "getTimestamp", ? ? "outputs": [ ? ? ? { ? ? ? ? "internalType": "uint256", ? ? ? ? "name": "", ? ? ? ? "type": "uint256" ? ? ? } ? ? ], ? ? "stateMutability": "view", ? ? "type": "function" ? }, ? { ? ? "inputs": [], ? ? "stateMutability": "payable", ? ? "type": "constructor" ? } ]; const contractBytecode = '0x608060405234801561001057600080fd5b506101c2806100206000396000f3fe60806040526004361061003f5760003560e01c806360fe47b1146100445780636d4ce63c1461007a575b600080fd5b34801561005057600080fd5b506100596100f1565b6040518082815260200191505060405180910390f35b34801561007b57600080fd5b506100846100f1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561015957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b005b60006020819052908152604090205481565b6000809054906101000a900460ff168156fea26469706673582212204e4a4c4f6d93a5d8d5f5c8381c2cc34e3cf1c0d2e7b0c491b3f9b78d9dc0f0e64736f6c63430007060033'; const MyContract = new web3.eth.Contract(contractABI); const accounts = await web3.eth.getAccounts(); const myContractInstance = await MyContract.deploy({ ? data: contractBytecode, }).send({ ? from: accounts[0], ? gas: '5000000', }); console.log('Contract address:', myContractInstance.options.address);
其中,contractABI 是智能合約的 ABI(Application Binary Interface),contractBytecode 是智能合約的字節(jié)碼。使用 Web3.js 的 Contract 類可以創(chuàng)建一個智能合約實例,然后使用 deploy() 方法來部署智能合約。
?6.調用智能合約方法
除了部署智能合約外,Web3.js 還可以用于調用智能合約方法。例如,我們可以使用以下代碼來調用一個簡單的智能合約中的方法:
const contractAddress = '0x123456...'; const contractABI = [ ? { ? ? "inputs": [], ? ? "name": "getTimestamp", ? ? "outputs": [ ? ? ? { ? ? ? ? "internalType": "uint256", ? ? ? ? "name": "", ? ? ? ? "type": "uint256" ? ? ? } ? ? ], ? ? "stateMutability": "view", ? ? "type": "function" ? }, ? { ? ? "inputs": [], ? ? "stateMutability": "payable", ? ? "type": "constructor" ? } ]; const MyContract = new web3.eth.Contract(contractABI, contractAddress); const timestamp = await MyContract.methods.getTimestamp().call(); console.log('Timestamp:', timestamp);
其中,contractAddress 是智能合約的地址,contractABI 是智能合約的 ABI(Application Binary Interface),MyContract 是智能合約實例,getTimestamp() 是智能合約中的一個方法,使用 call() 方法可以調用該方法并獲取返回值。
7. 監(jiān)聽事件
Web3.js 還提供了監(jiān)聽事件的功能。例如,我們可以使用以下代碼來監(jiān)聽智能合約中的 Transfer 事件:
const contractAddress = '0x123456...'; const contractABI = [ ? { ? ? "anonymous": false, ? ? "inputs": [ ? ? ? { ? ? ? ? "indexed": true, ? ? ? ? "internalType": "address", ? ? ? ? "name": "from", ? ? ? ? "type": "address" ? ? ? }, ? ? ? { ? ? ? ? "indexed": true, ? ? ? ? "internalType": "address", ? ? ? ? "name": "to", ? ? ? ? "type": "address" ? ? ? }, ? ? ? { ? ? ? ? "indexed": false, ? ? ? ? "internalType": "uint256", ? ? ? ? "name": "value", ? ? ? ? "type": "uint256" ? ? ? } ? ? ], ? ? "name": "Transfer", ? ? "type": "event" ? } ]; const MyContract = new web3.eth.Contract(contractABI, contractAddress); MyContract.events.Transfer({ fromBlock: 'latest' }, (error, event) => { ? if (!error) { ? ? console.log('Transfer:', event.returnValues); ? } });
其中,contractAddress 是智能合約的地址,contractABI 是智能合約的 ABI(Application Binary Interface),MyContract 是智能合約實例,Transfer 是智能合約中的一個事件,使用 events 屬性可以監(jiān)聽該事件。
8. 使用 MetaMask
除了連接 Infura 提供的以太坊節(jié)點或本地的 Geth 節(jié)點外,Web3.js 還可以與 MetaMask 集成,從而在瀏覽器中輕松地進行以太坊交互。例如,我們可以使用以下代碼來連接到 MetaMask 提供的以太坊節(jié)點:
if (window.ethereum) { ? const web3 = new Web3(window.ethereum); ? try { ? ? await window.ethereum.enable(); ? } catch (error) { ? ? console.error('User denied account access'); ? } } else if (window.web3) { ? const web3 = new Web3(window.web3.currentProvider); } else { ? console.error('No web3 provider detected'); }
其中,window.ethereum 是 MetaMask 提供的以太坊節(jié)點,window.web3.currentProvider 是舊版 MetaMask 提供的以太坊節(jié)點。使用 Web3.js 的構造函數可以連接到這些節(jié)點,并在用戶授權后進行交互。
總結
Web3.js 是一個用于連接以太坊網絡的 JavaScript 庫,它可以幫助我們查詢以太坊區(qū)塊鏈上的數據、發(fā)送交易和部署智能合約等。在本文中,我們介紹了如何使用 Web3.js 來連接 Infura 提供的以太坊節(jié)點或本地的 Geth 節(jié)點,并且演示了如何查詢以太坊區(qū)塊鏈上的數據、發(fā)送交易和部署智能合約。
除了以上提到的功能外,Web3.js 還提供了許多其他的功能,例如監(jiān)聽事件、調用智能合約方法、使用 MetaMask 等。其中,監(jiān)聽事件可以幫助我們實時獲取區(qū)塊鏈上的數據變化;調用智能合約方法可以幫助我們與智能合約進行交互,例如調用 ERC20 代幣合約的 transfer() 方法轉賬;使用 MetaMask 可以幫助我們在瀏覽器中輕松地進行以太坊交互。文章來源:http://www.zghlxwxcb.cn/news/detail-426002.html
總之,Web3.js 是一個非常強大的 JavaScript 庫,它為開發(fā)者提供了方便快捷的方式來與以太坊網絡進行交互。除了以上提到的功能外,Web3.js 還提供了許多其他的功能,例如調用智能合約方法、監(jiān)聽事件、使用 MetaMask 等。如果你正在開發(fā)以太坊 DApp 或者想要學習以太坊開發(fā),那么 Web3.js 絕對是你不可或缺的工具之一。文章來源地址http://www.zghlxwxcb.cn/news/detail-426002.html
到了這里,關于使用 Web3.js 連接以太坊節(jié)點并查詢區(qū)塊鏈數據的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!