Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 68 additions & 1 deletion cadence/contracts/PMStrategiesV1.cdc
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,72 @@ access(all) contract PMStrategiesV1 {
}
}

/// StrategyComposer for ERC4626 vault strategies (e.g., syWFLOWvStrategy, tauUSDFvStrategy).
/// 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
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}}}
Expand Down Expand Up @@ -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)")
}
Expand Down
19 changes: 18 additions & 1 deletion flow.json
Original file line number Diff line number Diff line change
Expand Up @@ -1053,8 +1053,25 @@
"type": "Array"
}
]
},
{
"name": "PMStrategiesV1",
"args": [
{
"value": "0x92657b195e22b69E4779BBD09Fa3CD46F0CF8e39",
"type": "String"
},
{
"value": "0x2Db6468229F6fB1a77d248Dbb1c386760C257804",
"type": "String"
},
{
"value": "0xA1e0E4CCACA34a738f03cFB1EAbAb16331FA3E2c",
"type": "String"
}
]
}
]
}
}
}
}
27 changes: 27 additions & 0 deletions local/setup_mainnet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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' \
Expand All @@ -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 \
Expand Down Expand Up @@ -129,10 +144,22 @@ 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 \
# 1.0 \
# --signer <TEST_USER> \
# --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 <TEST_USER>
#
25 changes: 25 additions & 0 deletions local/setup_testnet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -94,3 +109,13 @@ flow transactions send ./lib/flow-evm-bridge/cadence/transactions/flow-token/tra
# --signer <TEST_USER> \
# --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 <TEST_USER>
#
Loading