Keccak

在 python 中執行 Solidity 的 keccak256

  • February 29, 2020

我想執行keccak256(abi.encodePacked(challenge_number, msg.sender, nonce))Solidity,nonce 是 uint256,challenge_digest 是 bytes32,challenge_number bytes32,testTarget 是 uint。

這在 python 中的類比是什麼?我已經通過 Python 與我的元遮罩帳戶連接到契約。

Web3.solidityKeccak(abi_types, value)應該做的工作

例子:

Web3.solidityKeccak(['bool'], [True])
# HexBytes("0x5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2")

Web3.solidityKeccak(['uint8', 'uint8', 'uint8'], [97, 98, 99])
# HexBytes("0x4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45")

Web3.solidityKeccak(['uint8[]'], [[97, 98, 99]])
# HexBytes("0x233002c671295529bcc50b76a2ef2b0de2dac2d93945fca745255de1a9e4017e")

Web3.solidityKeccak(['address'], ["0x49EdDD3769c0712032808D86597B84ac5c2F5614"])
# HexBytes("0x2ff37b5607484cd4eecf6d13292e22bd6e5401eaffcc07e279583bc742c68882")

Web3.solidityKeccak(['address'], ["ethereumfoundation.eth"])
# HexBytes("0x913c99ea930c78868f1535d34cd705ab85929b2eaaf70fcd09677ecd6e5d75e9")

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