Web3js

MetaMask 在進行 RPC sendTransaction 呼叫時顯示錯誤的值

  • November 13, 2021

我一直在嘗試使用帶有 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]});

我也嘗試將值轉換為字元串,但我得到了相同的錯誤數量。這是我為上述程式碼得到的彈出視窗: MetaMask 彈出視窗

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),
           },
       ],
   })

引用自:https://ethereum.stackexchange.com/questions/85308