Skip to content

Commit

Permalink
Rebase and add Quark v2 fields to MorphoClaimRewards action; comment …
Browse files Browse the repository at this point in the history
…out MorphoClaimRewards for now
  • Loading branch information
kevincheng96 committed Sep 26, 2024
1 parent a792454 commit e5e823c
Show file tree
Hide file tree
Showing 4 changed files with 550 additions and 499 deletions.
135 changes: 70 additions & 65 deletions src/builder/Actions.sol
Original file line number Diff line number Diff line change
Expand Up @@ -1281,70 +1281,75 @@ library Actions {
return (quarkOperation, action);
}

function morphoClaimRewards(MorphoClaimRewards memory claimRewards, PaymentInfo.Payment memory payment)
internal
pure
returns (IQuarkWallet.QuarkOperation memory, Action memory)
{
bytes[] memory scriptSources = new bytes[](1);
scriptSources[0] = type(MorphoRewardsActions).creationCode;

Accounts.ChainAccounts memory accounts =
Accounts.findChainAccounts(claimRewards.chainId, claimRewards.chainAccountsList);

Accounts.QuarkState memory accountState = Accounts.findQuarkState(claimRewards.claimer, accounts.quarkStates);

List.DynamicArray memory rewardsPriceList = List.newList();
List.DynamicArray memory rewardsSymbolList = List.newList();
for (uint256 i = 0; i < claimRewards.rewards.length; i++) {
Accounts.AssetPositions memory rewardsAssetPosition =
Accounts.findAssetPositions(claimRewards.rewards[i], accounts.assetPositionsList);
List.addUint256(rewardsPriceList, rewardsAssetPosition.usdPrice);
List.addString(rewardsSymbolList, rewardsAssetPosition.symbol);
}

bytes memory scriptCalldata = abi.encodeWithSelector(
MorphoRewardsActions.claimAll.selector,
claimRewards.distributors,
claimRewards.accounts,
claimRewards.rewards,
claimRewards.claimables,
claimRewards.proofs
);

// Construct QuarkOperation
IQuarkWallet.QuarkOperation memory quarkOperation = IQuarkWallet.QuarkOperation({
nonce: accountState.quarkNextNonce,
scriptAddress: CodeJarHelper.getCodeAddress(type(MorphoRewardsActions).creationCode),
scriptCalldata: scriptCalldata,
scriptSources: scriptSources,
expiry: claimRewards.blockTimestamp + STANDARD_EXPIRY_BUFFER
});

MorphoClaimRewardsActionContext memory claimRewardsActionContext = MorphoClaimRewardsActionContext({
amounts: claimRewards.claimables,
assetSymbols: List.toStringArray(rewardsSymbolList),
chainId: claimRewards.chainId,
prices: List.toUint256Array(rewardsPriceList),
tokens: claimRewards.rewards
});

Action memory action = Actions.Action({
chainId: claimRewards.chainId,
quarkAccount: claimRewards.claimer,
actionType: ACTION_TYPE_MORPHO_CLAIM_REWARDS,
actionContext: abi.encode(claimRewardsActionContext),
paymentMethod: PaymentInfo.paymentMethodForPayment(payment, false),
// Null address for OFFCHAIN payment.
paymentToken: payment.isToken
? PaymentInfo.knownToken(payment.currency, claimRewards.chainId).token
: address(0),
paymentTokenSymbol: payment.currency,
paymentMaxCost: payment.isToken ? PaymentInfo.findMaxCost(payment, claimRewards.chainId) : 0
});

return (quarkOperation, action);
}
// TODO: Commenting because it is currently unused and will result in stack too deep
// function morphoClaimRewards(MorphoClaimRewards memory claimRewards, PaymentInfo.Payment memory payment)
// internal
// pure
// returns (IQuarkWallet.QuarkOperation memory, Action memory)
// {
// bytes[] memory scriptSources = new bytes[](1);
// scriptSources[0] = type(MorphoRewardsActions).creationCode;

// Accounts.ChainAccounts memory accounts =
// Accounts.findChainAccounts(claimRewards.chainId, claimRewards.chainAccountsList);

// Accounts.QuarkSecret memory accountSecret =
// Accounts.findQuarkSecret(claimRewards.claimer, accounts.quarkSecrets);

// string[] memory rewardsAssetSymbols = new string[](claimRewards.rewards.length);
// uint256[] memory rewardsPrices = new uint256[](claimRewards.rewards.length);
// for (uint256 i = 0; i < claimRewards.rewards.length; ++i) {
// Accounts.AssetPositions memory rewardsAssetPosition =
// Accounts.findAssetPositions(claimRewards.rewards[i], accounts.assetPositionsList);
// rewardsAssetSymbols[i] = rewardsAssetPosition.symbol;
// rewardsPrices[i] = rewardsAssetPosition.usdPrice;
// }

// bytes memory scriptCalldata = abi.encodeWithSelector(
// MorphoRewardsActions.claimAll.selector,
// claimRewards.distributors,
// claimRewards.accounts,
// claimRewards.rewards,
// claimRewards.claimables,
// claimRewards.proofs
// );

// // Construct QuarkOperation
// IQuarkWallet.QuarkOperation memory quarkOperation = IQuarkWallet.QuarkOperation({
// nonce: accountSecret.nonceSecret,
// isReplayable: false,
// scriptAddress: CodeJarHelper.getCodeAddress(type(MorphoRewardsActions).creationCode),
// scriptCalldata: scriptCalldata,
// scriptSources: scriptSources,
// expiry: claimRewards.blockTimestamp + STANDARD_EXPIRY_BUFFER
// });

// MorphoClaimRewardsActionContext memory claimRewardsActionContext = MorphoClaimRewardsActionContext({
// amounts: claimRewards.claimables,
// assetSymbols: rewardsAssetSymbols,
// chainId: claimRewards.chainId,
// prices: rewardsPrices,
// tokens: claimRewards.rewards
// });

// Action memory action = Actions.Action({
// chainId: claimRewards.chainId,
// quarkAccount: claimRewards.claimer,
// actionType: ACTION_TYPE_MORPHO_CLAIM_REWARDS,
// actionContext: abi.encode(claimRewardsActionContext),
// paymentMethod: PaymentInfo.paymentMethodForPayment(payment, false),
// // Null address for OFFCHAIN payment.
// paymentToken: payment.isToken
// ? PaymentInfo.knownToken(payment.currency, claimRewards.chainId).token
// : address(0),
// paymentTokenSymbol: payment.currency,
// paymentMaxCost: payment.isToken ? PaymentInfo.findMaxCost(payment, claimRewards.chainId) : 0,
// nonceSecret: accountSecret.nonceSecret,
// totalPlays: 1
// });

// return (quarkOperation, action);
// }

function wrapOrUnwrapAsset(
WrapOrUnwrapAsset memory wrapOrUnwrap,
Expand Down Expand Up @@ -1527,7 +1532,6 @@ library Actions {
});
}

// Construct QuarkOperation
IQuarkWallet.QuarkOperation memory quarkOperation;
// Local scope to avoid stack too deep
{
Expand All @@ -1538,6 +1542,7 @@ library Actions {
bytes memory scriptCalldata = abi.encodeWithSelector(RecurringSwap.swap.selector, swapConfig);

bytes32 nonce = generateNonceFromSecret(localVars.accountSecret.nonceSecret, RECURRING_SWAP_TOTAL_PLAYS);
// Construct QuarkOperation
quarkOperation = IQuarkWallet.QuarkOperation({
nonce: nonce,
isReplayable: true,
Expand Down
Loading

0 comments on commit e5e823c

Please sign in to comment.