From 0e51ef5d2800549a8b9349fb054fbb86ebcb8980 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Thu, 8 Jan 2026 20:57:21 -0500 Subject: [PATCH 1/4] add pyusd FUSDEV strategy --- cadence/contracts/PMStrategiesV1.cdc | 69 +++++++++++++++++++++++++++- local/setup_mainnet.sh | 15 ++++++ 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/cadence/contracts/PMStrategiesV1.cdc b/cadence/contracts/PMStrategiesV1.cdc index 134a9a63..ebdaeade 100644 --- a/cadence/contracts/PMStrategiesV1.cdc +++ b/cadence/contracts/PMStrategiesV1.cdc @@ -171,7 +171,72 @@ access(all) contract PMStrategiesV1 { } } - /// StrategyComposer for ERC4626 vault strategies (e.g., syWFLOWvStrategy, tauUSDFvStrategy). + /// This strategy uses tauUSDF vaults (Tau Labs USDF Vault) + 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 + access(contract) var uniqueID: DeFiActions.UniqueIdentifier? + + /// User-facing deposit connector + access(self) var sink: {DeFiActions.Sink} + /// User-facing withdrawal connector + access(self) var source: {DeFiActions.Source} + + init( + id: DeFiActions.UniqueIdentifier, + sink: {DeFiActions.Sink}, + source: {DeFiActions.Source} + ) { + self.uniqueID = id + self.sink = sink + self.source = source + } + + // 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 + } + } + + /// StrategyComposer for ERC4626 vault strategies (e.g., syWFLOWvStrategy, tauUSDFvStrategy, FUSDEVStrategy). access(all) resource ERC4626VaultStrategyComposer : FlowYieldVaults.StrategyComposer { /// { Strategy Type: { Collateral Type: { String: AnyStruct } } } access(self) let config: {Type: {Type: {String: AnyStruct}}} @@ -329,6 +394,8 @@ access(all) contract PMStrategiesV1 { return <-create syWFLOWvStrategy(id: uniqueID, sink: abaSwapSink, source: abaSwapSource) case Type<@tauUSDFvStrategy>(): return <-create tauUSDFvStrategy(id: uniqueID, sink: abaSwapSink, source: abaSwapSource) + case Type<@FUSDEVStrategy>(): + return <-create FUSDEVStrategy(id: uniqueID, sink: abaSwapSink, source: abaSwapSource) default: panic("Unsupported strategy type \(type.identifier)") } diff --git a/local/setup_mainnet.sh b/local/setup_mainnet.sh index 425d3390..7cfd9466 100755 --- a/local/setup_mainnet.sh +++ b/local/setup_mainnet.sh @@ -82,6 +82,14 @@ 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.FUSDEVStrategy' \ + 'A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault' \ + '0xd069d989e2F44B70c65347d1853C0c67e10a9F8D' \ + 100 \ + --network mainnet \ + --signer mainnet-admin + flow transactions send ./cadence/transactions/flow-yield-vaults/admin/add_strategy_composer.cdc \ 'A.b1d63873c3cc9f79.PMStrategiesV1.syWFLOWvStrategy' \ 'A.b1d63873c3cc9f79.PMStrategiesV1.ERC4626VaultStrategyComposer' \ @@ -96,6 +104,13 @@ 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.FUSDEVStrategy' \ + 'A.b1d63873c3cc9f79.PMStrategiesV1.ERC4626VaultStrategyComposer' \ + /storage/PMStrategiesV1ComposerIssuer_0xb1d63873c3cc9f79 \ + --network mainnet \ + --signer mainnet-admin + # grant PoolBeta cap echo "Grant Protocol Beta access to FlowYieldVaults" flow transactions send ./lib/FlowCreditMarket/cadence/tests/transactions/flow-credit-market/pool-management/03_grant_beta.cdc \ From 906a4fd0db642123cf3892a02c4f97a33d9e6c60 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Thu, 8 Jan 2026 21:28:28 -0500 Subject: [PATCH 2/4] testnet changes --- cadence/contracts/PMStrategiesV1.cdc | 2 +- local/setup_testnet.sh | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/cadence/contracts/PMStrategiesV1.cdc b/cadence/contracts/PMStrategiesV1.cdc index ebdaeade..ba0ff9e9 100644 --- a/cadence/contracts/PMStrategiesV1.cdc +++ b/cadence/contracts/PMStrategiesV1.cdc @@ -171,7 +171,7 @@ access(all) contract PMStrategiesV1 { } } - /// This strategy uses tauUSDF vaults (Tau Labs USDF Vault) + /// This strategy uses FUSDEV vaults (Flow USD Expeditionary Vault) 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 diff --git a/local/setup_testnet.sh b/local/setup_testnet.sh index bcc73ca4..1e272583 100755 --- a/local/setup_testnet.sh +++ b/local/setup_testnet.sh @@ -69,6 +69,21 @@ flow transactions send ./cadence/transactions/flow-yield-vaults/admin/add_strate --network testnet \ --signer testnet-admin +# PYUSD0 Vault +flow transactions send ./cadence/transactions/flow-yield-vaults/admin/upsert-pm-strategy-config.cdc \ + 'A.d2580caf2ef07c2f.PMStrategiesV1.FUSDEVStrategy' \ + 'A.dfc20aee650fcbdf.EVMVMBridgedToken_d7d43ab7b365f0d0789ae83f4385fa710ffdc98f.Vault' \ + '0x61b44D19486EE492449E83C1201581C754e9e1E1' \ + 100 \ + --network testnet \ + --signer testnet-admin + +flow transactions send ./cadence/transactions/flow-yield-vaults/admin/add_strategy_composer.cdc \ + 'A.d2580caf2ef07c2f.PMStrategiesV1.FUSDEVStrategy' \ + 'A.d2580caf2ef07c2f.PMStrategiesV1.ERC4626VaultStrategyComposer' \ + /storage/PMStrategiesV1ComposerIssuer_0xd2580caf2ef07c2f \ + --network testnet \ + --signer testnet-admin # grant PoolBeta cap echo "Grant Protocol Beta access to FlowYieldVaults" From 5463b7c3545161d2c56f9a46b018759c10ecf895 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Fri, 9 Jan 2026 19:45:53 -0500 Subject: [PATCH 3/4] test pyusd testnet --- flow.json | 19 ++++++++++++++++++- local/setup_testnet.sh | 10 ++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/flow.json b/flow.json index 56cbc82b..255bae1a 100644 --- a/flow.json +++ b/flow.json @@ -1053,8 +1053,25 @@ "type": "Array" } ] + }, + { + "name": "PMStrategiesV1", + "args": [ + { + "value": "0x92657b195e22b69E4779BBD09Fa3CD46F0CF8e39", + "type": "String" + }, + { + "value": "0x2Db6468229F6fB1a77d248Dbb1c386760C257804", + "type": "String" + }, + { + "value": "0xA1e0E4CCACA34a738f03cFB1EAbAb16331FA3E2c", + "type": "String" + } + ] } ] } } -} \ No newline at end of file +} diff --git a/local/setup_testnet.sh b/local/setup_testnet.sh index 1e272583..fb369f8c 100755 --- a/local/setup_testnet.sh +++ b/local/setup_testnet.sh @@ -109,3 +109,13 @@ flow transactions send ./lib/flow-evm-bridge/cadence/transactions/flow-token/tra # --signer \ # --compute-limit 9999 \ # --network testnet +# +# PYUSD0 +# flow transactions send ./cadence/transactions/flow-yield-vaults/create_yield_vault.cdc \ +# A.d2580caf2ef07c2f.PMStrategiesV1.FUSDEVStrategy \ +# A.dfc20aee650fcbdf.EVMVMBridgedToken_d7d43ab7b365f0d0789ae83f4385fa710ffdc98f.Vault \ +# 100.0 \ +# --compute-limit 9999 \ +# --network testnet \ +# --signer +# From 45ce71dd8511aec641924dbd51808e5140069aad Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Fri, 9 Jan 2026 19:56:43 -0500 Subject: [PATCH 4/4] add testing script --- local/setup_mainnet.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/local/setup_mainnet.sh b/local/setup_mainnet.sh index 7cfd9466..9619f918 100755 --- a/local/setup_mainnet.sh +++ b/local/setup_mainnet.sh @@ -144,6 +144,8 @@ flow transactions send ./lib/FlowCreditMarket/cadence/tests/transactions/flow-cr # # test PEAK MONEY strategy +# +# WFLOW # flow transactions send ./cadence/transactions/flow-yield-vaults/create_yield_vault.cdc \ # A.b1d63873c3cc9f79.PMStrategiesV1.syWFLOWvStrategy \ # A.1654653399040a61.FlowToken.Vault \ @@ -151,3 +153,13 @@ flow transactions send ./lib/FlowCreditMarket/cadence/tests/transactions/flow-cr # --signer \ # --compute-limit 9999 \ # --network mainnet +# +# PYUSD0 +# flow transactions send ./cadence/transactions/flow-yield-vaults/create_yield_vault.cdc \ +# A.b1d63873c3cc9f79.PMStrategiesV1.FUSDEVStrategy \ +# A.1e4aa0b87d10b141.EVMVMBridgedToken_99af3eea856556646c98c8b9b2548fe815240750.Vault \ +# 1.0 \ +# --compute-limit 9999 \ +# --network mainnet \ +# --signer +#