diff --git a/src/builder/Accounts.sol b/src/builder/Accounts.sol index e7cc2a6..90b828f 100644 --- a/src/builder/Accounts.sol +++ b/src/builder/Accounts.sol @@ -14,7 +14,7 @@ library Accounts { AssetPositions[] assetPositionsList; CometPositions[] cometPositions; MorphoPositions[] morphoPositions; - MorphoVaultPosition[] morphoVaultPositions; + MorphoVaultPositions[] morphoVaultPositions; } // We map this to the Portfolio data structure that the client will already have. diff --git a/src/builder/Actions.sol b/src/builder/Actions.sol index 0a88e01..f3465f6 100644 --- a/src/builder/Actions.sol +++ b/src/builder/Actions.sol @@ -369,7 +369,7 @@ library Actions { uint256 price; address token; } - + struct MorphoVaultWithdrawContext { uint256 amount; string assetSymbol; @@ -1104,11 +1104,11 @@ library Actions { return (quarkOperation, action); } - function morphoVaultWithdraw( - MorphoVaultWithdraw memory vaultWithdraw, - PaymentInfo.Payment memory payment, - bool withdrawMax - ) internal pure returns (IQuarkWallet.QuarkOperation memory, Action memory) { + function morphoVaultWithdraw(MorphoVaultWithdraw memory vaultWithdraw, PaymentInfo.Payment memory payment) + internal + pure + returns (IQuarkWallet.QuarkOperation memory, Action memory) + { bytes[] memory scriptSources = new bytes[](1); scriptSources[0] = type(MorphoVaultActions).creationCode; @@ -1121,19 +1121,11 @@ library Actions { Accounts.QuarkState memory accountState = Accounts.findQuarkState(vaultWithdraw.withdrawer, accounts.quarkStates); - bytes memory scriptCalldata; - if (withdrawMax) { - scriptCalldata = abi.encodeWithSelector( - MorphoVaultActions.redeemAll.selector, - MorphoInfo.getMorphoVaultAddress(vaultWithdraw.chainId, vaultWithdraw.assetSymbol) - ); - } else { - scriptCalldata = abi.encodeWithSelector( - MorphoVaultActions.withdraw.selector, - MorphoInfo.getMorphoVaultAddress(vaultWithdraw.chainId, vaultWithdraw.assetSymbol), - vaultWithdraw.amount - ); - } + bytes memory scriptCalldata = abi.encodeWithSelector( + MorphoVaultActions.withdraw.selector, + MorphoInfo.getMorphoVaultAddress(vaultWithdraw.chainId, vaultWithdraw.assetSymbol), + vaultWithdraw.amount + ); // Construct QuarkOperation IQuarkWallet.QuarkOperation memory quarkOperation = IQuarkWallet.QuarkOperation({ diff --git a/src/builder/QuarkBuilder.sol b/src/builder/QuarkBuilder.sol index f440a59..140a22a 100644 --- a/src/builder/QuarkBuilder.sol +++ b/src/builder/QuarkBuilder.sol @@ -1501,8 +1501,7 @@ contract QuarkBuilder { chainId: withdrawIntent.chainId, withdrawer: withdrawIntent.withdrawer }), - payment, - isMaxWithdraw + payment ); List.addAction(actions, cometWithdrawAction); List.addQuarkOperation(quarkOperations, cometWithdrawQuarkOperation); diff --git a/test/builder/QuarkBuilderCometSupply.t.sol b/test/builder/QuarkBuilderCometSupply.t.sol index 36cd84d..8535da5 100644 --- a/test/builder/QuarkBuilderCometSupply.t.sol +++ b/test/builder/QuarkBuilderCometSupply.t.sol @@ -160,8 +160,8 @@ contract QuarkBuilderCometSupplyTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), uint256(3e6)), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); QuarkBuilder.BuilderResult memory result = builder.cometSupply( @@ -265,8 +265,8 @@ contract QuarkBuilderCometSupplyTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList, cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); QuarkBuilder.BuilderResult memory result = diff --git a/test/builder/QuarkBuilderCometWithdraw.t.sol b/test/builder/QuarkBuilderCometWithdraw.t.sol index 0101ac6..35857eb 100644 --- a/test/builder/QuarkBuilderCometWithdraw.t.sol +++ b/test/builder/QuarkBuilderCometWithdraw.t.sol @@ -259,16 +259,16 @@ contract QuarkBuilderCometWithdrawTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), 3e6), // 3 USDC on mainnet cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[1] = Accounts.ChainAccounts({ chainId: 8453, quarkStates: quarkStates_(address(0xb0b), 2), assetPositionsList: assetPositionsList_(8453, address(0xb0b), 0), // 0 USDC on base cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); QuarkBuilder.BuilderResult memory result = builder.cometWithdraw( diff --git a/test/builder/QuarkBuilderMorphoRepay.t.sol b/test/builder/QuarkBuilderMorphoRepay.t.sol index 8577b2e..ea1ed93 100644 --- a/test/builder/QuarkBuilderMorphoRepay.t.sol +++ b/test/builder/QuarkBuilderMorphoRepay.t.sol @@ -603,7 +603,7 @@ contract QuarkBuilderMorphoRepayTest is Test, QuarkBuilderTest { nextNonce: 12, assetSymbols: Arrays.stringArray("USDC", "USDT", "WBTC", "WETH"), assetBalances: Arrays.uintArray(20e6, 0, 0, 0), // has 20 USDC - cometPortfolios: emptyCometPortfolios_(), + cometPortfolios: emptyCometPortfolios_(), morphoPortfolios: morphoPortfolios, morphoVaultPortfolios: emptyMorphoVaultPortfolios_() }); diff --git a/test/builder/QuarkBuilderMorphoVaultSupply.t.sol b/test/builder/QuarkBuilderMorphoVaultSupply.t.sol index 1cb76e2..73d0064 100644 --- a/test/builder/QuarkBuilderMorphoVaultSupply.t.sol +++ b/test/builder/QuarkBuilderMorphoVaultSupply.t.sol @@ -12,7 +12,7 @@ import {CodeJarHelper} from "src/builder/CodeJarHelper.sol"; import {CometSupplyActions, TransferActions} from "src/DeFiScripts.sol"; import {Paycall} from "src/Paycall.sol"; import {MorphoInfo} from "src/builder/MorphoInfo.sol"; -import {MorphoVaultActions} from "src/defi_integrations/MorphoScripts.sol"; +import {MorphoVaultActions} from "src/MorphoScripts.sol"; import {Multicall} from "src/Multicall.sol"; import {Quotecall} from "src/Quotecall.sol"; import {QuarkBuilder} from "src/builder/QuarkBuilder.sol"; @@ -74,7 +74,7 @@ contract QuarkBuilderMorphoVaultTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), 0e6), cometPositions: emptyCometPositions_(), - morphoBluePositions: emptyMorphoBluePositions_(), + morphoPositions: emptyMorphoPositions_(), morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[1] = Accounts.ChainAccounts({ @@ -82,7 +82,7 @@ contract QuarkBuilderMorphoVaultTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xb0b), 2), assetPositionsList: assetPositionsList_(8453, address(0xb0b), 0e6), cometPositions: emptyCometPositions_(), - morphoBluePositions: emptyMorphoBluePositions_(), + morphoPositions: emptyMorphoPositions_(), morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[2] = Accounts.ChainAccounts({ @@ -90,7 +90,7 @@ contract QuarkBuilderMorphoVaultTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xc0b), 5), assetPositionsList: assetPositionsList_(7777, address(0xc0b), 100e6), cometPositions: emptyCometPositions_(), - morphoBluePositions: emptyMorphoBluePositions_(), + morphoPositions: emptyMorphoPositions_(), morphoVaultPositions: emptyMorphoVaultPositions_() }); vm.expectRevert(abi.encodeWithSelector(QuarkBuilder.FundsUnavailable.selector, "USDC", 2e6, 0)); @@ -192,7 +192,7 @@ contract QuarkBuilderMorphoVaultTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), uint256(3e6)), cometPositions: emptyCometPositions_(), - morphoBluePositions: emptyMorphoBluePositions_(), + morphoPositions: emptyMorphoPositions_(), morphoVaultPositions: emptyMorphoVaultPositions_() }); @@ -301,7 +301,7 @@ contract QuarkBuilderMorphoVaultTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList, cometPositions: emptyCometPositions_(), - morphoBluePositions: emptyMorphoBluePositions_(), + morphoPositions: emptyMorphoPositions_(), morphoVaultPositions: emptyMorphoVaultPositions_() }); diff --git a/test/builder/QuarkBuilderMorphoVaultWithdraw.t.sol b/test/builder/QuarkBuilderMorphoVaultWithdraw.t.sol index 3566a46..bc575be 100644 --- a/test/builder/QuarkBuilderMorphoVaultWithdraw.t.sol +++ b/test/builder/QuarkBuilderMorphoVaultWithdraw.t.sol @@ -10,7 +10,7 @@ import {CCTPBridgeActions} from "src/BridgeScripts.sol"; import {CodeJarHelper} from "src/builder/CodeJarHelper.sol"; import {CometWithdrawActions, TransferActions} from "src/DeFiScripts.sol"; import {MorphoInfo} from "src/builder/MorphoInfo.sol"; -import {MorphoVaultActions} from "src/defi_integrations/MorphoScripts.sol"; +import {MorphoVaultActions} from "src/MorphoScripts.sol"; import {Paycall} from "src/Paycall.sol"; import {QuarkBuilder} from "src/builder/QuarkBuilder.sol"; @@ -257,7 +257,7 @@ contract QuarkBuilderMorphoVaultWithdrawTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), 3e6), // 3 USDC on mainnet cometPositions: emptyCometPositions_(), - morphoBluePositions: emptyMorphoBluePositions_(), + morphoPositions: emptyMorphoPositions_(), morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[1] = Accounts.ChainAccounts({ @@ -265,7 +265,7 @@ contract QuarkBuilderMorphoVaultWithdrawTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xb0b), 2), assetPositionsList: assetPositionsList_(8453, address(0xb0b), 0), // 0 USDC on base cometPositions: emptyCometPositions_(), - morphoBluePositions: emptyMorphoBluePositions_(), + morphoPositions: emptyMorphoPositions_(), morphoVaultPositions: emptyMorphoVaultPositions_() }); @@ -400,7 +400,7 @@ contract QuarkBuilderMorphoVaultWithdrawTest is Test, QuarkBuilderTest { assetSymbols: Arrays.stringArray("USDC", "USDT", "LINK", "WETH"), assetBalances: Arrays.uintArray(0, 0, 0, 0), cometPortfolios: emptyCometPortfolios_(), - morphoBluePortfolios: emptyMorphoBluePortfolios_(), + morphoPortfolios: emptyMorphoPortfolios_(), morphoVaultPortfolios: morphoVaultPortfolios }); @@ -429,7 +429,7 @@ contract QuarkBuilderMorphoVaultWithdrawTest is Test, QuarkBuilderTest { Paycall.run.selector, morphoVaultActionsAddress, abi.encodeWithSelector( - MorphoVaultActions.redeemAll.selector, MorphoInfo.getMorphoVaultAddress(1, "USDC") + MorphoVaultActions.withdraw.selector, MorphoInfo.getMorphoVaultAddress(1, "USDC"), type(uint256).max ), 0.1e6 ), @@ -487,7 +487,7 @@ contract QuarkBuilderMorphoVaultWithdrawTest is Test, QuarkBuilderTest { assetSymbols: Arrays.stringArray("USDC", "USDT", "LINK", "WETH"), assetBalances: Arrays.uintArray(0, 0, 0, 0), cometPortfolios: emptyCometPortfolios_(), - morphoBluePortfolios: emptyMorphoBluePortfolios_(), + morphoPortfolios: emptyMorphoPortfolios_(), morphoVaultPortfolios: morphoVaultPortfolios }); diff --git a/test/builder/QuarkBuilderSwap.t.sol b/test/builder/QuarkBuilderSwap.t.sol index 9476105..fe8f072 100644 --- a/test/builder/QuarkBuilderSwap.t.sol +++ b/test/builder/QuarkBuilderSwap.t.sol @@ -249,8 +249,8 @@ contract QuarkBuilderSwapTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList, cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); QuarkBuilder.BuilderResult memory result = builder.swap( buyUsdc_(1, weth_(1), 1e18, 3000e6, address(0xa11ce), BLOCK_TIMESTAMP), // swap 1 ETH on chain 1 to 3000 USDC @@ -408,24 +408,24 @@ contract QuarkBuilderSwapTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), uint256(9005e6)), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[1] = Accounts.ChainAccounts({ chainId: 8453, quarkStates: quarkStates_(address(0xb0b), 2), assetPositionsList: assetPositionsList_(8453, address(0xb0b), uint256(0)), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[2] = Accounts.ChainAccounts({ chainId: 7777, quarkStates: quarkStates_(address(0xc0b), 5), assetPositionsList: assetPositionsList_(7777, address(0xc0b), uint256(0)), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); QuarkBuilder.BuilderResult memory result = builder.swap( diff --git a/test/builder/QuarkBuilderTransfer.t.sol b/test/builder/QuarkBuilderTransfer.t.sol index ddc7ba8..c6b63c4 100644 --- a/test/builder/QuarkBuilderTransfer.t.sol +++ b/test/builder/QuarkBuilderTransfer.t.sol @@ -610,8 +610,8 @@ contract QuarkBuilderTransferTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), uint256(10e6)), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); QuarkBuilder.BuilderResult memory result = builder.transfer( @@ -688,16 +688,16 @@ contract QuarkBuilderTransferTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), 8e6), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[1] = Accounts.ChainAccounts({ chainId: 8453, quarkStates: quarkStates_(address(0xb0b), 2), assetPositionsList: assetPositionsList_(8453, address(0xb0b), 4e6), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); QuarkBuilder.BuilderResult memory result = builder.transfer( @@ -827,24 +827,24 @@ contract QuarkBuilderTransferTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList_(1, address(0xa11ce), 8e6), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[1] = Accounts.ChainAccounts({ chainId: 8453, quarkStates: quarkStates_(address(0xb0b), 2), assetPositionsList: assetPositionsList_(8453, address(0xb0b), 4e6), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); chainAccountsList[2] = Accounts.ChainAccounts({ chainId: 7777, quarkStates: quarkStates_(address(0xfe11a), 2), assetPositionsList: assetPositionsList_(7777, address(0xfe11a), 5e6), cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); // User has total holding of 17 USDC, but only 12 USDC is available for transfer/bridge to 8453, and missing 5 USDC stuck in random L2 so will revert with FundsUnavailable error @@ -932,8 +932,8 @@ contract QuarkBuilderTransferTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList, cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); // Transfer 1.5ETH to 0xceecee on chain 1 @@ -1035,8 +1035,8 @@ contract QuarkBuilderTransferTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList, cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); // Transfer 1.5ETH to 0xceecee on chain 1 @@ -1146,8 +1146,8 @@ contract QuarkBuilderTransferTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList, cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); // Transfer max ETH to 0xceecee on chain 1 @@ -1258,8 +1258,8 @@ contract QuarkBuilderTransferTest is Test, QuarkBuilderTest { quarkStates: quarkStates_(address(0xa11ce), 12), assetPositionsList: assetPositionsList, cometPositions: emptyCometPositions_(), - morphoPortfolios: emptyMorphoPortfolios_(), - morphoVaultPortfolios: emptyMorphoVaultPortfolios_() + morphoPositions: emptyMorphoPositions_(), + morphoVaultPositions: emptyMorphoVaultPositions_() }); // Transfer 1.5ETH to 0xceecee on chain 1 diff --git a/test/builder/lib/QuarkBuilderTest.sol b/test/builder/lib/QuarkBuilderTest.sol index 6ed9b59..cc3c909 100644 --- a/test/builder/lib/QuarkBuilderTest.sol +++ b/test/builder/lib/QuarkBuilderTest.sol @@ -368,7 +368,8 @@ contract QuarkBuilderTest { chainPortfolios[i].chainId, chainPortfolios[i].account, chainPortfolios[i].cometPortfolios ), morphoPositions: morphoPositionsForMorphoPortfolios( - chainPortfolios[i].chainId, chainPortfolios[i].account, chainPortfolios[i].morphoPortfolios, + chainPortfolios[i].chainId, chainPortfolios[i].account, chainPortfolios[i].morphoPortfolios + ), morphoVaultPositions: morphoVaultPositionsForMorphoVaultPortfolios( chainPortfolios[i].chainId, chainPortfolios[i].account, chainPortfolios[i].morphoVaultPortfolios )