You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This PR introduces a new top-up flow in BoostCore that routes additional tokens into existing incentives, adding topupIncentiveFromBudget (for budget-based tokens) and topupIncentiveFromSender (for user-supplied tokens). Both flows gather all tokens in BoostCore , compute and record protocol fees, and temporarily approve the incentive contract to pull the remainder via its topup function. We remove approval after the transfers. Two things to watch out for in review are that funds can't be pulled out of core if there was a malicious incentive and that all permissions on the budget are respected. Basically we want to avoid loss of funds.
Assumptions:
If sending directly the user has already approved BoostCore for ERC20 tokens or setApprovalForAll for ERC1155 tokens .
If sending from a budget the user must be permissioned on the budget. Approval isn't needed based on how we handle disbursals.
The bytes data_ argument decodes based on the incentives InitPayload struct an example of which is shown below.
Protocol fees are only reserved in BoostCore, and may be transferred or settled at a later time.
New Function Signatures
function topupIncentiveFromBudget(
uint256boostId,
uint256incentiveId,
bytescalldatadata_,
addressbudget
) external nonReentrant;
function topupIncentiveFromSender(
uint256boostId,
uint256incentiveId,
bytescalldatadata_
) external nonReentrant;
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
This PR includes no changesets
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
Are you sure you want to be submitting a change without including a changeset? If you're just changing docs or tests, you probably don't need to. See the publishing section of the README for more info.
Are you sure you want to be submitting a change without including a changeset? If you're just changing docs or tests, you probably don't need to. See the publishing section of the README for more info.
Are you sure you want to be submitting a change without including a changeset? If you're just changing docs or tests, you probably don't need to. See the publishing section of the README for more info.
Are you sure you want to be submitting a change without including a changeset? If you're just changing docs or tests, you probably don't need to. See the publishing section of the README for more info.
Are you sure you want to be submitting a change without including a changeset? If you're just changing docs or tests, you probably don't need to. See the publishing section of the README for more info.
Are you sure you want to be submitting a change without including a changeset? If you're just changing docs or tests, you probably don't need to. See the publishing section of the README for more info.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR introduces a new top-up flow in
BoostCore
that routes additional tokens into existing incentives, addingtopupIncentiveFromBudget
(for budget-based tokens) andtopupIncentiveFromSender
(for user-supplied tokens). Both flows gather all tokens inBoostCore
, compute and record protocol fees, and temporarily approve the incentive contract to pull the remainder via itstopup
function. We remove approval after the transfers. Two things to watch out for in review are that funds can't be pulled out of core if there was a malicious incentive and that all permissions on the budget are respected. Basically we want to avoid loss of funds.Assumptions:
BoostCore
for ERC20 tokens or setApprovalForAll for ERC1155 tokens .bytes data_
argument decodes based on the incentivesInitPayload
struct an example of which is shown below.BoostCore
, and may be transferred or settled at a later time.New Function Signatures
Example of Relevant Struct for
_data
payloadThis param (
_data
) should be the InitPayload for the incentive being topped up.