Solidity
錯誤:無法從 ABI 解碼 bytes32:0x 大小不匹配
我是
querying
這樣的mapping
:web3
call
var Web3 = require('web3'); const web3 = new Web3(new Web3.providers.HttpProvider('https://kovan.infura.io/key...')); var contractABI = new web3.eth.Contract([...abi...], contractAddress); var orderValue = '15'; contractABI.methods.orders(web3.utils.toHex(orderValue)).call(function(err, result) { if (!err) { callback(result); } else { callback(err); } });
如果
orderValue
大於 15,那麼我收到以下錯誤:錯誤:無法從 ABI 解碼 bytes32:0x 大小不匹配。
如果
orderValue
是 <= 15(例如 10),那麼我會收到以下錯誤:throw new Error(‘給定的參數字節長度無效:"’+ value + ‘"’);
錯誤:給定參數字節的長度無效:“0xa”
智能合約中的映射如下所示:
struct Order { bytes32 orderId; uint32 orderAmount; } mapping(bytes32 => Order) public orders;
如果如果查詢我會得到一些值
orders
。Parity
我究竟做錯了什麼?
這裡的答案是,合約已部署,但為空!
黃皮書第 7.1 節指出*“在執行初始化程式碼時,新創建的地址存在,但沒有內在的主體程式碼。對於正常的 STOP 程式碼,或者如果返回的程式碼為空,則狀態為殭屍賬戶,任何餘額將永遠鎖定在賬戶中”*(感謝使用者 Thomas Clowes)
讓我感到困惑的是它
Parity
可以對其進行查詢,即使它返回0x000
值(web3
除了錯誤沒有返回任何東西)。所以我認為契約不是空的!