Web3js
MetaMask 在進行 RPC sendTransaction 呼叫時顯示錯誤的值
我一直在嘗試使用帶有 MetaMask 的 window.ethereum.request 注入方法的 RPC 呼叫發送交易。
我之前已經成功發送了一筆交易,方法是使用 web3js 方法web3.eth.sendTransaction和 MetaMask,顯示預期的乙太幣數量。對於從 ether 到 wei 的轉換,我使用的是web3.utils.toWei(“3”, “ether)。
但是,當我嘗試使用 RPC 呼叫發送交易時,MetaMask 彈出視窗顯示要發送的乙太幣數量不正確。下面使用的帳戶由 Ganache 提供。發件人地址屬於我使用 MetaMask 成功連接到我的應用程序的帳戶。
我在 Ubuntu 上使用 Ganache 作為本地網路和 Firefox。這是用於進行呼叫的程式碼:
const myParameters = { from: "0x5c0bC92f7d26F7AD821408e2B1774FC96858C691", to: "0x6cC5550509CC3a66Df97Efa42B866A058e12ADE2", value: web3.utils.toWei("3", "ether") }; let results = await window.ethereum.request({method:"eth_sendTransaction", params: [myParameters]});
Value
應該是十六進制格式。注意:在一些更新的 MetaMask 安裝中,似乎注入的包
web3
已經沒有utils
了,所以你可能需要使用它web3.toWei
來代替。const myParameters = { from: "0x5c0bC92f7d26F7AD821408e2B1774FC96858C691", to: "0x6cC5550509CC3a66Df97Efa42B866A058e12ADE2", value: parseInt(web3.utils.toWei("3","ether")).toString(16) }; let results = await window.ethereum.request({method:"eth_sendTransaction", params: [myParameters]});
接受的答案實際上不是處理它的最佳方法。您不需要來回從整數轉換到字元串來獲取值。Web3 擁有獲得適量所需的一切:
const wei = web3.utils.toWei('3', 'ether') await window.ethereum .request({ method: 'eth_sendTransaction', params: [ { from: '0x5c0bC92f7d26F7AD821408e2B1774FC96858C691', to: '0x6cC5550509CC3a66Df97Efa42B866A058e12ADE2', value: web3.utils.toHex(wei), }, ], })