Skip to content

Commit

Permalink
refactor: rename and delete unused files
Browse files Browse the repository at this point in the history
  • Loading branch information
scottphc committed Jan 23, 2025
1 parent 04c153b commit 8d24c84
Show file tree
Hide file tree
Showing 9 changed files with 67 additions and 76 deletions.
6 changes: 3 additions & 3 deletions script/DeployTokenFactory.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {SpotlightTokenFactory} from "../src/spotlight-token-factory/SpotlightTok
import {SpotlightTokenIPCollection} from "../src/spotlight-token-collection/SpotlightTokenIPCollection.sol";
import {SpotlightNativeBondingCurve} from "../src/spotlight-bonding-curve/SpotlightNativeBondingCurve.sol";
import {SpotlightToken} from "../src/spotlight-token/SpotlightToken.sol";
import {SpotlightProtocolRewards} from "../src/spotlight-protocol-rewards/SpotlightProtocolRewards.sol";
import {SpotlightRewardsVault} from "../src/spotlight-rewards-vault/SpotlightRewardsVault.sol";

contract Deploy is Script {
/**
Expand Down Expand Up @@ -65,7 +65,7 @@ contract Deploy is Script {
SpotlightTokenFactory factoryImpl = new SpotlightTokenFactory();

// @dev deploy spotlight protocol rewards contract
SpotlightProtocolRewards protocolRewards = new SpotlightProtocolRewards();
SpotlightRewardsVault rewardsVault = new SpotlightRewardsVault();

// @dev deploy spotlight token factory proxy contract
TransparentUpgradeableProxy factoryProxy =
Expand All @@ -79,7 +79,7 @@ contract Deploy is Script {
_STORY_DERIVATIVE_WORKFLOWS_ADDRESS, // storyDerivativeWorkflows_
PIPERX_V2_ROUTER, // piperxV2Router_
PIPERX_V2_FACTORY, // piperxV2Factory_
address(protocolRewards) // protocolRewards_
address(rewardsVault) // rewardsVault_
);
tokenIpCollection.setTokenFactory(address(factoryProxy));
tokenIpCollection.setMintEnabled(true);
Expand Down
File renamed without changes.
8 changes: 0 additions & 8 deletions src/interfaces/IWETH.sol

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.13;

interface ISpotlightProtocolRewards {
interface ISpotlightRewardsVault {
/**
* @dev Struct to hold withdrawal information
*/
Expand Down Expand Up @@ -45,7 +45,7 @@ interface ISpotlightProtocolRewards {
function deposit(address ipAccount) external payable;

/**
* @dev Withdraws rewards for a specific IPA.
* @dev Withdraws rewards for a IPAccount.
* - Only the IPAccount owner can withdraw.
* - Requires withdraw functionality to be enabled.
* - Emits a Withdraw event.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.13;

import {ISpotlightProtocolRewards} from "./ISpotlightProtocolRewards.sol";
import {ISpotlightRewardsVault} from "./ISpotlightRewardsVault.sol";
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IMinimalIPAccount} from "./IMinimalIPAccount.sol";
import {IMinimalIPAccount} from "../interfaces/IMinimalIPAccount.sol";

/*
* @dev Manager of deposits & withdrawals for protocol rewards
*/
contract SpotlightProtocolRewards is ISpotlightProtocolRewards, Ownable {
contract SpotlightRewardsVault is ISpotlightRewardsVault, Ownable {
constructor() payable Ownable(msg.sender) {}

mapping(address => mapping(uint256 => uint256)) internal _rewards;
Expand Down
5 changes: 2 additions & 3 deletions src/spotlight-token/SpotlightToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/
import {ISpotlightToken} from "./ISpotlightToken.sol";
import {SpotlightTokenStorage} from "./SpotlightTokenStorage.sol";
import {ISpotlightBondingCurve} from "../spotlight-bonding-curve/ISpotlightBondingCurve.sol";
import {IWETH} from "../interfaces/IWETH.sol";
import {IUniswapV2Router02} from "../interfaces/IUniswapV2Router02.sol";
import {IUniswapV2Factory} from "../interfaces/IUniswapV2Factory.sol";
import {MarketType, MarketState} from "./ISpotlightToken.sol";
import {ISpotlightProtocolRewards} from "../spotlight-protocol-rewards/ISpotlightProtocolRewards.sol";
import {ISpotlightRewardsVault} from "../spotlight-rewards-vault/ISpotlightRewardsVault.sol";

contract SpotlightToken is ERC20Upgradeable, ReentrancyGuardTransient, SpotlightTokenStorage, ISpotlightToken {
constructor() {
Expand Down Expand Up @@ -452,7 +451,7 @@ contract SpotlightToken is ERC20Upgradeable, ReentrancyGuardTransient, Spotlight
(bool protocolSuccess,) = _protocolFeeRecipient.call{value: protocolFee}("");
if (!protocolSuccess) revert IPTransferFailed();

ISpotlightProtocolRewards(_rewardsVault).deposit{value: ipAccountFee}(_ipAccount);
ISpotlightRewardsVault(_rewardsVault).deposit{value: ipAccountFee}(_ipAccount);
}

function _graduateMarket() internal {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
pragma solidity ^0.8.13;

import "../lib/forge-std/src/Test.sol";
import {SpotlightProtocolRewards} from "../src/spotlight-protocol-rewards/SpotlightProtocolRewards.sol";
import {SpotlightRewardsVault} from "../src/spotlight-rewards-vault/SpotlightRewardsVault.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {ISpotlightProtocolRewards} from "../src/spotlight-protocol-rewards/ISpotlightProtocolRewards.sol";
import {ISpotlightRewardsVault} from "../src/spotlight-rewards-vault/ISpotlightRewardsVault.sol";

contract SpotlightProtocolRewardsTest is Test {
contract SpotlightRewardsVaultTest is Test {
address constant IPA_ID = 0x359EcA9F3C4cCdB7C10Dd4D9410EaD52Ef9B430A;
address constant IPA_TOKEN_CONTRACT = 0xfAa933848Bd4C9AAb7Ee25Dd5c80E4dCCa678307;
uint256 constant IPA_TOKEN_ID = 70;
Expand All @@ -17,126 +17,126 @@ contract SpotlightProtocolRewardsTest is Test {

address private _user;
address private _owner;
SpotlightProtocolRewards private _protocolRewards;
SpotlightRewardsVault private _rewardsVault;

function setUp() public {
_user = makeAddr("user");
vm.deal(_user, DEFAULT_BALANCE);
_owner = makeAddr("owner");
vm.deal(_owner, DEFAULT_BALANCE);
vm.prank(_owner);
_protocolRewards = new SpotlightProtocolRewards();
_rewardsVault = new SpotlightRewardsVault();
}

function testOwnerIsDeployer() public view {
assertEq(_protocolRewards.owner(), _owner);
assertEq(_rewardsVault.owner(), _owner);
}

function testIsWithdrawEnabledDefaultReturnsFalse() public view {
bool isEnabled = _protocolRewards.isWithdrawEnabled();
bool isEnabled = _rewardsVault.isWithdrawEnabled();
assertFalse(isEnabled);
}

function testSetWithdrawEnabledSuccessWithOwner() public {
vm.prank(_owner);
_protocolRewards.setWithdrawEnabled(true);
assertTrue(_protocolRewards.isWithdrawEnabled());
_rewardsVault.setWithdrawEnabled(true);
assertTrue(_rewardsVault.isWithdrawEnabled());
}

function testSetWithdrawEnabledRevertsWhenNotOwner() public {
address nonOwner = makeAddr("nonOwner");
vm.prank(nonOwner);
vm.expectRevert();
_protocolRewards.setWithdrawEnabled(true);
_rewardsVault.setWithdrawEnabled(true);
}

function testDepositSuccess() public {
vm.startPrank(_user);
vm.expectEmit(false, false, false, true);
emit ISpotlightProtocolRewards.Deposit(IPA_TOKEN_CONTRACT, IPA_TOKEN_ID, REWARD_AMOUNT);
_protocolRewards.deposit{value: REWARD_AMOUNT}(IPA_ID);
emit ISpotlightRewardsVault.Deposit(IPA_TOKEN_CONTRACT, IPA_TOKEN_ID, REWARD_AMOUNT);
_rewardsVault.deposit{value: REWARD_AMOUNT}(IPA_ID);
vm.stopPrank();
}

function testDepositRevertsWhenToAddressZero() public {
vm.startPrank(_user);
vm.expectRevert(SpotlightProtocolRewards.AddressZero.selector);
_protocolRewards.deposit{value: REWARD_AMOUNT}(address(0));
vm.expectRevert(SpotlightRewardsVault.AddressZero.selector);
_rewardsVault.deposit{value: REWARD_AMOUNT}(address(0));
vm.stopPrank();
}

function testDepositRevertsWhenAmountZero() public {
vm.startPrank(_user);
vm.expectRevert(SpotlightProtocolRewards.AmountZero.selector);
_protocolRewards.deposit{value: 0}(IPA_ID);
vm.expectRevert(SpotlightRewardsVault.AmountZero.selector);
_rewardsVault.deposit{value: 0}(IPA_ID);
vm.stopPrank();
}

function testWithdrawSuccess() public {
_enableWithdrawAndDeposit();
assertEq(_user.balance, 0);
assertEq(address(_protocolRewards).balance, REWARD_AMOUNT);
assertEq(address(_rewardsVault).balance, REWARD_AMOUNT);

uint256 tokenOwnerBalanceBefore = IPA_TOKEN_OWNER.balance;
vm.startPrank(IPA_TOKEN_OWNER);

vm.expectEmit(false, false, false, true);
ISpotlightProtocolRewards.WithdrawInfo memory withdrawInfo =
ISpotlightProtocolRewards.WithdrawInfo(IPA_TOKEN_CONTRACT, IPA_TOKEN_ID, REWARD_AMOUNT);
emit ISpotlightProtocolRewards.Withdraw(withdrawInfo);
ISpotlightRewardsVault.WithdrawInfo memory withdrawInfo =
ISpotlightRewardsVault.WithdrawInfo(IPA_TOKEN_CONTRACT, IPA_TOKEN_ID, REWARD_AMOUNT);
emit ISpotlightRewardsVault.Withdraw(withdrawInfo);

_protocolRewards.withdraw(IPA_ID);
_rewardsVault.withdraw(IPA_ID);

assertEq(IPA_TOKEN_OWNER.balance, tokenOwnerBalanceBefore + REWARD_AMOUNT);
assertEq(address(_protocolRewards).balance, 0);
assertEq(address(_rewardsVault).balance, 0);
vm.stopPrank();
}

function testWithdrawRevertsWhenToAddressZero() public {
_enableWithdrawAndDeposit();
vm.startPrank(_user);
vm.expectRevert(SpotlightProtocolRewards.AddressZero.selector);
_protocolRewards.withdraw(address(0));
vm.expectRevert(SpotlightRewardsVault.AddressZero.selector);
_rewardsVault.withdraw(address(0));
vm.stopPrank();
}

function testWithdrawRevertsWhenRewardsZero() public {
_enableWithdraw();

vm.startPrank(IPA_TOKEN_OWNER);
vm.expectRevert(SpotlightProtocolRewards.RewardsZero.selector);
_protocolRewards.withdraw(IPA_ID);
vm.expectRevert(SpotlightRewardsVault.RewardsZero.selector);
_rewardsVault.withdraw(IPA_ID);
vm.stopPrank();
}

function testWithdrawRevertsWhenInvalidWithdraw() public {
_enableWithdrawAndDeposit();

vm.startPrank(_user);
vm.expectRevert(SpotlightProtocolRewards.InvalidWithdraw.selector);
_protocolRewards.withdraw(IPA_ID);
vm.expectRevert(SpotlightRewardsVault.InvalidWithdraw.selector);
_rewardsVault.withdraw(IPA_ID);
vm.stopPrank();
}

function testWithdrawAllSuccess() public {
_enableWithdrawAndDeposit();
assertEq(_user.balance, 0);
assertEq(address(_protocolRewards).balance, REWARD_AMOUNT);
assertEq(address(_rewardsVault).balance, REWARD_AMOUNT);

uint256 tokenOwnerBalanceBefore = IPA_TOKEN_OWNER.balance;
vm.startPrank(IPA_TOKEN_OWNER);

vm.expectEmit(false, false, false, true);
ISpotlightProtocolRewards.WithdrawInfo[] memory withdrawInfos = new ISpotlightProtocolRewards.WithdrawInfo[](1);
withdrawInfos[0] = ISpotlightProtocolRewards.WithdrawInfo(IPA_TOKEN_CONTRACT, IPA_TOKEN_ID, REWARD_AMOUNT);
emit ISpotlightProtocolRewards.WithdrawAll(withdrawInfos);
ISpotlightRewardsVault.WithdrawInfo[] memory withdrawInfos = new ISpotlightRewardsVault.WithdrawInfo[](1);
withdrawInfos[0] = ISpotlightRewardsVault.WithdrawInfo(IPA_TOKEN_CONTRACT, IPA_TOKEN_ID, REWARD_AMOUNT);
emit ISpotlightRewardsVault.WithdrawAll(withdrawInfos);

address[] memory ipaIds = new address[](1);
ipaIds[0] = IPA_ID;
_protocolRewards.withdrawAll(ipaIds);
_rewardsVault.withdrawAll(ipaIds);

assertEq(IPA_TOKEN_OWNER.balance, tokenOwnerBalanceBefore + REWARD_AMOUNT);
assertEq(address(_protocolRewards).balance, 0);
assertEq(address(_rewardsVault).balance, 0);
vm.stopPrank();
}

Expand All @@ -145,8 +145,8 @@ contract SpotlightProtocolRewardsTest is Test {
address[] memory ipaIds = new address[](0);

vm.startPrank(_user);
vm.expectRevert(SpotlightProtocolRewards.IPAccountsEmpty.selector);
_protocolRewards.withdrawAll(ipaIds);
vm.expectRevert(SpotlightRewardsVault.IPAccountsEmpty.selector);
_rewardsVault.withdrawAll(ipaIds);
vm.stopPrank();
}

Expand All @@ -157,8 +157,8 @@ contract SpotlightProtocolRewardsTest is Test {
ipaIds[0] = IPA_ID;

vm.startPrank(_user);
vm.expectRevert(SpotlightProtocolRewards.InvalidWithdraw.selector);
_protocolRewards.withdrawAll(ipaIds);
vm.expectRevert(SpotlightRewardsVault.InvalidWithdraw.selector);
_rewardsVault.withdrawAll(ipaIds);
vm.stopPrank();
}

Expand All @@ -169,8 +169,8 @@ contract SpotlightProtocolRewardsTest is Test {
ipaIds[0] = IPA_ID;

vm.startPrank(IPA_TOKEN_OWNER);
vm.expectRevert(SpotlightProtocolRewards.RewardsZero.selector);
_protocolRewards.withdrawAll(ipaIds);
vm.expectRevert(SpotlightRewardsVault.RewardsZero.selector);
_rewardsVault.withdrawAll(ipaIds);
vm.stopPrank();
}

Expand All @@ -181,38 +181,38 @@ contract SpotlightProtocolRewardsTest is Test {
ipaIds[0] = address(0);

vm.startPrank(_user);
vm.expectRevert(SpotlightProtocolRewards.AddressZero.selector);
_protocolRewards.withdrawAll(ipaIds);
vm.expectRevert(SpotlightRewardsVault.AddressZero.selector);
_rewardsVault.withdrawAll(ipaIds);
vm.stopPrank();
}

function testTotalRewardsSuccess() public {
_deposit();
assertEq(_protocolRewards.totalRewards(), REWARD_AMOUNT);
assertEq(_rewardsVault.totalRewards(), REWARD_AMOUNT);
}

function testRewardsOfSuccess() public {
_deposit();
assertEq(_protocolRewards.rewardsOf(IPA_ID), REWARD_AMOUNT);
assertEq(_protocolRewards.rewardsOf(IPA_TOKEN_CONTRACT, IPA_TOKEN_ID), REWARD_AMOUNT);
assertEq(_rewardsVault.rewardsOf(IPA_ID), REWARD_AMOUNT);
assertEq(_rewardsVault.rewardsOf(IPA_TOKEN_CONTRACT, IPA_TOKEN_ID), REWARD_AMOUNT);
}

function testRewardsOfRevertsWhenAddressZero() public {
vm.expectRevert(SpotlightProtocolRewards.AddressZero.selector);
_protocolRewards.rewardsOf(address(0));
vm.expectRevert(SpotlightRewardsVault.AddressZero.selector);
_rewardsVault.rewardsOf(address(0));

vm.expectRevert(SpotlightProtocolRewards.AddressZero.selector);
_protocolRewards.rewardsOf(address(0), 0);
vm.expectRevert(SpotlightRewardsVault.AddressZero.selector);
_rewardsVault.rewardsOf(address(0), 0);
}

function _enableWithdraw() internal {
vm.prank(_owner);
_protocolRewards.setWithdrawEnabled(true);
_rewardsVault.setWithdrawEnabled(true);
}

function _deposit() internal {
vm.prank(_user);
_protocolRewards.deposit{value: REWARD_AMOUNT}(IPA_ID);
_rewardsVault.deposit{value: REWARD_AMOUNT}(IPA_ID);
}

function _enableWithdrawAndDeposit() internal {
Expand Down
6 changes: 3 additions & 3 deletions test/SpotlightTokenFactoryTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {StoryWorkflowStructs} from "../src/spotlight-token-factory/story-workflo
import {SpotlightNativeBondingCurve} from "../src/spotlight-bonding-curve/SpotlightNativeBondingCurve.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {SpotlightProtocolRewards} from "../src/spotlight-protocol-rewards/SpotlightProtocolRewards.sol";
import {SpotlightRewardsVault} from "../src/spotlight-rewards-vault/SpotlightRewardsVault.sol";

contract SpotlightTokenFactoryTest is Test {
address private _factoryOwner;
Expand All @@ -24,7 +24,7 @@ contract SpotlightTokenFactoryTest is Test {
SpotlightToken private _spotlightTokenImpl;
SpotlightTokenIPCollection private _tokenIpCollection;
SpotlightNativeBondingCurve private _bondingCurve;
SpotlightProtocolRewards private _rewardsVault;
SpotlightRewardsVault private _rewardsVault;
address private constant _piperXRouter = address(0);
address private constant _piperXFactory = address(0);

Expand All @@ -38,7 +38,7 @@ contract SpotlightTokenFactoryTest is Test {
_factoryAddress = address(_factory);
_tokenIpCollection = new SpotlightTokenIPCollection(_factoryAddress);
_bondingCurve = new SpotlightNativeBondingCurve(1060848709, 4379701787);
_rewardsVault = new SpotlightProtocolRewards();
_rewardsVault = new SpotlightRewardsVault();

_factory.initialize(
_factoryOwner,
Expand Down
Loading

0 comments on commit 8d24c84

Please sign in to comment.