Staking Protocoltransfersrewarderc20transferrer

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

event CampaignRewardConfigured(uint256 campaignId, address[] tokenAddresses, uint256[] amountOfTokensPerPacket)

Emitted at setCampaignTransferRewards().

CampaignRewardPacketsTransferred

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

Emitted at transferReward().

setCampaignTransferRewards

function setCampaignTransferRewards(uint256 campaignId, bytes campaignTransferRewardsData) external

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 and amountOfTokensPerPacket 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

NameTypeDescription
campaignIduint256The unique identifier of the targeted staking campaign.
campaignTransferRewardsDatabytesThe 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

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

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

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

On this page