Solidity

錯誤:無法從 ABI 解碼 bytes32:0x 大小不匹配

  • August 12, 2018

我是querying這樣的mappingweb3 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 =&gt; Order) public orders;

如果如果查詢我會得到一些值ordersParity我究竟做錯了什麼?

這裡的答案是,合約已部署,但為空

黃皮書第 7.1 節指出*“在執行初始化程式碼時,新創建的地址存在,但沒有內在的主體程式碼。對於正常的 STOP 程式碼,或者如果返回的程式碼為空,則狀態為殭屍賬戶,任何餘額將永遠鎖定在賬戶中”*(感謝使用者 Thomas Clowes)

讓我感到困惑的是它Parity可以對其進行查詢,即使它返回0x000值(web3除了錯誤沒有返回任何東西)。所以我認為契約不是空的!

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