Skip to content

Commit

Permalink
Merge branch 'develop' into 154-dapp-refactor-23
Browse files Browse the repository at this point in the history
  • Loading branch information
moconnell committed Jan 11, 2024
2 parents 2280700 + a168248 commit 3976ac0
Show file tree
Hide file tree
Showing 25 changed files with 2,482 additions and 410 deletions.
165 changes: 60 additions & 105 deletions packages/contracts/contracts/SafeSplitsDaoEscrowZap.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

pragma solidity ^0.8.4;

import "hardhat/console.sol";
import "@openzeppelin/contracts/proxy/Clones.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";

Expand All @@ -11,19 +10,14 @@ import "./interfaces/ISpoilsManager.sol";

contract SafeSplitsDaoEscrowZap is SafeSplitsEscrowZap {
/// @notice The DAO controller address
address dao;
address public dao;

error DaoSplitCreationFailed();

/// @notice The DAO's SpoilsManager address
ISpoilsManager spoilsManager;
ISpoilsManager public spoilsManager;

event SafeSplitsDaoEscrowCreated(
address safe,
address projectTeamSplit,
address daoSplit,
address escrow
);
event SafeSplitsDaoEscrowCreated(address safe, address projectTeamSplit, address daoSplit, address escrow);

struct DaoZapData {
ZapData zapData;
Expand All @@ -43,65 +37,57 @@ contract SafeSplitsDaoEscrowZap is SafeSplitsEscrowZap {
bytes calldata _splitsData,
DaoZapData memory _daoZapData
) internal returns (DaoZapData memory) {
_daoZapData.zapData.projectTeamSplit = splitMain.createSplit(
_owners,
_percentAllocations,
distributorFee,
_daoZapData.zapData.safe
);
if (_daoZapData.zapData.projectTeamSplit == address(0)) {
revert ProjectTeamSplitNotCreated();
(bool projectSplit, bool daoSplit) = abi.decode(_splitsData, (bool, bool));
if (projectSplit) {
_daoZapData.zapData.projectTeamSplit =
splitMain.createSplit(_owners, _percentAllocations, distributorFee, _daoZapData.zapData.safe);
}

bool _isDaoSplit = abi.decode(_splitsData, (bool));

if (_isDaoSplit) {
// prepare arrays
address[] memory daoSplitRecipients = new address[](2);
uint32[] memory daoSplitPercentAllocations = new uint32[](2);

// dao split recipients
address daoReceiver = spoilsManager.receiver();

// dao split amounts
uint32 daoSplitAmount = spoilsManager.getSpoils();
uint32 projectSplitAmount = (100 *
spoilsManager.SPLIT_PERCENTAGE_SCALE()) - (daoSplitAmount);

// sort the addresses into the correct order
if (
uint160(daoReceiver) <
uint160(_daoZapData.zapData.projectTeamSplit)
) {
daoSplitRecipients[0] = daoReceiver;
daoSplitRecipients[1] = _daoZapData.zapData.projectTeamSplit;
daoSplitPercentAllocations[0] = daoSplitAmount;
daoSplitPercentAllocations[1] = projectSplitAmount;
if (_daoZapData.zapData.projectTeamSplit == address(0)) {
if (_daoZapData.zapData.safe != address(0)) {
_daoZapData.zapData.projectTeamSplit = _daoZapData.zapData.safe;
} else {
daoSplitRecipients[0] = _daoZapData.zapData.projectTeamSplit;
daoSplitRecipients[1] = daoReceiver;
daoSplitPercentAllocations[0] = projectSplitAmount;
daoSplitPercentAllocations[1] = daoSplitAmount;
revert ProjectTeamSplitNotCreated();
}
}

// (recipients array, percent allocations array, no distributor fee, safe address)
_daoZapData.daoSplit = splitMain.createSplit(
daoSplitRecipients,
daoSplitPercentAllocations,
distributorFee,
dao
);
if (_daoZapData.daoSplit == address(0)) {
revert DaoSplitCreationFailed();
}
if (!daoSplit) return _daoZapData;

// prepare arrays
address[] memory daoSplitRecipients = new address[](2);
uint32[] memory daoSplitPercentAllocations = new uint32[](2);

// dao split recipients
address daoReceiver = spoilsManager.receiver();

// dao split amounts
uint32 daoSplitAmount = spoilsManager.getSpoils();
uint32 projectSplitAmount = (100 * spoilsManager.SPLIT_PERCENTAGE_SCALE()) - (daoSplitAmount);

// sort the addresses into the correct order
if (uint160(daoReceiver) < uint160(_daoZapData.zapData.projectTeamSplit)) {
daoSplitRecipients[0] = daoReceiver;
daoSplitRecipients[1] = _daoZapData.zapData.projectTeamSplit;
daoSplitPercentAllocations[0] = daoSplitAmount;
daoSplitPercentAllocations[1] = projectSplitAmount;
} else {
daoSplitRecipients[0] = _daoZapData.zapData.projectTeamSplit;
daoSplitRecipients[1] = daoReceiver;
daoSplitPercentAllocations[0] = projectSplitAmount;
daoSplitPercentAllocations[1] = daoSplitAmount;
}

// (recipients array, percent allocations array, no distributor fee, safe address)
_daoZapData.daoSplit =
splitMain.createSplit(daoSplitRecipients, daoSplitPercentAllocations, distributorFee, dao);
if (_daoZapData.daoSplit == address(0)) {
revert DaoSplitCreationFailed();
}

return _daoZapData;
}

function _handleEscrowParams(
DaoZapData memory _daoZapData
) internal view returns (address[] memory) {
function _handleEscrowParams(DaoZapData memory _daoZapData) internal view returns (address[] memory) {
address[] memory escrowParams = new address[](2);
escrowParams[0] = _daoZapData.zapData.safe;
escrowParams[1] = _daoZapData.zapData.projectTeamSplit;
Expand All @@ -119,45 +105,30 @@ contract SafeSplitsDaoEscrowZap is SafeSplitsEscrowZap {
uint32[] memory _percentAllocations,
uint256[] memory _milestoneAmounts,
bytes calldata _safeData,
address _safeAddress,
bytes calldata _splitsData,
bytes calldata _escrowData
) internal {
) internal override {
// pass safeAddress by default
DaoZapData memory daoZapData = DaoZapData({
zapData: ZapData({
safe: address(0),
projectTeamSplit: address(0),
escrow: address(0)
}),
zapData: ZapData({safe: _safeAddress, projectTeamSplit: address(0), escrow: address(0)}),
daoSplit: address(0)
});

daoZapData.zapData = _deploySafe(
_owners,
_safeData,
daoZapData.zapData
);
// optionally deploy safe
if (daoZapData.zapData.safe == address(0)) {
daoZapData.zapData = _deploySafe(_owners, _safeData, daoZapData.zapData);
}

daoZapData = _createSplit(
_owners,
_percentAllocations,
_splitsData,
daoZapData
);
// create split(s)
daoZapData = _createSplit(_owners, _percentAllocations, _splitsData, daoZapData);

address[] memory escrowParams = _handleEscrowParams(daoZapData);

daoZapData.zapData = _deployEscrow(
_milestoneAmounts,
_escrowData,
escrowParams,
daoZapData.zapData
);
daoZapData.zapData = _deployEscrow(_milestoneAmounts, _escrowData, escrowParams, daoZapData.zapData);

emit SafeSplitsDaoEscrowCreated(
daoZapData.zapData.safe,
daoZapData.zapData.projectTeamSplit,
daoZapData.daoSplit,
daoZapData.zapData.escrow
daoZapData.zapData.safe, daoZapData.zapData.projectTeamSplit, daoZapData.daoSplit, daoZapData.zapData.escrow
);
}

Expand All @@ -174,19 +145,15 @@ contract SafeSplitsDaoEscrowZap is SafeSplitsEscrowZap {
uint32[] memory _percentAllocations,
uint256[] memory _milestoneAmounts,
bytes calldata _safeData,
address _safeAddress,
bytes calldata _splitsData,
bytes calldata _escrowData
) public {
) public override {
if (_percentAllocations.length != _owners.length) {
revert InvalidAllocationsOwnersData();
}
_createSafeSplitEscrow(
_owners,
_percentAllocations,
_milestoneAmounts,
_safeData,
_splitsData,
_escrowData
_owners, _percentAllocations, _milestoneAmounts, _safeData, _safeAddress, _splitsData, _escrowData
);
}

Expand All @@ -200,19 +167,7 @@ contract SafeSplitsDaoEscrowZap is SafeSplitsEscrowZap {
address _escrowFactory,
address _wrappedNativeToken,
address _dao
) = abi.decode(
_data,
(
address,
address,
address,
address,
address,
address,
address,
address
)
);
) = abi.decode(_data, (address, address, address, address, address, address, address, address));

safeSingleton = _safeSingleton;
fallbackHandler = _fallbackHandler;
Expand Down
Loading

0 comments on commit 3976ac0

Please sign in to comment.