Solidity

如何將 msg.data (calldata) 數據類型與整數數據類型 uint256 進行比較?

  • May 9, 2016

根據我的問題

我需要將 msg.data(特別是與 sendTransaction 數據對像一起發送的數字)與我的契約中的 uint256 數據類型進行比較。

這怎麼可能?

逐字節比較。需要轉換。reddit 連結已失效。為什麼需要msg.data直接訪問?

編輯:將 uint256 從 calldata 字節轉換為 Solidity 中的正確 uint256:https ://gist.github.com/anonymous/a734a5d299ffa7b5a834

編輯:這個網站上的打字系統和發布規則非常奇怪。無論如何,有效。它應該始終返回 true。

的規範msg.data乙太坊合約 ABI

這是 Andreas 提供的答案中的程式碼:

contract ReadConvertUint256Bytes {

   function equal(uint a) constant returns (bool) {
       uint x = 0;
       for (uint i = 0; i < 32; i++) {
           uint b = uint(msg.data[35 - i]);
           x += b * 256**i;
       }
       return a == x;
   }

}

它從索引為 35 的字節開始讀取,因為前 4 個字節(在索引 0 到 3 處)是方法 ID(參見上面的 ABI),並且乙太坊內部的所有內容都是大端的。

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