Solidity
Ganache/Web3:“在數據庫中找不到密鑰”
我正在使用
Ganache CLI v6.1.0 (ganache-core: 2.1.0))
(通過簡單地執行以預設設置開始ganache-cli
)web3 (^1.0.0-beta.33)
,並且我的智能合約是為solidity ^0.4.0
.我有一些功能可以在我可以使用的地方工作,例如,點擊我的 Web UI 上的一個按鈕,讓它向我部署的智能合約發送交易並更新鏈上的數據。這沒有任何問題。
奇怪的是,一個簡單
call
的constant
函式(它只是返回一個數組的長度)是我遇到問題的地方。出於某種原因,每次我這樣做時都會收到一個錯誤: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 等功能塊變數中使用時,我遇到了這個問題。我想,當我刪除它們時,有些困難在混音中不可用,程式碼有效。