Web3js

MetaMask - RPC 錯誤:內部 JSON-RPC 錯誤

  • December 8, 2020

當我嘗試在本地使用元遮罩進行從一個帳戶(例如 A)到另一個帳戶(例如 B)的簡單交易時,出現此錯誤。

程式碼:-32603

數據:{originalError:{…}}

消息:“內部 JSON-RPC 錯誤。”

堆棧:“錯誤:WalletMiddleware - 無效的“發件人”地址。↵ at h (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1:1226252)↵ at async chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/background.js:1: 1224243"

原型:對象

錯誤截圖

我自己嘗試的解決方案(不起作用):

  1. Downgrading my web3.js to beta 33,35 and 37 release. Currently, I am using 1.2.0 version.

2.Changing my metamask to mainnet and then back to local test net, which I am running on port:9545

下面是我的智能合約:


contract ApprovalContract {
   address payable public sender;
   address payable public receiver;
   address public constant approver = <some account address>;

   function deposit (address payable _receiver) external payable {
       require(msg.value > 0);
       sender = msg.sender;
       receiver = _receiver;
   }

}

下面是我的自定義 js(使用 web3.js)

var web3 = new Web3(Web3.givenProvider || "ws://localhost:9545");

var contractAddress = <contractAddress>;

var ApprovalContract = new web3.eth.Contract(ABI, contractAddress); 

$('#contract-form').submit(function() {
 event.preventDefault();
 var fromAddress = $('#fromAddress').val();
 var toAddress = $('#toAddress').val();
 var amount = $('#amount').val();

 ApprovalContract.methods.deposit(toAddress).send({"from": fromAddress, "value": web3.utils.toWei(amount,'ether')},
   function(error, result) {
     if (error) {
       console.log('error: ' + error);
         $('#deposit-result').html('Error: ' + error);
     } else {
       $('#deposit-result').html('Success TX: <b>' + result + '</b>');
     }
   });
});

流程進入最後一個函式並顯示如下錯誤:

error: Error: Internal JSON-RPC error.
{
 "originalError": {}
}

期望:既然我的賬戶A,就是賬戶

$$ 0 $$在登錄的 Metamask 中,我希望 Metamask 彈出顯示以確認交易,但我得到了這個“內部 JSON RPC 錯誤”。 有任何想法嗎 ???

提前致謝!!!

**ethereum.enable()**對我有用。

我的解決方案:

  1. 補充: window.addEventListener('load', async () => { try { await ethereum.enable(); } catch (error) {} });

  2. 更新了gas值: ApprovalContract.methods.deposit(toAddress).send({"from": fromAddress, gas: 1000000, "value": web3.utils.toWei(amount,'ether')}

  3. 將Metamask網路改為mainnet,然後回到Local test net,然後重置賬號。

詳情請查看:連結

嘗試通過刪除舊的 JSON 文件並重新編譯 .sol 文件來重新生成 JSON 文件。它對我有用。

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