Solidity

Ganache/Web3:“在數據庫中找不到密鑰”

  • October 27, 2021

我正在使用Ganache CLI v6.1.0 (ganache-core: 2.1.0))(通過簡單地執行以預設設置開始ganache-cliweb3 (^1.0.0-beta.33),並且我的智能合約是為solidity ^0.4.0.

我有一些功能可以在我可以使用的地方工作,例如,點擊我的 Web UI 上的一個按鈕,讓它向我部署的智能合約發送交易並更新鏈上的數據。這沒有任何問題。

奇怪的是,一個簡單callconstant函式(它只是返回一個數組的長度)是我遇到問題的地方。出於某種原因,每次我這樣做時都會收到一個錯誤:Key not found in database. 此錯誤發生在call呼叫返回的承諾中。

這是我的程式碼:

固體功能:

function getItemsLength() public constant returns(uint256) {
   return items.length;
}

JS程式碼:

var account;
var numItems = 0;
web3.eth.getAccounts().then(function(result) {
account = result[0];
var contract = new web3.eth.Contract(
   simpleStorageABI,
   contractAddress,
   {
     from: account,
     gasPrice: '20000000000',
     gas: '100000'
   }
 )
contract.methods.getItemsLength().call(account) // Error occurs here      
.then(function(result) {
   numItems = result;
 })
});

幾天前,我使用 testrpc 而不是 Ganache 進行了這項工作,但後來轉移到 Ganache 以獲取 websocket 支持(用於事件偵聽器)。一路走來,它壞了,這似乎是 Ganache 中的一個錯誤。

有沒有其他人遇到過這個?我在搜尋中看到了一些看起來相似的問題,但它們大多似乎是斷斷續續的,並且與特定的測試有關。任何見解或指導將不勝感激,我已經堅持了太久。

呼叫是錯誤的。試著這樣寫:

contract.methods.getItemsLength().call({ from: account })
.then(函式(結果){
numItems = 結果;
})

當我在 block.number 或 block 等功能塊變數中使用時,我遇到了這個問題。我想,當我刪除它們時,有些困難在混音中不可用,程式碼有效。

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