Web3js
在客戶端執行時如何將餘額儲存在變數中?
語境
在 Ropsten 和 Kovan 測試網路上編寫了一些智能合約後,我正在學習 web3。
我試圖簡單地讀取地址的餘額並將其儲存在一個變數中,以便顯示它。下一步將是使用瀏覽器錢包(例如 Metamask)添加智能合約互動。
我想編寫一個在客戶端執行的腳本,其中一個動機是網站將是靜態的。
程式碼和錯誤
我使用以下行導入了 web3js 庫,請告訴我是否有更好的方法:
<script language="javascript" type="text/javascript" src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.3.4/dist/web3.min.js"></script>
然後,為了連接到提供商,我創建了一個 Infura 帳戶並獲得了一個與我的項目相關聯的 url。為了不完全顯示,我就這樣寫
var url = "https://kovan.infura.io/v3/my_project_id";
正如您在下面的程式碼中看到的那樣,我創建了一個
input
元素,使用者可以在其中寫下它想知道餘額的地址。按下按鈕時,應更改段落並顯示余額(以wei為單位)。<body> <input type="text" id="address" placeholder="Enter an address here"> <button onClick="displayBalance()">Get balance</button> <p id="showbal">This paragraph would show the balance</p> </body> <script> var url = "https://kovan.infura.io/v3/my_project_id"; var web3 = new Web3(url); function displayBalance() { var addr = document.getElementById("address").value; web3.eth.getBalance(addr).then(function(result) {balance = result}); document.getElementById("showbal").innerHTML = balance; } </script>
使用元素中
displayBalance()
的有效地址呼叫時出現的錯誤告訴我. 請注意,錯誤顯示在函式的最後一行。此外,值得注意的是,在瀏覽器控制台中一次執行每條指令時,我設法獲得了成功的結果。我猜它在執行下一行時承諾尚未完成。input``Uncaught ReferenceError``balance is not defined
請願書不會立即返回餘額值。出於這個原因,您需要將餘額作為承諾呼叫並等待結果,然後列印到 HTML。
您可以將其與回調函式結合併等待結果。例如:
function getETHBalanceOf(address){ web3js.eth.getBalance(address).then(function(balance){ myBalanceVar = balance; //Your HTML print }); }
或者您可以使用非同步函式呼叫它並等待結果。例如:
async function getTHEBalanceOf(address){ myBalanceVar = await web3js.eth.getBalance(address); //Your HTML print }