近年來,區塊鏈技術受到廣泛關注,並徹底改變了各個產業。從本質上講,區塊鏈是一個去中心化、不可變且透明的分類賬,記錄多台電腦上的交易。 JavaScript 是開發區塊鏈應用程式時流行的程式語言之一。在本文中,我們將深入探討 JavaScript 與區塊鏈技術的交叉點,探索如何使用 JavaScript 與區塊鏈互動並在區塊鏈上開發應用程式。
JavaScript 以其多功能性和廣泛採用而聞名,已成為建立 Web 應用程式的首選語言。它能夠在伺服器端和客戶端上運行,這使其成為創建動態和互動式使用者介面的理想選擇。此外,JavaScript 對非同步程式設計的支援及其廣泛的庫生態系統使其非常適合區塊鏈開發。
以太坊等區塊鏈技術提供了創建去中心化應用程式 (dApp) 的平台。這些 dApp 通常需要智慧合約,這些合約是具有預定義規則和條件的自動執行合約。 JavaScript 可用於與智慧合約交互,使開發人員能夠輕鬆建立複雜且去中心化的應用程式。
讓我們仔細看看 JavaScript 如何與以太坊區塊鏈上的智慧合約互動。在本示範中,我們將使用 web3.js 函式庫,這是一個用於與以太坊互動的流行 JavaScript 函式庫。
首先,您需要在電腦上安裝 Node.js 和 npm(節點套件管理器)。設定完成後,請依照下列步驟操作−
#開啟終端機並導航到專案目錄。執行以下指令安裝 web3.js −
npm install web3
在 JavaScript 檔案中,匯入 web3 程式庫並建立 Web3 類別的實例。您還需要指定提供者 URL,它決定您要連接的以太坊網路。在此範例中,我們將使用 Infura 服務連接到以太坊主網 -
const Web3 = require('web3'); const providerURL = 'https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY'; const web3 = new Web3(providerURL);
注意- 將 YOUR_INFURA_API_KEY 替換為您的實際 Infura API 金鑰。如果您沒有,請在 Infura 網站上免費註冊。
要與智慧合約交互,您需要合約位址及其 ABI(應用程式二進位介面)。 ABI定義了智能合約的結構和功能。在此範例中,我們將使用一個簡單的智能合約來儲存和檢索值−
const contractAddress = '0xContractAddress'; const contractABI = [ { "constant": true, "inputs": [], "name": "getValue", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_newValue", "type": "uint256" } ], "name": "setValue", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ];
將 0xContractAddress 替換為您部署的智慧合約的實際地址。您可以透過智慧合約原始碼或Etherscan等工具取得合約ABI。
現在,使用合約位址和 ABI 建立合約實例 −
const contract = new web3.eth.Contract(contractABI, contractAddress);
您可以使用合約實例呼叫智慧合約上的函數。讓我們檢索合約中儲存的目前值−
contract.methods.getValue().call((error, result) => { if (error) { console.error(error); } else { console.log('Contract value:', result); } });
getValue()函數是一個視圖函數,這意味著它不會修改區塊鏈狀態,並且可以在不產生任何gas費用的情況下呼叫。它檢索儲存在合約中的當前值並將其返回到結果變數中。
要修改合約的值,您可以呼叫寫入函數。讓我們更新合約中的值−
const newValue = 42; contract.methods.setValue(newValue).send({ from: '0xYourAddress' }) .on('receipt', (receipt) => { console.log('Transaction receipt:', receipt); }) .on('error', (error) => { console.error('Transaction error:', error); });
將 0xYourAddress 替換為您的以太坊地址。 setValue() 函數是一個非付費函數,這意味著它不需要隨交易一起發送任何以太幣。我們使用 send() 函數發送交易,可選的事件處理程序(on('receipt') 和 on('error'))允許我們接收交易收據或處理交易期間發生的任何錯誤。 < /p>
當您執行 JavaScript 程式碼時,您將在控制台中看到輸出。例如,如果我們呼叫 getValue() 函數,輸出將為 -
Contract value: 10
如果我們使用 setValue() 函數更新值,輸出將為 − p>
Transaction receipt: { blockHash: '0x123456...', blockNumber: 1234, ... }
JavaScript 的多功能性和區塊鏈技術的強大功能已經融合在一起,使開發人員能夠使用熟悉的工具建立去中心化應用程式。在本文中,我們探討如何使用 JavaScript 與以太坊區塊鏈上的智慧合約互動。透過利用 web3.js 等函式庫,開發人員可以連接到區塊鏈,與智慧合約交互,並建立基於區塊鏈的應用程式。
以上是探索 JavaScript 和區塊鏈技術的交叉點的詳細內容。更多資訊請關注PHP中文網其他相關文章!