Skip to content

Commit

Permalink
Reuse sha3HexAddress
Browse files Browse the repository at this point in the history
  • Loading branch information
makoto committed Mar 4, 2024
1 parent 622b64c commit 3e8036c
Showing 1 changed file with 7 additions and 29 deletions.
36 changes: 7 additions & 29 deletions contracts/reverseRegistrar/ReverseRegistrar.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "../root/Controllable.sol";
import "../utils/LowLevelCallUtils.sol";

abstract contract NameResolver {
function setName(bytes32 node, string memory name) public virtual;
Expand Down Expand Up @@ -86,7 +87,7 @@ contract ReverseRegistrar is Ownable, Controllable, IReverseRegistrar {
address owner,
address resolver
) public override authorised(addr) returns (bytes32) {
bytes32 labelHash = sha3HexAddress(addr);
bytes32 labelHash = LowLevelCallUtils.sha3HexAddress(addr);
bytes32 reverseNode = keccak256(
abi.encodePacked(ADDR_REVERSE_NODE, labelHash)
);
Expand All @@ -111,7 +112,7 @@ contract ReverseRegistrar is Ownable, Controllable, IReverseRegistrar {
uint256 signatureExpiry,
bytes memory signature
) public override returns (bytes32) {
bytes32 labelHash = sha3HexAddress(addr);
bytes32 labelHash = LowLevelCallUtils.sha3HexAddress(addr);
bytes32 reverseNode = keccak256(
abi.encodePacked(ADDR_REVERSE_NODE, labelHash)
);
Expand Down Expand Up @@ -234,36 +235,13 @@ contract ReverseRegistrar is Ownable, Controllable, IReverseRegistrar {
function node(address addr) public pure override returns (bytes32) {
return
keccak256(
abi.encodePacked(ADDR_REVERSE_NODE, sha3HexAddress(addr))
abi.encodePacked(
ADDR_REVERSE_NODE,
LowLevelCallUtils.sha3HexAddress(addr)
)
);
}

/**
* @dev An optimised function to compute the sha3 of the lower-case
* hexadecimal representation of an Ethereum address.
* @param addr The address to hash
* @return ret The SHA3 hash of the lower-case hexadecimal encoding of the
* input address.
*/
function sha3HexAddress(address addr) private pure returns (bytes32 ret) {
assembly {
for {
let i := 40
} gt(i, 0) {

} {
i := sub(i, 1)
mstore8(i, byte(and(addr, 0xf), lookup))
addr := div(addr, 0x10)
i := sub(i, 1)
mstore8(i, byte(and(addr, 0xf), lookup))
addr := div(addr, 0x10)
}

ret := keccak256(0, 40)
}
}

function ownsContract(address addr) internal view returns (bool) {
try Ownable(addr).owner() returns (address owner) {
return owner == msg.sender;
Expand Down

0 comments on commit 3e8036c

Please sign in to comment.