Erc20RewardTransferFacet
This facet handles the configuration of reward packets (output) for staking campaigns and facilitates the transfer of the assets encapsulated within these reward packets.
_This implementation is specifically designed for staking campaigns where the reward packet is constructed solely from ERC20 tokens.
IMPORTANT:
- Extra care should be taken when specifying token amounts, especially when dealing with tokens of
varying decimal precision (see
setCampaignTransferRewards()for more details). - The campaign's reward asset handler must have sufficient balances of the ERC20 assets specified in the reward packet, else the campaign will fail to provide the appropriate rewards.
- A reward packet can encapsulate one (e.g., tokenA) or more (e.g., tokenA, tokenB, ..., tokenX) ERC20 tokens._
CampaignRewardConfigured
Emitted at setCampaignTransferRewards().
CampaignRewardPacketsTransferred
Emitted at transferReward().
setCampaignTransferRewards
Setter function for configuring the reward packet for the specified staking campaign.
_Setter functions are executed during the creation process of campaigns (see CampaignCreationSkeleton.sol).
This setter function configures the reward packet for a campaign, where only ERC20 tokens should be included.
Requirements:
- The
tokenAddressesandamountOfTokensPerPacketarrays must have the same length. tokenAddressesmust contain valid, non-zero ERC20 token addresses.amountOfTokensPerPacketmust contain non-zero values.
Emits a {CampaignRewardConfigured} event.
IMPORTANT:
- In any case the values in
amountOfTokensPerPacketshould be parsed with each token's decimal precision (using wei values) at the API level. ----------------------------------------------------------------------------------------------------------------_
Parameters
| Name | Type | Description |
|---|---|---|
| campaignId | uint256 | The unique identifier of the targeted staking campaign. |
| campaignTransferRewardsData | bytes | The ABI-encoded data containing the following: - tokenAddresses: An address array containing the addresses of the ERC20 tokens encapsulated by the reward packet. - amountOfTokensPerPacket: A uint256 array specifying the amount for each corresponding token in tokenAddresses. |
transferReward
Transfers the specified amount of a given campaign's reward packets from the from address
to the to address.
_This function iteratively executes transfer functions for all respective amounts of ERC20 tokens defined
in the campaign's reward packet (see setCampaignTransferRewards()) in a single transaction.
The amounts to be transferred are calculated as
amountOfTokensPerPacket[i] * amountOfPackets for each token in the reward packet, where i
is the index of the token in the tokenAddresses array. The transfer is performed using
the safeTransferFrom method of the ERC20 token interface.
Emits a {CampaignRewardPacketsTransferred} event._
Parameters
| Name | Type | Description |
|---|---|---|
| campaignId | uint256 | The unique identifier of the targeted staking campaign. |
| from | address | The address from which the ERC20 assets encapsulated by the specified number of reward packets to be transferred. |
| to | address | The address to receive the ERC20 assets encapsulated by the specified number of reward packets. |
| amountOfPackets | uint256 | The number of input packets to account for. |

