Solidity

如何在智能合約中將數字保存為 bytes16 並在 javascript 中檢索數字?

  • August 2, 2018

我有以下智能合約來澄清這個問題。

pragma solidity ^0.4.17;

contract Test {
   bytes16 number;

   function getNumber() public view returns(bytes16) {
       return number;
   }

   function setNumber(bytes16 _number) public {
       number = _number;
   }
}

因此,我使用 javascript 將數字轉換為十六進製字元串,例如let hex = ‘0x’ + (3456).toString(16)where hexis 0xd80。然後我將值作為參數傳遞給setNumber. 挑戰是當我呼叫getNumber我收到的回報是0x0d800000000000000000000000000000。像 28 個零被附加到末尾。解析這個給出了錯誤的值。我是這樣解析的let num = parseInt(‘0x0d800000000000000000000000000000’, 16)。我明白了1.7944577943096364e+37。如何從這個 ‘0x0d800000000000000000000000000000’ 中獲得正確的值,或者如何在沒有額外零位的情況下將數字保存為字節 16。

你需要留下墊子。當您通過0xd80時,它會作為編碼過程的一部分被正確填充(佔用 16 個字節)。

let argument = "0x" + web3.padLeft("d80", 32);

這應該給你0x00000000000000000000000000000D80

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