Skip to content

Commit

Permalink
fmt
Browse files Browse the repository at this point in the history
  • Loading branch information
mejango committed Aug 19, 2024
1 parent 69b2e20 commit ff64a7f
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 198 deletions.
89 changes: 29 additions & 60 deletions src/JBProjectHandles.sol
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {

/// @notice The ENS registry contract address.
/// @dev Same on Ethereum mainnet and most of its testnets.
ENS public constant override ENS_REGISTRY =
ENS(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e);
ENS public constant override ENS_REGISTRY = ENS(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e);

//*********************************************************************//
// --------------------- private stored properties ------------------- //
Expand All @@ -44,8 +43,8 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {
/// @custom:param chainId The chain ID of the network the project is on.
/// @custom:param projectId The ID of the project to get the ENS parts of.
/// @custom:param setter The address that set the requested `ensParts`. This should be the project's current owner.
mapping(uint256 chainId => mapping(uint256 projectId => mapping(address setter => string[] ensParts)))
private _ensNamePartsOf;
mapping(uint256 chainId => mapping(uint256 projectId => mapping(address setter => string[] ensParts))) private
_ensNamePartsOf;

//*********************************************************************//
// ------------------------- external views -------------------------- //
Expand All @@ -60,7 +59,12 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {
uint256 chainId,
uint256 projectId,
address setter
) external view override returns (string[] memory) {
)
external
view
override
returns (string[] memory)
{
return _ensNamePartsOf[chainId][projectId][setter];
}

Expand All @@ -74,11 +78,14 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {
uint256 chainId,
uint256 projectId,
address setter
) external view override returns (string memory) {
)
external
view
override
returns (string memory)
{
// Get a reference to the project's ENS name parts.
string[] memory ensNameParts = _ensNamePartsOf[chainId][projectId][
setter
];
string[] memory ensNameParts = _ensNamePartsOf[chainId][projectId][setter];

// Return an empty string if not found.
if (ensNameParts.length == 0) return "";
Expand All @@ -93,23 +100,12 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {
if (textResolver == address(0)) return "";

// Find the `projectId` that the text record of the ENS name is mapped to.
string memory textRecord = ITextResolver(textResolver).text(
hashedName,
TEXT_KEY
);
string memory textRecord = ITextResolver(textResolver).text(hashedName, TEXT_KEY);

// Return empty string if text record from ENS name doesn't match `projectId` and `chainId`.
if (
keccak256(bytes(textRecord)) !=
keccak256(
bytes(
string.concat(
Strings.toString(chainId),
":",
Strings.toString(projectId)
)
)
)
keccak256(bytes(textRecord))
!= keccak256(bytes(string.concat(Strings.toString(chainId), ":", Strings.toString(projectId))))
) return "";

// Format the handle from the name parts.
Expand All @@ -121,32 +117,22 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {
//*********************************************************************//

/// @dev ERC-2771 specifies the context as being a single address (20 bytes).
function _contextSuffixLength()
internal
view
virtual
override
returns (uint256)
{
function _contextSuffixLength() internal view virtual override returns (uint256) {
return super._contextSuffixLength();
}

/// @notice Formats ENS name parts into a handle.
/// @param ensNameParts The ENS name parts to format into a handle.
/// @return handle The formatted ENS handle.
function _formatHandle(
string[] memory ensNameParts
) internal pure returns (string memory handle) {
function _formatHandle(string[] memory ensNameParts) internal pure returns (string memory handle) {
// Get a reference to the number of parts are in the ENS name.
uint256 partsLength = ensNameParts.length;

// Concatenate each name part.
for (uint256 i = 1; i <= partsLength; i++) {
// Compute the handle.
// slither-disable-next-line encode-packed-collision
handle = string(
abi.encodePacked(handle, ensNameParts[partsLength - i])
);
handle = string(abi.encodePacked(handle, ensNameParts[partsLength - i]));

// Add a dot if this part isn't the last.
if (i < partsLength) handle = string(abi.encodePacked(handle, "."));
Expand All @@ -157,25 +143,16 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {
/// @dev See https://eips.ethereum.org/EIPS/eip-137.
/// @param ensNameParts The parts of an ENS name to hash.
/// @return namehash The namehash for an ENS name parts.
function _namehash(
string[] memory ensNameParts
) internal pure returns (bytes32 namehash) {
function _namehash(string[] memory ensNameParts) internal pure returns (bytes32 namehash) {
// Hash the trailing "eth" suffix.
namehash = keccak256(
abi.encodePacked(namehash, keccak256(abi.encodePacked("eth")))
);
namehash = keccak256(abi.encodePacked(namehash, keccak256(abi.encodePacked("eth"))));

// Get a reference to the number of parts are in the ENS name.
uint256 nameLength = ensNameParts.length;

// Hash each part.
for (uint256 i; i < nameLength; i++) {
namehash = keccak256(
abi.encodePacked(
namehash,
keccak256(abi.encodePacked(ensNameParts[i]))
)
);
namehash = keccak256(abi.encodePacked(namehash, keccak256(abi.encodePacked(ensNameParts[i]))));
}
}

Expand Down Expand Up @@ -208,11 +185,7 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {
/// @param chainId The chain ID of the network the project is on.
/// @param projectId The ID of the project to set an ENS handle for.
/// @param parts The parts of the ENS domain to use as the project handle, excluding the trailing .eth.
function setEnsNamePartsFor(
uint256 chainId,
uint256 projectId,
string[] memory parts
) external override {
function setEnsNamePartsFor(uint256 chainId, uint256 projectId, string[] memory parts) external override {
// Get a reference to the number of parts are in the ENS name.
uint256 partsLength = parts.length;

Expand All @@ -221,18 +194,14 @@ contract JBProjectHandles is IJBProjectHandles, ERC2771Context {

// Make sure no provided parts are empty.
for (uint256 i; i < partsLength; i++) {
if (bytes(parts[i]).length == 0)
if (bytes(parts[i]).length == 0) {
revert JBProjectHandles_EmptyNamePart();
}
}

// Store the parts.
_ensNamePartsOf[chainId][projectId][_msgSender()] = parts;

emit SetEnsNameParts({
projectId: projectId,
handle: _formatHandle(parts),
parts: parts,
caller: _msgSender()
});
emit SetEnsNameParts({projectId: projectId, handle: _formatHandle(parts), parts: parts, caller: _msgSender()});
}
}
24 changes: 7 additions & 17 deletions src/interfaces/IJBProjectHandles.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,7 @@ import {ENS} from "@ensdomains/ens-contracts/contracts/registry/ENS.sol";
import {ITextResolver} from "@ensdomains/ens-contracts/contracts/resolvers/profiles/ITextResolver.sol";

interface IJBProjectHandles {
event SetEnsNameParts(
uint256 indexed projectId,
string indexed handle,
string[] parts,
address caller
);
event SetEnsNameParts(uint256 indexed projectId, string indexed handle, string[] parts, address caller);

function TEXT_KEY() external view returns (string memory);
function ENS_REGISTRY() external view returns (ENS);
Expand All @@ -20,17 +15,12 @@ interface IJBProjectHandles {
uint256 chainId,
uint256 projectId,
address projectOwner
) external view returns (string[] memory);
)
external
view
returns (string[] memory);

function handleOf(
uint256 chainId,
uint256 projectId,
address projectOwner
) external view returns (string memory);
function handleOf(uint256 chainId, uint256 projectId, address projectOwner) external view returns (string memory);

function setEnsNamePartsFor(
uint256 chainId,
uint256 projectId,
string[] memory parts
) external;
function setEnsNamePartsFor(uint256 chainId, uint256 projectId, string[] memory parts) external;
}
Loading

0 comments on commit ff64a7f

Please sign in to comment.