From 3be4c4c51649520a5018525b39cd43f807a2c3c9 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 24 Feb 2026 10:19:37 -0500 Subject: [PATCH 1/6] deploy strategies v2 to mainnet --- local/setup_mainnet.sh | 61 ++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/local/setup_mainnet.sh b/local/setup_mainnet.sh index cd7fe49..43b67b8 100755 --- a/local/setup_mainnet.sh +++ b/local/setup_mainnet.sh @@ -34,9 +34,6 @@ flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governan # add WBTC to band oracle cd ./lib/FlowALP/FlowActions && flow transactions send ./cadence/transactions/band-oracle-connector/add_symbol.cdc "BTC" "A.1e4aa0b87d10b141.EVMVMBridgedToken_717dae2baf7656be9a9b01dee31d571a9d4c9579.Vault" --network mainnet --signer mainnet-band-oracle-connectors && cd ../../.. -# add WETH to band oracle -cd ./lib/FlowALP/FlowActions && flow transactions send ./cadence/transactions/band-oracle-connector/add_symbol.cdc "ETH" "A.1e4aa0b87d10b141.EVMVMBridgedToken_2f6f07cdcf3588944bf4c42ac74ff24bf56e7590.Vault" --network mainnet --signer mainnet-band-oracle-connectors && cd ../../.. - # WBTC simple curve flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_simple_interest_curve.cdc \ 'A.1e4aa0b87d10b141.EVMVMBridgedToken_717dae2baf7656be9a9b01dee31d571a9d4c9579.Vault' \ @@ -47,6 +44,16 @@ flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governan --network mainnet \ --signer mainnet-flow-alp-deployer +# set minimum deposit for WBTC ~ 0.005 USD +flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/set_minimum_token_balance_per_position.cdc \ + 'A.1e4aa0b87d10b141.EVMVMBridgedToken_717dae2baf7656be9a9b01dee31d571a9d4c9579.Vault' \ + 0.0000001 \ + --network mainnet \ + --signer mainnet-flow-alp-deployer + +# add WETH to band oracle +cd ./lib/FlowALP/FlowActions && flow transactions send ./cadence/transactions/band-oracle-connector/add_symbol.cdc "ETH" "A.1e4aa0b87d10b141.EVMVMBridgedToken_2f6f07cdcf3588944bf4c42ac74ff24bf56e7590.Vault" --network mainnet --signer mainnet-band-oracle-connectors && cd ../../.. + # WETH simple curve flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_simple_interest_curve.cdc \ 'A.1e4aa0b87d10b141.EVMVMBridgedToken_2f6f07cdcf3588944bf4c42ac74ff24bf56e7590.Vault' \ @@ -57,6 +64,35 @@ flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governan --network mainnet \ --signer mainnet-flow-alp-deployer +# set minimum deposit for WETH ~ 0.01 USD +flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/set_minimum_token_balance_per_position.cdc \ + 'A.1e4aa0b87d10b141.EVMVMBridgedToken_2f6f07cdcf3588944bf4c42ac74ff24bf56e7590.Vault' \ + 0.00001 \ + --network mainnet \ + --signer mainnet-flow-alp-deployer + +# TODO: setup PYUSD0 + +# # add PYUSD0 to band oracle +# cd ./lib/FlowALP/FlowActions && flow transactions send ./cadence/transactions/band-oracle-connector/add_symbol.cdc "PYUSD" "A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault" --network mainnet --signer mainnet-band-oracle-connectors && cd ../../.. +# +# # PYUSD0 simple curve +# flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_simple_interest_curve.cdc \ +# 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ +# 0.8 \ +# 1.0 \ +# 1_000_000.0 \ +# 1_000_000.0 \ +# --network mainnet \ +# --signer mainnet-flow-alp-deployer +# +# # set minimum deposit for PYUSD0 ~ 0.01 USD +# flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/set_minimum_token_balance_per_position.cdc \ +# 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ +# 0.01 \ +# --network mainnet \ +# --signer mainnet-flow-alp-deployer + # kink interest curve setup # enable when FCM_V1 is deployed # @@ -163,14 +199,6 @@ flow transactions send ./cadence/transactions/flow-yield-vaults/admin/upsert-pm- --network mainnet \ --signer mainnet-admin -flow transactions send ./cadence/transactions/flow-yield-vaults/admin/upsert-pm-strategy-config.cdc \ - 'A.b1d63873c3cc9f79.PMStrategiesV1.tauUSDFvStrategy' \ - 'A.1e4aa0b87d10b141.EVMVMBridgedToken_2aabea2058b5ac2d339b163c6ab6f2b6d53aabed.Vault' \ - '0xc52E820d2D6207D18667a97e2c6Ac22eB26E803c' \ - 100 \ - --network mainnet \ - --signer mainnet-admin - flow transactions send ./cadence/transactions/flow-yield-vaults/admin/upsert-pm-strategy-config.cdc \ 'A.b1d63873c3cc9f79.PMStrategiesV1.FUSDEVStrategy' \ 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ @@ -186,13 +214,6 @@ flow transactions send ./cadence/transactions/flow-yield-vaults/admin/add_strate --network mainnet \ --signer mainnet-admin -flow transactions send ./cadence/transactions/flow-yield-vaults/admin/add_strategy_composer.cdc \ - 'A.b1d63873c3cc9f79.PMStrategiesV1.tauUSDFvStrategy' \ - 'A.b1d63873c3cc9f79.PMStrategiesV1.ERC4626VaultStrategyComposer' \ - /storage/PMStrategiesV1ComposerIssuer_0xb1d63873c3cc9f79 \ - --network mainnet \ - --signer mainnet-admin - flow transactions send ./cadence/transactions/flow-yield-vaults/admin/add_strategy_composer.cdc \ 'A.b1d63873c3cc9f79.PMStrategiesV1.FUSDEVStrategy' \ 'A.b1d63873c3cc9f79.PMStrategiesV1.ERC4626VaultStrategyComposer' \ @@ -222,7 +243,8 @@ flow transactions send ./lib/FlowALP/cadence/tests/transactions/flow-alp/pool-ma # --proposer # test FlowYieldVault strategy - +# +# WFLOW (FLOW) # flow transactions send ./cadence/transactions/flow-yield-vaults/create_yield_vault.cdc \ # A.b1d63873c3cc9f79.FlowYieldVaultsStrategiesV2.FUSDEVStrategy \ # A.1654653399040a61.FlowToken.Vault \ @@ -231,7 +253,6 @@ flow transactions send ./lib/FlowALP/cadence/tests/transactions/flow-alp/pool-ma # --network mainnet \ # --signer # -# # WBTC (BTCf) # flow transactions send ./cadence/transactions/flow-yield-vaults/create_yield_vault.cdc \ # A.b1d63873c3cc9f79.FlowYieldVaultsStrategiesV2.FUSDEVStrategy \ From df6272579495db39699f3e8162c274e7a570bba0 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 24 Feb 2026 11:47:40 -0500 Subject: [PATCH 2/6] add pyusd --- cadence/contracts/mocks/MockStrategies.cdc | 2 +- .../scripts/band-oracle/get_pyusd_price.cdc | 37 +++++++++++++ .../band-oracle/get_pyusd_price.cdc | 36 +++++++++++++ local/setup_mainnet.sh | 53 +++++++++++-------- 4 files changed, 104 insertions(+), 24 deletions(-) create mode 100644 cadence/scripts/band-oracle/get_pyusd_price.cdc create mode 100644 cadence/transactions/band-oracle/get_pyusd_price.cdc diff --git a/cadence/contracts/mocks/MockStrategies.cdc b/cadence/contracts/mocks/MockStrategies.cdc index 84fbdcc..e073780 100644 --- a/cadence/contracts/mocks/MockStrategies.cdc +++ b/cadence/contracts/mocks/MockStrategies.cdc @@ -330,7 +330,7 @@ access(all) contract MockStrategies { } init() { - self.IssuerStoragePath = StoragePath(identifier: "FlowYieldVaultsStrategyComposerIssuer_\(self.account.address)")! + self.IssuerStoragePath = StoragePath(identifier: "MockStrategyComposerIssuer_\(self.account.address)")! let initialCollateralType = Type<@FlowToken.Vault>() diff --git a/cadence/scripts/band-oracle/get_pyusd_price.cdc b/cadence/scripts/band-oracle/get_pyusd_price.cdc new file mode 100644 index 0000000..a454ed3 --- /dev/null +++ b/cadence/scripts/band-oracle/get_pyusd_price.cdc @@ -0,0 +1,37 @@ +import "FungibleToken" +import "FlowToken" +import "BandOracle" + +/// Retrieves the PYUSD/USD price from the Band Protocol oracle on Flow. +/// +/// BandOracle stores rates as symbol/USD values and computes cross-rates on demand. +/// Querying PYUSD/USD returns the USD price of one PYUSD token (~1.0 for a healthy peg). +/// +/// NOTE: BandOracle.getReferenceData requires a FLOW fee payment. This script creates an +/// empty vault and succeeds only when BandOracle.getFee() == 0.0. If the fee is non-zero, +/// use the get_pyusd_price transaction instead, which withdraws from the signer's FLOW vault. +/// +/// @return A struct with: +/// - fixedPointRate: UFix64 — PYUSD/USD price as a decimal (e.g. 0.99980000) +/// - integerE18Rate: UInt256 — rate multiplied by 10^18 +/// - baseTimestamp: UInt64 — UNIX epoch of the last PYUSD data update on BandChain +/// - quoteTimestamp: UInt64 — UNIX epoch of the last USD data update on BandChain +/// +access(all) +fun main(): BandOracle.ReferenceData { + let fee = BandOracle.getFee() + assert(fee == 0.0, message: "BandOracle fee is non-zero (\(fee) FLOW). Use the get_pyusd_price transaction to pay the fee.") + + // Create an empty vault satisfying the payment parameter (fee == 0.0 is already asserted above) + let payment <- FlowToken.createEmptyVault(vaultType: Type<@FlowToken.Vault>()) + + // PYUSD is the base symbol; USD is the implicit quote for all Band oracle rates. + // The returned fixedPointRate = PYUSD price in USD. + let priceData = BandOracle.getReferenceData( + baseSymbol: "USD", + quoteSymbol: "USD", + payment: <-payment + ) + + return priceData +} diff --git a/cadence/transactions/band-oracle/get_pyusd_price.cdc b/cadence/transactions/band-oracle/get_pyusd_price.cdc new file mode 100644 index 0000000..2f0ec4b --- /dev/null +++ b/cadence/transactions/band-oracle/get_pyusd_price.cdc @@ -0,0 +1,36 @@ +import "FungibleToken" +import "FlowToken" +import "BandOracle" + +/// Retrieves the PYUSD/USD price from the Band Protocol oracle, paying the oracle fee from +/// the signer's FLOW vault. Use this transaction when BandOracle.getFee() > 0.0. +/// +/// The price is emitted to the transaction log. Band oracle rates are USD-denominated, so +/// PYUSD/USD returns the USD value of one PYUSD token (~1.0 for a healthy peg). +/// +/// Excess FLOW (payment beyond the required fee) is returned to the signer's vault. +/// +transaction { + + prepare(signer: auth(BorrowValue) &Account) { + let fee = BandOracle.getFee() + + // Borrow the signer's FLOW vault and withdraw the exact oracle fee + let flowVault = signer.storage.borrow( + from: /storage/flowTokenVault + ) ?? panic("Could not borrow signer's FlowToken vault") + + let payment <- flowVault.withdraw(amount: fee) as! @FlowToken.Vault + + let priceData = BandOracle.getReferenceData( + baseSymbol: "PYUSD", + quoteSymbol: "USD", + payment: <-payment + ) + + log("PYUSD/USD price (UFix64): ".concat(priceData.fixedPointRate.toString())) + log("PYUSD/USD rate (e18 integer): ".concat(priceData.integerE18Rate.toString())) + log("Base timestamp (UNIX): ".concat(priceData.baseTimestamp.toString())) + log("Quote timestamp (UNIX): ".concat(priceData.quoteTimestamp.toString())) + } +} diff --git a/local/setup_mainnet.sh b/local/setup_mainnet.sh index 43b67b8..261f5cc 100755 --- a/local/setup_mainnet.sh +++ b/local/setup_mainnet.sh @@ -22,7 +22,7 @@ flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-factory/ flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/update_oracle.cdc --network mainnet --signer mainnet-flow-alp-deployer # add FLOW as supported token - params: collateralFactor, borrowFactor, depositRate, depositCapacityCap -flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_simple_interest_curve.cdc \ +flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_zero_rate_curve.cdc \ 'A.1654653399040a61.FlowToken.Vault' \ 0.8 \ 1.0 \ @@ -35,7 +35,7 @@ flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governan cd ./lib/FlowALP/FlowActions && flow transactions send ./cadence/transactions/band-oracle-connector/add_symbol.cdc "BTC" "A.1e4aa0b87d10b141.EVMVMBridgedToken_717dae2baf7656be9a9b01dee31d571a9d4c9579.Vault" --network mainnet --signer mainnet-band-oracle-connectors && cd ../../.. # WBTC simple curve -flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_simple_interest_curve.cdc \ +flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_zero_rate_curve.cdc \ 'A.1e4aa0b87d10b141.EVMVMBridgedToken_717dae2baf7656be9a9b01dee31d571a9d4c9579.Vault' \ 0.8 \ 1.0 \ @@ -55,7 +55,7 @@ flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governan cd ./lib/FlowALP/FlowActions && flow transactions send ./cadence/transactions/band-oracle-connector/add_symbol.cdc "ETH" "A.1e4aa0b87d10b141.EVMVMBridgedToken_2f6f07cdcf3588944bf4c42ac74ff24bf56e7590.Vault" --network mainnet --signer mainnet-band-oracle-connectors && cd ../../.. # WETH simple curve -flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_simple_interest_curve.cdc \ +flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_zero_rate_curve.cdc \ 'A.1e4aa0b87d10b141.EVMVMBridgedToken_2f6f07cdcf3588944bf4c42ac74ff24bf56e7590.Vault' \ 0.8 \ 1.0 \ @@ -71,27 +71,25 @@ flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governan --network mainnet \ --signer mainnet-flow-alp-deployer -# TODO: setup PYUSD0 +# add PYUSD0 to band oracle +cd ./lib/FlowALP/FlowActions && flow transactions send ./cadence/transactions/band-oracle-connector/add_symbol.cdc "PYUSD" "A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault" --network mainnet --signer mainnet-band-oracle-connectors && cd ../../.. -# # add PYUSD0 to band oracle -# cd ./lib/FlowALP/FlowActions && flow transactions send ./cadence/transactions/band-oracle-connector/add_symbol.cdc "PYUSD" "A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault" --network mainnet --signer mainnet-band-oracle-connectors && cd ../../.. -# -# # PYUSD0 simple curve -# flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_simple_interest_curve.cdc \ -# 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ -# 0.8 \ -# 1.0 \ -# 1_000_000.0 \ -# 1_000_000.0 \ -# --network mainnet \ -# --signer mainnet-flow-alp-deployer -# -# # set minimum deposit for PYUSD0 ~ 0.01 USD -# flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/set_minimum_token_balance_per_position.cdc \ -# 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ -# 0.01 \ -# --network mainnet \ -# --signer mainnet-flow-alp-deployer +# PYUSD0 simple curve +flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/add_supported_token_zero_rate_curve.cdc \ + 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ + 0.8 \ + 1.0 \ + 1_000_000.0 \ + 1_000_000.0 \ + --network mainnet \ + --signer mainnet-flow-alp-deployer + +# set minimum deposit for PYUSD0 ~ 0.01 USD +flow transactions send ./lib/FlowALP/cadence/transactions/flow-alp/pool-governance/set_minimum_token_balance_per_position.cdc \ + 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ + 0.01 \ + --network mainnet \ + --signer mainnet-flow-alp-deployer # kink interest curve setup # enable when FCM_V1 is deployed @@ -182,6 +180,15 @@ flow transactions send ./cadence/transactions/flow-yield-vaults/admin/upsert_str --network mainnet \ --signer mainnet-admin # +# Setup UniV3 path FUSDEV -> PYUSD0 +flow transactions send ./cadence/transactions/flow-yield-vaults/admin/upsert_strategy_config.cdc \ + 'A.b1d63873c3cc9f79.FlowYieldVaultsStrategiesV2.FUSDEVStrategy' \ + 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ + "0xd069d989e2F44B70c65347d1853C0c67e10a9F8D" \ + '["0xd069d989e2F44B70c65347d1853C0c67e10a9F8D","0x99aF3EeA856556646C98c8B9b2548Fe815240750"]' \ + '[100]' \ + --network mainnet \ + --signer mainnet-admin flow transactions send ./cadence/transactions/flow-yield-vaults/admin/add_strategy_composer.cdc \ 'A.b1d63873c3cc9f79.FlowYieldVaultsStrategiesV2.FUSDEVStrategy' \ From aa4c0f0d1023f90a4a11b3e0779e4edbb7404d6b Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 24 Feb 2026 11:48:54 -0500 Subject: [PATCH 3/6] add pyusd test --- local/setup_mainnet.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/local/setup_mainnet.sh b/local/setup_mainnet.sh index 261f5cc..a092a62 100755 --- a/local/setup_mainnet.sh +++ b/local/setup_mainnet.sh @@ -278,6 +278,14 @@ flow transactions send ./lib/FlowALP/cadence/tests/transactions/flow-alp/pool-ma # --network mainnet \ # --signer # +# PYUSD0 +# flow transactions send ./cadence/transactions/flow-yield-vaults/create_yield_vault.cdc \ +# A.b1d63873c3cc9f79.FlowYieldVaultsStrategiesV2.FUSDEVStrategy \ +# A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault \ +# 0.01 \ +# --compute-limit 9999 \ +# --network mainnet \ +# --signer # # test PEAK MONEY strategy # From 45389a6976bc3784ad636ed8b90a852c2173c218 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 24 Feb 2026 12:37:31 -0500 Subject: [PATCH 4/6] Apply suggestion from @nialexsan --- cadence/scripts/band-oracle/get_pyusd_price.cdc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cadence/scripts/band-oracle/get_pyusd_price.cdc b/cadence/scripts/band-oracle/get_pyusd_price.cdc index a454ed3..8c74120 100644 --- a/cadence/scripts/band-oracle/get_pyusd_price.cdc +++ b/cadence/scripts/band-oracle/get_pyusd_price.cdc @@ -28,7 +28,7 @@ fun main(): BandOracle.ReferenceData { // PYUSD is the base symbol; USD is the implicit quote for all Band oracle rates. // The returned fixedPointRate = PYUSD price in USD. let priceData = BandOracle.getReferenceData( - baseSymbol: "USD", + baseSymbol: "PYUSD", quoteSymbol: "USD", payment: <-payment ) From 86d8000c4db584dbc6e68827040e961355333b22 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 24 Feb 2026 14:38:35 -0500 Subject: [PATCH 5/6] add syWFLOWv --- .../contracts/FlowYieldVaultsStrategiesV2.cdc | 90 ++++++++++++++++--- 1 file changed, 79 insertions(+), 11 deletions(-) diff --git a/cadence/contracts/FlowYieldVaultsStrategiesV2.cdc b/cadence/contracts/FlowYieldVaultsStrategiesV2.cdc index 05f6135..481132d 100644 --- a/cadence/contracts/FlowYieldVaultsStrategiesV2.cdc +++ b/cadence/contracts/FlowYieldVaultsStrategiesV2.cdc @@ -72,7 +72,7 @@ access(all) contract FlowYieldVaultsStrategiesV2 { } } - /// This strategy uses FUSDEV vault + /// This strategy uses FUSDEV vault (Morpho ERC4626) access(all) resource FUSDEVStrategy : FlowYieldVaults.Strategy, DeFiActions.IdentifiableResource { /// An optional identifier allowing protocols to identify stacked connector operations by defining a protocol- /// specific Identifier to associated connectors on construction @@ -132,6 +132,66 @@ access(all) contract FlowYieldVaultsStrategiesV2 { } } + /// This strategy uses syWFLOWv vault (Standard ERC4626) + access(all) resource syWFLOWvStrategy : FlowYieldVaults.Strategy, DeFiActions.IdentifiableResource { + /// An optional identifier allowing protocols to identify stacked connector operations by defining a protocol- + /// specific Identifier to associated connectors on construction + access(contract) var uniqueID: DeFiActions.UniqueIdentifier? + access(self) let position: @FlowALPv0.Position + access(self) var sink: {DeFiActions.Sink} + access(self) var source: {DeFiActions.Source} + + init(id: DeFiActions.UniqueIdentifier, collateralType: Type, position: @FlowALPv0.Position) { + self.uniqueID = id + self.sink = position.createSink(type: collateralType) + self.source = position.createSourceWithOptions(type: collateralType, pullFromTopUpSource: true) + self.position <-position + } + + // Inherited from FlowYieldVaults.Strategy default implementation + // access(all) view fun isSupportedCollateralType(_ type: Type): Bool + + access(all) view fun getSupportedCollateralTypes(): {Type: Bool} { + return { self.sink.getSinkType(): true } + } + /// Returns the amount available for withdrawal via the inner Source + access(all) fun availableBalance(ofToken: Type): UFix64 { + return ofToken == self.source.getSourceType() ? self.source.minimumAvailable() : 0.0 + } + /// Deposits up to the inner Sink's capacity from the provided authorized Vault reference + access(all) fun deposit(from: auth(FungibleToken.Withdraw) &{FungibleToken.Vault}) { + self.sink.depositCapacity(from: from) + } + /// Withdraws up to the max amount, returning the withdrawn Vault. If the requested token type is unsupported, + /// an empty Vault is returned. + access(FungibleToken.Withdraw) fun withdraw(maxAmount: UFix64, ofToken: Type): @{FungibleToken.Vault} { + if ofToken != self.source.getSourceType() { + return <- DeFiActionsUtils.getEmptyVault(ofToken) + } + return <- self.source.withdrawAvailable(maxAmount: maxAmount) + } + /// Executed when a Strategy is burned, cleaning up the Strategy's stored AutoBalancer + access(contract) fun burnCallback() { + FlowYieldVaultsAutoBalancers._cleanupAutoBalancer(id: self.id()!) + } + access(all) fun getComponentInfo(): DeFiActions.ComponentInfo { + return DeFiActions.ComponentInfo( + type: self.getType(), + id: self.id(), + innerComponents: [ + self.sink.getComponentInfo(), + self.source.getComponentInfo() + ] + ) + } + access(contract) view fun copyID(): DeFiActions.UniqueIdentifier? { + return self.uniqueID + } + access(contract) fun setID(_ id: DeFiActions.UniqueIdentifier?) { + self.uniqueID = id + } + } + access(all) struct TokenBundle { access(all) let moetTokenType: Type access(all) let moetTokenEVMAddress: EVM.EVMAddress @@ -179,8 +239,8 @@ access(all) contract FlowYieldVaultsStrategiesV2 { } } - /// This StrategyComposer builds a Strategy that uses MorphoERC4626 vault - access(all) resource MorphoERC4626StrategyComposer : FlowYieldVaults.StrategyComposer { + /// This StrategyComposer builds a Strategy that uses ERC4626 and MorphoERC4626 vaults + access(all) resource ERC4626StrategyComposer : FlowYieldVaults.StrategyComposer { /// { Strategy Type: { Collateral Type: FlowYieldVaultsStrategiesV2.CollateralConfig } } access(self) let config: {Type: {Type: FlowYieldVaultsStrategiesV2.CollateralConfig}} @@ -311,6 +371,12 @@ access(all) contract FlowYieldVaultsStrategiesV2 { collateralType: collateralType, position: <-position ) + case Type<@syWFLOWvStrategy>(): + return <-create syWFLOWvStrategy( + id: uniqueID, + collateralType: collateralType, + position: <-position + ) default: panic("Unsupported strategy type \(type.identifier)") } @@ -646,12 +712,12 @@ access(all) contract FlowYieldVaultsStrategiesV2 { access(all) view fun getSupportedComposers(): {Type: Bool} { return { - Type<@MorphoERC4626StrategyComposer>(): true + Type<@ERC4626StrategyComposer>(): true } } access(self) view fun isSupportedComposer(_ type: Type): Bool { - return type == Type<@MorphoERC4626StrategyComposer>() + return type == Type<@ERC4626StrategyComposer>() } access(all) fun issueComposer(_ type: Type): @{FlowYieldVaults.StrategyComposer} { pre { @@ -661,8 +727,8 @@ access(all) contract FlowYieldVaultsStrategiesV2 { "Could not find config for StrategyComposer \(type.identifier)" } switch type { - case Type<@MorphoERC4626StrategyComposer>(): - return <- create MorphoERC4626StrategyComposer(self.configs[type]!) + case Type<@ERC4626StrategyComposer>(): + return <- create ERC4626StrategyComposer(self.configs[type]!) default: panic("Unsupported StrategyComposer \(type.identifier) requested") } @@ -741,8 +807,9 @@ access(all) contract FlowYieldVaultsStrategiesV2 { } access(Configure) fun purgeConfig() { self.configs = { - Type<@MorphoERC4626StrategyComposer>(): { - Type<@FUSDEVStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig} + Type<@ERC4626StrategyComposer>(): { + Type<@FUSDEVStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig}, + Type<@syWFLOWvStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig} } } } @@ -827,8 +894,9 @@ access(all) contract FlowYieldVaultsStrategiesV2 { } let configs = { - Type<@MorphoERC4626StrategyComposer>(): { - Type<@FUSDEVStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig} + Type<@ERC4626StrategyComposer>(): { + Type<@FUSDEVStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig}, + Type<@syWFLOWvStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig} } } self.account.storage.save(<-create StrategyComposerIssuer(configs: configs), to: self.IssuerStoragePath) From 251ca86d37d4cf77ace4aeb1364383528089bc29 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Wed, 25 Feb 2026 23:06:02 -0500 Subject: [PATCH 6/6] revert renaming --- cadence/contracts/FlowYieldVaultsStrategiesV2.cdc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cadence/contracts/FlowYieldVaultsStrategiesV2.cdc b/cadence/contracts/FlowYieldVaultsStrategiesV2.cdc index 481132d..f763672 100644 --- a/cadence/contracts/FlowYieldVaultsStrategiesV2.cdc +++ b/cadence/contracts/FlowYieldVaultsStrategiesV2.cdc @@ -240,7 +240,7 @@ access(all) contract FlowYieldVaultsStrategiesV2 { } /// This StrategyComposer builds a Strategy that uses ERC4626 and MorphoERC4626 vaults - access(all) resource ERC4626StrategyComposer : FlowYieldVaults.StrategyComposer { + access(all) resource MorphoERC4626StrategyComposer : FlowYieldVaults.StrategyComposer { /// { Strategy Type: { Collateral Type: FlowYieldVaultsStrategiesV2.CollateralConfig } } access(self) let config: {Type: {Type: FlowYieldVaultsStrategiesV2.CollateralConfig}} @@ -712,12 +712,12 @@ access(all) contract FlowYieldVaultsStrategiesV2 { access(all) view fun getSupportedComposers(): {Type: Bool} { return { - Type<@ERC4626StrategyComposer>(): true + Type<@MorphoERC4626StrategyComposer>(): true } } access(self) view fun isSupportedComposer(_ type: Type): Bool { - return type == Type<@ERC4626StrategyComposer>() + return type == Type<@MorphoERC4626StrategyComposer>() } access(all) fun issueComposer(_ type: Type): @{FlowYieldVaults.StrategyComposer} { pre { @@ -727,8 +727,8 @@ access(all) contract FlowYieldVaultsStrategiesV2 { "Could not find config for StrategyComposer \(type.identifier)" } switch type { - case Type<@ERC4626StrategyComposer>(): - return <- create ERC4626StrategyComposer(self.configs[type]!) + case Type<@MorphoERC4626StrategyComposer>(): + return <- create MorphoERC4626StrategyComposer(self.configs[type]!) default: panic("Unsupported StrategyComposer \(type.identifier) requested") } @@ -807,7 +807,7 @@ access(all) contract FlowYieldVaultsStrategiesV2 { } access(Configure) fun purgeConfig() { self.configs = { - Type<@ERC4626StrategyComposer>(): { + Type<@MorphoERC4626StrategyComposer>(): { Type<@FUSDEVStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig}, Type<@syWFLOWvStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig} } @@ -894,7 +894,7 @@ access(all) contract FlowYieldVaultsStrategiesV2 { } let configs = { - Type<@ERC4626StrategyComposer>(): { + Type<@MorphoERC4626StrategyComposer>(): { Type<@FUSDEVStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig}, Type<@syWFLOWvStrategy>(): {} as {Type: FlowYieldVaultsStrategiesV2.CollateralConfig} }