0.1.1 • Published 3 years ago
@emo-eth/immutable-splits v0.1.1
ImmutableSplits
ImmutableSplits are a set of lightweight, immutable, gas-efficient payout split contracts. They are designed to be deployed to a deterministic address by a factory contract, which tracks if a particular payout split has already been deployed.
ImmutableSplits
interface IImmutableSplit {
function getRecipients() external view returns (Recipient[] memory);
function splitErc20(address token) external;
function proxyCall(address target, bytes calldata callData) external returns (bytes memory);
function receiveHook() external payable;
receive() external payable;
}- Automatically splits Ether/native-token payments to a predetermined set of recipients.
- Recipients and their respective shares are set at deployment time and, for gas-efficiency, cannot be changed
- Disburses ERC20 splits when the
splitErc20function is called Recipientaddresses included on anImmutableSplitmay call theproxyCallfunction to execute a transaction on behalf of theImmutableSplit. This is useful for allowing withdrawal of non-fungible tokens accidentally sent to a smart contract, or to execute a withdrawal directly to the split contract.
ImmutableSplitFactory
interface IImmutableSplitFactory {
function createImmutableSplit(Recipient[] calldata recipients) external returns (address payable);
function getDeployedImmutableSplitAddress(Recipient[] calldata recipients) external returns (address);
}- Deploys
ImmutableSplits to deterministic addresses - Tracks which
ImmutableSplits have already been deployed, and will revert if attempting to re-deploy anImmutableSplitfor a given set of recipients + shares - When creating a new
ImmutableSplit, an array ofRecipients must be passed. The following validation is applied:- A
Recipientmay not have abpsvalue of0or10_000. - The
bpsvalues of allRecipients must sum to10_000.
- A
- To ensure duplicates are not created, the following rules are enforced:
- The
Recipients must be sorted bybpsin ascending order. - If two or more
Recipients have the samerecipient, theRecipients with the numerically "lower" addresses must come first.