sherlock-audit / 2024-04-titles-judging

9 stars 6 forks source link

zoyi - 0xSplits does not support zkSync #248

Closed sherlock-admin3 closed 4 months ago

sherlock-admin3 commented 4 months ago

zoyi

medium

0xSplits does not support zkSync

Summary

As per the docs: 0xSplits has not launched on zkSync, resulting in Titles not being able to launch on zkSync.

Vulnerability Detail

The docs state the following:

//On what chains are the smart contracts going to be deployed?
//Ethereum, Base, OP, Zora, Blast, Arbitrum, zkSync, Degen

However,zkSync is not supported by 0xSplits, as you can see here.

Because zkSync is not supported by 0xSplits, the external call createSplit() will not be able to be executed.

    /// @notice Creates a new fee route for the given {Edition} and attributions.
    /// @param edition_ The {Edition} for which to create the route.
    /// @param tokenId_ The token ID associated with the route.
    /// @param attributions_ The attributions to be associated with the route.
    /// @param referrer_ The address of the referrer to receive a share of the fee.
    function createRoute(
        IEdition edition_,
        uint256 tokenId_,
        Target[] calldata attributions_,
        address referrer_
    ) external onlyOwnerOrRoles(ADMIN_ROLE) returns (Target memory receiver) {
        Target memory creator = edition_.node(tokenId_).creator;

        if (attributions_.length == 0) {
            // No attributions, pay the creator directly
            receiver = creator;
        } else {
            // Distribute the fee among the creator and attributions
            (address[] memory targets, uint256[] memory revshares) = _buildSharesAndTargets(
                creator, attributions_, edition_.feeStrategy(tokenId_).revshareBps
            );

// Create the split. The protocol retains "ownership" to enable future use cases.
            // @audit this process seems odd
            receiver = Target({
->              target: splitFactory.createSplit(
                    SplitV2Lib.Split({
                        recipients: targets,
                        allocations: revshares,
                        totalAllocation: 1e6,
                        distributionIncentive: 0
                    }),
                    address(this),
                    creator.target
                    ),
                chainId: creator.chainId
            });
        }

        _feeReceivers[getRouteId(edition_, tokenId_)] = receiver;
        referrers[edition_] = referrer_;
    }

Consequently, createRoute() will not execute, effectively breaking the protocol.

Impact

This project will not be able to launch on zkSync.

Ultimately, the core functionality is broken when launching on zkSync

Code Snippet

https://github.com/sherlock-audit/2024-04-titles/blob/c9d16782a7d3c15c7a759f22c9e0552d5e777ed7/wallflower-contract-v2/src/fees/FeeManager.sol#L125-L160

Tool used

Manual Review

Recommendation

Do not launch on zkSync