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
tokenAddresses
andamountOfTokensPerPacket
arrays must have the same length. tokenAddresses
must contain valid, non-zero ERC20 token addresses.amountOfTokensPerPacket
must contain non-zero values.
Emits a {CampaignRewardConfigured}
event.
IMPORTANT:
- In any case the values in
amountOfTokensPerPacket
should 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. |