Как keccak256 несколько типов в web3js для соответствия Solidity keccak256?

, если I keccak256(string1, address1) в Solidity , а затем используйте web3.sha3(string1, address1) в web3.js, Я получаю разные результаты, хотя, когда я делаю оба только с string1 как один аргумент, они являются теми же результатами. Я пробовал пропустить {encoding: 'hex'} к вызову web3, но он по-прежнему дает разные результаты.

Кто-нибудь знает, как сделать web3.sha3(...args), с любыми аргументами (uint, address, string и т. д.), в точности равными keccak256 в Solidity?

6 голосов | спросил annikam 6 12017vEurope/Moscow11bEurope/MoscowMon, 06 Nov 2017 21:55:23 +0300 2017, 21:55:23

1 ответ


0

Мне удалось найти функцию в этом выпуске для работы на всех случаев (помимо отрицательных чисел, как вы увидите в комментариях к проблеме):

function keccak256(...args) {
  args = args.map(arg => {
    if (typeof arg === 'string') {
      if (arg.substring(0, 2) === '0x') {
          return arg.slice(2)
      } else {
          return web3.toHex(arg).slice(2)
      }
    }

    if (typeof arg === 'number') {
      return leftPad((arg).toString(16), 64, 0)
    } else {
      return ''
    }
  })

  args = args.join('')

  return web3.sha3(args, { encoding: 'hex' })
}
ответил annikam 7 22017vEurope/Moscow11bEurope/MoscowTue, 07 Nov 2017 13:13:02 +0300 2017, 13:13:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132