Staking Protocoltransfersinput

TransferInputMixer

This Mixer implementation ensembles Transfer Input Explicit Facets enabling the configuration of campaings' input packets that can encapsulate diverse asset types (e.g., ERC20, ERC1155 etc.), and facilitate the transfer of these input packets. The Explicit Facets are always called exclusively through their associated Mixer.

_The Explicit facets are essentially of the same implementation as their Non-Explicit counterparts, (e.g., ERC20InputExplicitFacet.sol vs ERC20InputFacet.sol), with the only difference being the naming of their functions (e.g., transferErc20Input() vs transferInput()) in order to generate unique function selectors, thus establishing a clear distinction between them. Since all Non-Explicit facets of the same category (e.g., ERC20InputFacet and ERC1155InputFacet) share the same function names but implement different logic, the role of any mixer associated with a category of facets is to aggregate the logic and access the storage of such facets without conflicts. This is achieved by having its functions share the names of the Non-Explicit facets of the same category but interact exclusively with their Explicit counterparts.

IMPORTANT: When a Mixer of a category of facets is integrated as a facet to the staking platform (diamond), only Explicit facets of this category should be added as facets._

OnlyAdminCanInitialize

error OnlyAdminCanInitialize(address nonAdminAccount)

Thrown when a non-admin account attempts to call restricted initialization functions.

InputMixerInitialized

event InputMixerInitialized(uint256[] supportedInputAssetTypeCodes)

Emitted at initTransferInput().

CampaignInputConfigured

event CampaignInputConfigured(uint256 campaignId, uint256[] inputAssetTypeCodes)

Emitted at setCampaignTransferInput().

CampaignInputPacketsTransferred

event CampaignInputPacketsTransferred(uint256 campaignId, address from, address to, uint256 amountOfPackets)

Emitted at transferInput().

initTransferInput

function initTransferInput(bytes initTransferInputData) external

Initializes the TransferInputMixerStorage by registering the selectors for the setter and transferInput functions of the supported TransferInput Explicit facets, along with code schema for representing the ERC types handled by these Explicit facets.

_This function can only be called by the Admin (see AccessControlStakingFacet.sol).

The selectors provided must belong to the TransferInput Explicit facets that will be used for constructing input packets of campaigns and for transferring assets encapsulated within a campaing's input packet.

Emits a {InputMixerInitialized} event.

Requirements:

  • The selectors and inputAssetTypeCodes arrays must have the same length.

IMPORTANT:

  • The code schema for supported ERCs in campaigns' input packets helps identify the asset type that each registered TransferInput Mixer facet handles. While the construction of this shcema is at the discreation of the Admin, it is advised to use the numerical suffix of the ERC standards (e.g., 20 for ERC20, 1155 for ERC1155 etc.) as codes for clarity and consistency.

  • A FunctionSelectors struct contains two bytes4 fields: setterSelector & transferSelector. The order of these fields matters when constructing the selectors array at the API level.

  • The i-th member of the inputAssetTypeCodes array should correspond to the i-th member of the selectors array. ----------------------------------------------------------------------------------------------------------------_

Parameters

NameTypeDescription
initTransferInputDatabytesThe ABI encoded data containing the following: - selectors: An array of FunctionSelectors structs, each with the setter and transferInput function selectors of the supported TransferInput Explicit facets. - inputAssetTypeCodes: The code schema that identifies the ERC (asset type) each supported TransferInput Explicit facet hanldles.

setCampaignTransferInput

function setCampaignTransferInput(uint256 campaignId, bytes campaignTransferInputData) external

Setter function for configuring the input packet for the specified staking campaign.

_This setter function configures the input packet for a campaign, where any of the supported asset types can be included. For instance, if ERC20 and ERC1155 Transfer Input Explicit facets are supported, a packet could be configured as follows:

{ 100 TokenA (ERC20), 20.5 tokenB (ERC20), 10 tokenC ID 2 (ERC1155), 5 tokenD ID 1 (ERC1155) }

The construction of the input packet is at the discreation of the campaign creator, as any possible combination of the supported Transfer Input Explicit facets can be employed. These explicit facets must be already registered via initTransferInput().

Setter functions are executed during the creation process of campaigns (see CampaignCreationSkeleton.sol).

Emits a {CampaignInputConfigured} event.

Requirements:

  • The campaignInputData and inputAssetTypeCodes arrays must have the same length.

IMPORTANT:

  • The asset type codes specified in inputAssetTypeCodes should be valid, meaning that they should already be registered in the TransferInput Mixer storage (see initTransferInput()).

  • The i-th member of the inputAssetTypeCodes array should correspond to the i-th member of the campaignInputData array.

  • If ERC20 tokens are opted for inclusion in the input packet (i.e., via ERC20InputExplicitFacet.sol), or any other token standards with decimal precision, then the amounts of these tokens should be parsed with their respective decimal precision at the API level. ----------------------------------------------------------------------------------------------------------------_

Parameters

NameTypeDescription
campaignIduint256The unique identifier of the targeted staking campaign.
campaignTransferInputDatabytesThe ABI-encoded settings data containing the following: - campaignInputData: An bytes array with the ABI encoded data to be consumed as input by the setter functions of the targeted TransferInput Explicit facets. - inputAssetTypeCodes: A uint256 array with the respective configured codes indicating the targeted TransferInput Explicit facets to be used.

transferInput

function transferInput(uint256 campaignId, address from, address to, uint256 amountOfPackets) external

Transfers the specified amount of a given campaign's input packets from the from address to the to address.

_This function iteratively executes the respective transferInput functions of all Input Explicit facets associated with the input packet.

Emits a {CampaignInputPacketsTransferred} event._

Parameters

NameTypeDescription
campaignIduint256The unique identifier of the targeted staking campaign.
fromaddressThe address from which the assets encapsulated by the specified number of input packets to be transferred.
toaddressThe address to receive the assets encapsulated by the specified number of input packets.
amountOfPacketsuint256The number of input packets to account for.

On this page