From 75d14206dd7daa53e9f5abc6de9ef360e1551bf4 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Fri, 6 Feb 2026 17:32:41 -0500 Subject: [PATCH 1/8] update FCM ref --- lib/FlowCreditMarket | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/FlowCreditMarket b/lib/FlowCreditMarket index 5da5a4f..8163518 160000 --- a/lib/FlowCreditMarket +++ b/lib/FlowCreditMarket @@ -1 +1 @@ -Subproject commit 5da5a4f4f6e2a45130566b79da9d2c9f3a955937 +Subproject commit 816351826a9deb86033469d8dea9cc847104ecbd From 33f9f64341be3e352fb9ca354cac1d6aaf401b61 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Mon, 9 Feb 2026 16:42:16 -0500 Subject: [PATCH 2/8] fix tests --- .../contracts/FlowYieldVaultsStrategies.cdc | 24 +++++++++---------- .../FlowYieldVaultsStrategiesV1_1.cdc | 16 ++++++------- cadence/contracts/mocks/MockSwapper.cdc | 10 ++++---- cadence/tests/atomic_registration_gc_test.cdc | 5 ++-- cadence/tests/rebalance_scenario1_test.cdc | 5 ++-- cadence/tests/rebalance_scenario2_test.cdc | 5 ++-- cadence/tests/rebalance_scenario3a_test.cdc | 5 ++-- cadence/tests/rebalance_scenario3b_test.cdc | 5 ++-- cadence/tests/rebalance_scenario3c_test.cdc | 5 ++-- cadence/tests/rebalance_scenario3d_test.cdc | 5 ++-- cadence/tests/rebalance_yield_test.cdc | 5 ++-- .../scheduled_rebalance_integration_test.cdc | 5 ++-- .../scheduled_rebalance_scenario_test.cdc | 5 ++-- cadence/tests/scheduled_supervisor_test.cdc | 5 ++-- cadence/tests/scheduler_edge_cases_test.cdc | 5 ++-- cadence/tests/test_helpers.cdc | 24 +++++++++++++++---- cadence/tests/tracer_strategy_test.cdc | 5 ++-- cadence/tests/yield_vault_lifecycle_test.cdc | 5 ++-- flow.json | 8 +++---- 19 files changed, 89 insertions(+), 63 deletions(-) diff --git a/cadence/contracts/FlowYieldVaultsStrategies.cdc b/cadence/contracts/FlowYieldVaultsStrategies.cdc index f585956..d7f7f46 100644 --- a/cadence/contracts/FlowYieldVaultsStrategies.cdc +++ b/cadence/contracts/FlowYieldVaultsStrategies.cdc @@ -57,7 +57,7 @@ access(all) contract FlowYieldVaultsStrategies { /// Canonical StoragePath where the StrategyComposerIssuer should be stored access(all) let IssuerStoragePath: StoragePath - /// This is the first Strategy implementation, wrapping a FlowCreditMarket Position along with its related Sink & + /// This is the first Strategy implementation, wrapping a @FlowCreditMarket.Position along with its related Sink & /// Source. While this object is a simple wrapper for the top-level collateralized position, the true magic of the /// DeFiActions is in the stacking of the related connectors. This stacking logic can be found in the /// TracerStrategyComposer construct. @@ -65,15 +65,15 @@ access(all) contract FlowYieldVaultsStrategies { /// 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: FlowCreditMarket.Position + access(self) let position: @FlowCreditMarket.Position access(self) var sink: {DeFiActions.Sink} access(self) var source: {DeFiActions.Source} - init(id: DeFiActions.UniqueIdentifier, collateralType: Type, position: FlowCreditMarket.Position) { + init(id: DeFiActions.UniqueIdentifier, collateralType: Type, position: @FlowCreditMarket.Position) { self.uniqueID = id - self.position = position self.sink = position.createSink(type: collateralType) self.source = position.createSourceWithOptions(type: collateralType, pullFromTopUpSource: true) + self.position <-position } // Inherited from FlowYieldVaults.Strategy default implementation @@ -200,13 +200,12 @@ access(all) contract FlowYieldVaultsStrategies { let poolRef = poolCap.borrow() ?? panic("Invalid Pool Cap") - let pid = poolRef.createPosition( + let position <- poolRef.createPosition( funds: <-withFunds, issuanceSink: abaSwapSink, repaymentSource: abaSwapSource, pushToDrawDownSink: true ) - let position = FlowCreditMarket.Position(id: pid, pool: poolCap) FlowYieldVaultsStrategies.account.storage.save(poolCap, to: FlowCreditMarket.PoolCapStoragePath) // get Sink & Source connectors relating to the new Position @@ -231,7 +230,7 @@ access(all) contract FlowYieldVaultsStrategies { return <-create TracerStrategy( id: uniqueID, collateralType: collateralType, - position: position + position: <- position ) } } @@ -241,15 +240,15 @@ access(all) contract FlowYieldVaultsStrategies { /// 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: FlowCreditMarket.Position + access(self) let position: @FlowCreditMarket.Position access(self) var sink: {DeFiActions.Sink} access(self) var source: {DeFiActions.Source} - init(id: DeFiActions.UniqueIdentifier, collateralType: Type, position: FlowCreditMarket.Position) { + init(id: DeFiActions.UniqueIdentifier, collateralType: Type, position: @FlowCreditMarket.Position) { self.uniqueID = id - self.position = position self.sink = position.createSink(type: collateralType) self.source = position.createSourceWithOptions(type: collateralType, pullFromTopUpSource: true) + self.position <-position } // Inherited from FlowYieldVaults.Strategy default implementation @@ -476,13 +475,12 @@ access(all) contract FlowYieldVaultsStrategies { ) ?? panic("Missing or invalid pool capability") let poolRef = poolCap.borrow() ?? panic("Invalid Pool Cap") - let pid = poolRef.createPosition( + let position <- poolRef.createPosition( funds: <-withFunds, issuanceSink: abaSwapSink, repaymentSource: abaSwapSource, pushToDrawDownSink: true ) - let position = FlowCreditMarket.Position(id: pid, pool: poolCap) // get Sink & Source connectors relating to the new Position let positionSink = position.createSinkWithOptions(type: collateralType, pushToDrawDownSink: true) @@ -527,7 +525,7 @@ access(all) contract FlowYieldVaultsStrategies { return <-create mUSDCStrategy( id: uniqueID, collateralType: collateralType, - position: position + position: <-position ) } } diff --git a/cadence/contracts/FlowYieldVaultsStrategiesV1_1.cdc b/cadence/contracts/FlowYieldVaultsStrategiesV1_1.cdc index 7cfe055..f613ce7 100644 --- a/cadence/contracts/FlowYieldVaultsStrategiesV1_1.cdc +++ b/cadence/contracts/FlowYieldVaultsStrategiesV1_1.cdc @@ -76,15 +76,15 @@ access(all) contract FlowYieldVaultsStrategiesV1_1 { /// 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: FlowCreditMarket.Position + access(self) let position: @FlowCreditMarket.Position access(self) var sink: {DeFiActions.Sink} access(self) var source: {DeFiActions.Source} - init(id: DeFiActions.UniqueIdentifier, collateralType: Type, position: FlowCreditMarket.Position) { + init(id: DeFiActions.UniqueIdentifier, collateralType: Type, position: @FlowCreditMarket.Position) { self.uniqueID = id - self.position = position self.sink = position.createSink(type: collateralType) self.source = position.createSourceWithOptions(type: collateralType, pullFromTopUpSource: true) + self.position <-position } // Inherited from FlowYieldVaults.Strategy default implementation @@ -279,7 +279,7 @@ access(all) contract FlowYieldVaultsStrategiesV1_1 { ) // Open FlowCreditMarket position - let position = self._openCreditPosition( + let position <- self._openCreditPosition( funds: <-withFunds, issuanceSink: abaSwapSink, repaymentSource: abaSwapSource @@ -309,7 +309,7 @@ access(all) contract FlowYieldVaultsStrategiesV1_1 { return <-create FlowYieldVaultsStrategiesV1_1.mUSDFStrategy( id: uniqueID, collateralType: collateralType, - position: position + position: <-position ) } @@ -478,7 +478,7 @@ access(all) contract FlowYieldVaultsStrategiesV1_1 { funds: @{FungibleToken.Vault}, issuanceSink: {DeFiActions.Sink}, repaymentSource: {DeFiActions.Source} - ): FlowCreditMarket.Position { + ): @FlowCreditMarket.Position { let poolCap = FlowYieldVaultsStrategiesV1_1.account.storage.copy< Capability >(from: FlowCreditMarket.PoolCapStoragePath) @@ -486,14 +486,14 @@ access(all) contract FlowYieldVaultsStrategiesV1_1 { let poolRef = poolCap.borrow() ?? panic("Invalid Pool Cap") - let pid = poolRef.createPosition( + let position <- poolRef.createPosition( funds: <-funds, issuanceSink: issuanceSink, repaymentSource: repaymentSource, pushToDrawDownSink: true ) - return FlowCreditMarket.Position(id: pid, pool: poolCap) + return <-position } access(self) fun _createYieldToCollateralSwapper( diff --git a/cadence/contracts/mocks/MockSwapper.cdc b/cadence/contracts/mocks/MockSwapper.cdc index 1733135..1d7f394 100644 --- a/cadence/contracts/mocks/MockSwapper.cdc +++ b/cadence/contracts/mocks/MockSwapper.cdc @@ -94,12 +94,12 @@ access(all) contract MockSwapper { let inTokenPrice = self.oracle.price(ofToken: self.inType()) ?? panic("Price for token \(self.inType().identifier) is currently unavailable") - let uintOutTokenPrice = FlowCreditMarketMath.toUFix128(outTokenPrice) - let uintInTokenPrice = FlowCreditMarketMath.toUFix128(inTokenPrice) + let uintOutTokenPrice = UFix128(outTokenPrice) + let uintInTokenPrice = UFix128(inTokenPrice) // the original formula is correct, but lacks precision // let price = reverse ? outTokenPrice / inTokenPrice : inTokenPrice / outTokenPrice - let uintPrice = reverse ? FlowCreditMarketMath.div(uintOutTokenPrice, uintInTokenPrice) : FlowCreditMarketMath.div(uintInTokenPrice, uintOutTokenPrice) + let uintPrice = reverse ? (uintOutTokenPrice / uintInTokenPrice) : (uintInTokenPrice / uintOutTokenPrice) if amount == UFix64.max { return SwapConnectors.BasicQuote( @@ -110,8 +110,8 @@ access(all) contract MockSwapper { ) } - let uintAmount = FlowCreditMarketMath.toUFix128(amount) - let uintInAmount = out ? uintAmount : FlowCreditMarketMath.div(uintAmount, uintPrice) + let uintAmount = UFix128(amount) + let uintInAmount = out ? uintAmount : (uintAmount / uintPrice) let uintOutAmount = out ? uintAmount * uintPrice : uintAmount let inAmount = FlowCreditMarketMath.toUFix64Round(uintInAmount) diff --git a/cadence/tests/atomic_registration_gc_test.cdc b/cadence/tests/atomic_registration_gc_test.cdc index 9b34518..1828086 100644 --- a/cadence/tests/atomic_registration_gc_test.cdc +++ b/cadence/tests/atomic_registration_gc_test.cdc @@ -41,18 +41,19 @@ access(all) fun setup() { // Setup FlowCreditMarket with a pool & add FLOW as a supported token. createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: collateralFactor, borrowFactor: borrowFactor, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) // Open a wrapped FlowCreditMarket position so strategies have an underlying position to work with. let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/rebalance_scenario1_test.cdc b/cadence/tests/rebalance_scenario1_test.cdc index 2761541..80adf99 100644 --- a/cadence/tests/rebalance_scenario1_test.cdc +++ b/cadence/tests/rebalance_scenario1_test.cdc @@ -44,11 +44,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -56,7 +57,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/rebalance_scenario2_test.cdc b/cadence/tests/rebalance_scenario2_test.cdc index 228f930..b92f355 100644 --- a/cadence/tests/rebalance_scenario2_test.cdc +++ b/cadence/tests/rebalance_scenario2_test.cdc @@ -130,11 +130,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -142,7 +143,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/rebalance_scenario3a_test.cdc b/cadence/tests/rebalance_scenario3a_test.cdc index 34f2149..6baf54a 100644 --- a/cadence/tests/rebalance_scenario3a_test.cdc +++ b/cadence/tests/rebalance_scenario3a_test.cdc @@ -73,11 +73,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -85,7 +86,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/rebalance_scenario3b_test.cdc b/cadence/tests/rebalance_scenario3b_test.cdc index 31dfc21..6100651 100644 --- a/cadence/tests/rebalance_scenario3b_test.cdc +++ b/cadence/tests/rebalance_scenario3b_test.cdc @@ -73,11 +73,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -85,7 +86,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/rebalance_scenario3c_test.cdc b/cadence/tests/rebalance_scenario3c_test.cdc index 3480025..330c494 100644 --- a/cadence/tests/rebalance_scenario3c_test.cdc +++ b/cadence/tests/rebalance_scenario3c_test.cdc @@ -73,11 +73,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -85,7 +86,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/rebalance_scenario3d_test.cdc b/cadence/tests/rebalance_scenario3d_test.cdc index d8ebaad..1f467ae 100644 --- a/cadence/tests/rebalance_scenario3d_test.cdc +++ b/cadence/tests/rebalance_scenario3d_test.cdc @@ -73,11 +73,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -85,7 +86,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/rebalance_yield_test.cdc b/cadence/tests/rebalance_yield_test.cdc index 90d0269..0961dec 100644 --- a/cadence/tests/rebalance_yield_test.cdc +++ b/cadence/tests/rebalance_yield_test.cdc @@ -43,11 +43,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -55,7 +56,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/scheduled_rebalance_integration_test.cdc b/cadence/tests/scheduled_rebalance_integration_test.cdc index ac5b1cc..b5e8ec9 100644 --- a/cadence/tests/scheduled_rebalance_integration_test.cdc +++ b/cadence/tests/scheduled_rebalance_integration_test.cdc @@ -58,11 +58,12 @@ fun setup() { // Setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -70,7 +71,7 @@ fun setup() { // Open wrapped position let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/scheduled_rebalance_scenario_test.cdc b/cadence/tests/scheduled_rebalance_scenario_test.cdc index 867cf6f..8dda29b 100644 --- a/cadence/tests/scheduled_rebalance_scenario_test.cdc +++ b/cadence/tests/scheduled_rebalance_scenario_test.cdc @@ -65,18 +65,19 @@ fun setup() { // Setup FlowCreditMarket with a Pool createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) // Open wrapped position let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/scheduled_supervisor_test.cdc b/cadence/tests/scheduled_supervisor_test.cdc index 6a26f48..9ba8b7b 100644 --- a/cadence/tests/scheduled_supervisor_test.cdc +++ b/cadence/tests/scheduled_supervisor_test.cdc @@ -51,18 +51,19 @@ fun setup() { // FlowCreditMarket createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) // Wrapped Position let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/scheduler_edge_cases_test.cdc b/cadence/tests/scheduler_edge_cases_test.cdc index 1ac0cdc..86c6288 100644 --- a/cadence/tests/scheduler_edge_cases_test.cdc +++ b/cadence/tests/scheduler_edge_cases_test.cdc @@ -47,18 +47,19 @@ fun setup() { // Setup FlowCreditMarket createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) // Open wrapped position let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/test_helpers.cdc b/cadence/tests/test_helpers.cdc index 1155e84..d172c99 100644 --- a/cadence/tests/test_helpers.cdc +++ b/cadence/tests/test_helpers.cdc @@ -215,14 +215,12 @@ access(all) fun deployContracts() { arguments: [] ) Test.expect(err, Test.beNil()) - err = Test.deployContract( - name: "MockFlowCreditMarketConsumer", - path: "../../lib/FlowCreditMarket/cadence/contracts/mocks/MockFlowCreditMarketConsumer.cdc", + name: "MockDexSwapper", + path: "../../lib/FlowCreditMarket/cadence/contracts/mocks/MockDexSwapper.cdc", arguments: [] ) Test.expect(err, Test.beNil()) - // FlowYieldVaults contracts // Deployment order matters due to imports: // 1. FlowYieldVaultsSchedulerRegistry (no FlowYieldVaults dependencies) @@ -479,6 +477,24 @@ fun addSupportedTokenSimpleInterestCurve( Test.expect(additionRes, Test.beSucceeded()) } +access(all) +fun addSupportedTokenFixedRateInterestCurve( + signer: Test.TestAccount, + tokenTypeIdentifier: String, + collateralFactor: UFix64, + borrowFactor: UFix64, + yearlyRate: UFix128, + depositRate: UFix64, + depositCapacityCap: UFix64 +) { + let additionRes = _executeTransaction( + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/pool-governance/add_supported_token_fixed_rate_curve.cdc", + [ tokenTypeIdentifier, collateralFactor, borrowFactor, yearlyRate, depositRate, depositCapacityCap ], + signer + ) + Test.expect(additionRes, Test.beSucceeded()) +} + access(all) fun rebalancePosition(signer: Test.TestAccount, pid: UInt64, force: Bool, beFailed: Bool) { let rebalanceRes = _executeTransaction( diff --git a/cadence/tests/tracer_strategy_test.cdc b/cadence/tests/tracer_strategy_test.cdc index 5146446..f5ce866 100644 --- a/cadence/tests/tracer_strategy_test.cdc +++ b/cadence/tests/tracer_strategy_test.cdc @@ -49,11 +49,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: flowCollateralFactor, borrowFactor: flowBorrowFactor, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -61,7 +62,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/cadence/tests/yield_vault_lifecycle_test.cdc b/cadence/tests/yield_vault_lifecycle_test.cdc index 465044a..0e1ad05 100644 --- a/cadence/tests/yield_vault_lifecycle_test.cdc +++ b/cadence/tests/yield_vault_lifecycle_test.cdc @@ -49,11 +49,12 @@ fun setup() { // setup FlowCreditMarket with a Pool & add FLOW as supported token createAndStorePool(signer: protocolAccount, defaultTokenIdentifier: moetTokenIdentifier, beFailed: false) - addSupportedTokenSimpleInterestCurve( + addSupportedTokenFixedRateInterestCurve( signer: protocolAccount, tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: flowCollateralFactor, borrowFactor: flowBorrowFactor, + yearlyRate: UFix128(0.1), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) @@ -61,7 +62,7 @@ fun setup() { // open wrapped position (pushToDrawDownSink) // the equivalent of depositing reserves let openRes = executeTransaction( - "../../lib/FlowCreditMarket/cadence/tests/transactions/mock-flow-credit-market-consumer/create_wrapped_position.cdc", + "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/position/create_position.cdc", [reserveAmount/2.0, /storage/flowTokenVault, true], protocolAccount ) diff --git a/flow.json b/flow.json index 0914fc3..c6c5079 100644 --- a/flow.json +++ b/flow.json @@ -188,12 +188,10 @@ "testnet": "426f0458ced60037" } }, - "MockFlowCreditMarketConsumer": { - "source": "./lib/FlowCreditMarket/cadence/contracts/mocks/MockFlowCreditMarketConsumer.cdc", + "MockDexSwapper": { + "source": "./lib/FlowCreditMarket/cadence/contracts/mocks/MockDexSwapper.cdc", "aliases": { - "emulator": "045a1763c93006ca", - "testing": "0000000000000008", - "testnet": "d2580caf2ef07c2f" + "testing": "0000000000000007" } }, "MockOracle": { From a85e90ea0f36fc5aa416d09a3538565fe457a2ee Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Mon, 9 Feb 2026 17:46:59 -0500 Subject: [PATCH 3/8] tweak interest rate --- cadence/tests/rebalance_yield_test.cdc | 2 +- cadence/tests/tracer_strategy_test.cdc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cadence/tests/rebalance_yield_test.cdc b/cadence/tests/rebalance_yield_test.cdc index 0961dec..c0c9010 100644 --- a/cadence/tests/rebalance_yield_test.cdc +++ b/cadence/tests/rebalance_yield_test.cdc @@ -48,7 +48,7 @@ fun setup() { tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: 0.8, borrowFactor: 1.0, - yearlyRate: UFix128(0.1), + yearlyRate: UFix128(0.0), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) diff --git a/cadence/tests/tracer_strategy_test.cdc b/cadence/tests/tracer_strategy_test.cdc index f5ce866..2c2949a 100644 --- a/cadence/tests/tracer_strategy_test.cdc +++ b/cadence/tests/tracer_strategy_test.cdc @@ -54,7 +54,7 @@ fun setup() { tokenTypeIdentifier: flowTokenIdentifier, collateralFactor: flowCollateralFactor, borrowFactor: flowBorrowFactor, - yearlyRate: UFix128(0.1), + yearlyRate: UFix128(0.0), depositRate: 1_000_000.0, depositCapacityCap: 1_000_000.0 ) From 1455da28ce49c3098c4116fa422b264759559480 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Mon, 9 Feb 2026 17:49:04 -0500 Subject: [PATCH 4/8] remove unused simple rate helper --- cadence/tests/test_helpers.cdc | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/cadence/tests/test_helpers.cdc b/cadence/tests/test_helpers.cdc index d172c99..a833a8a 100644 --- a/cadence/tests/test_helpers.cdc +++ b/cadence/tests/test_helpers.cdc @@ -460,23 +460,6 @@ fun createAndStorePool(signer: Test.TestAccount, defaultTokenIdentifier: String, Test.expect(createRes, beFailed ? Test.beFailed() : Test.beSucceeded()) } -access(all) -fun addSupportedTokenSimpleInterestCurve( - signer: Test.TestAccount, - tokenTypeIdentifier: String, - collateralFactor: UFix64, - borrowFactor: UFix64, - depositRate: UFix64, - depositCapacityCap: UFix64 -) { - let additionRes = _executeTransaction( - "../../lib/FlowCreditMarket/cadence/transactions/flow-credit-market/pool-governance/add_supported_token_simple_interest_curve.cdc", - [ tokenTypeIdentifier, collateralFactor, borrowFactor, depositRate, depositCapacityCap ], - signer - ) - Test.expect(additionRes, Test.beSucceeded()) -} - access(all) fun addSupportedTokenFixedRateInterestCurve( signer: Test.TestAccount, From 9773e5125c9dc337b0de970553df089cece9d728 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 10 Feb 2026 11:32:34 -0500 Subject: [PATCH 5/8] tweak tests --- flow.json | 57 ++++++++++++++++++++++++++++++++--- local/e2e_test.sh | 8 ++--- local/punchswap/punchswap.env | 4 +-- local/setup_bridged_tokens.sh | 8 ++--- local/setup_emulator.sh | 6 ++-- local/setup_mainnet.sh | 4 +-- 6 files changed, 68 insertions(+), 19 deletions(-) diff --git a/flow.json b/flow.json index c6c5079..53bd25a 100644 --- a/flow.json +++ b/flow.json @@ -191,6 +191,7 @@ "MockDexSwapper": { "source": "./lib/FlowCreditMarket/cadence/contracts/mocks/MockDexSwapper.cdc", "aliases": { + "emulator": "045a1763c93006ca", "testing": "0000000000000007" } }, @@ -257,6 +258,7 @@ "ArrayUtils": { "source": "mainnet://1e4aa0b87d10b141.ArrayUtils", "hash": "e70ddc2f0c7c72158a3f6c68de3a131e1f49e2908ad83eac0308f9e2953957d5", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -266,6 +268,7 @@ "BandOracle": { "source": "mainnet://6801a6222ebf784a.BandOracle", "hash": "ababa195ef50b63d71520022aa2468656a9703b924c0f5228cfaa51a71db094d", + "block_height": 141772866, "aliases": { "emulator": "045a1763c93006ca", "mainnet": "6801a6222ebf784a", @@ -276,6 +279,7 @@ "Burner": { "source": "mainnet://f233dcee88fe0abe.Burner", "hash": "71af18e227984cd434a3ad00bb2f3618b76482842bae920ee55662c37c8bf331", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "f233dcee88fe0abe", @@ -285,6 +289,7 @@ "CrossVMMetadataViews": { "source": "mainnet://1d7e57aa55817448.CrossVMMetadataViews", "hash": "7e79b77b87c750de5b126ebd6fca517c2b905ac7f01c0428e9f3f82838c7f524", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1d7e57aa55817448", @@ -294,6 +299,7 @@ "CrossVMNFT": { "source": "mainnet://1e4aa0b87d10b141.CrossVMNFT", "hash": "8fe69f487164caffedab68b52a584fa7aa4d54a0061f4f211998c73a619fbea5", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -303,6 +309,7 @@ "CrossVMToken": { "source": "mainnet://1e4aa0b87d10b141.CrossVMToken", "hash": "9f055ad902e7de5619a2b0f2dc91826ac9c4f007afcd6df9f5b8229c0ca94531", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -312,7 +319,8 @@ }, "EVM": { "source": "mainnet://e467b9dd11fa00df.EVM", - "hash": "c77a07a7eac28b1470b148204d6f2e3527d931b2d2df341618ab888201316a0b", + "hash": "960b0c7df7ee536956af196fba8c8d5dd4f7a89a4ecc61467e31287c4617b0dd", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "e467b9dd11fa00df", @@ -322,6 +330,7 @@ "FlowEVMBridge": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridge", "hash": "9cd0f897b19c0394e9042225e5758d6ae529a0cce19b19ae05bde8e0f14aa10b", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -332,6 +341,7 @@ "FlowEVMBridgeAccessor": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeAccessor", "hash": "888ba0aab5e961924c47b819f4a9f410449c39745e0d3eab20738bf10ef2ed0f", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -342,6 +352,7 @@ "FlowEVMBridgeConfig": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeConfig", "hash": "3c09f74467f22dac7bc02b2fdf462213b2f8ddfb513cd890ad0c2a7016507be3", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -352,6 +363,7 @@ "FlowEVMBridgeCustomAssociationTypes": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeCustomAssociationTypes", "hash": "4651183c3f04f8c5faaa35106b3ab66060ce9868590adb33f3be1900c12ea196", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -362,6 +374,7 @@ "FlowEVMBridgeCustomAssociations": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeCustomAssociations", "hash": "14d1f4ddd347f45d331e543830b94701e1aa1513c56d55c0019c7fac46d8a572", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -372,6 +385,7 @@ "FlowEVMBridgeHandlerInterfaces": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeHandlerInterfaces", "hash": "e32154f2a556e53328a0fce75f1e98b57eefd2a8cb626e803b7d39d452691444", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -382,6 +396,7 @@ "FlowEVMBridgeHandlers": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeHandlers", "hash": "7e8adff1dca0ea1d2e361c17de9eca020f82cabc00a52679078752bf85adb004", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -392,6 +407,7 @@ "FlowEVMBridgeNFTEscrow": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeNFTEscrow", "hash": "30257592838edfd4b72700f43bf0326f6903e879f82ac5ca549561d9863c6fe6", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -402,6 +418,7 @@ "FlowEVMBridgeResolver": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeResolver", "hash": "c1ac18e92828616771df5ff5d6de87866f2742ca4ce196601c11e977e4f63bb3", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -412,6 +429,7 @@ "FlowEVMBridgeTemplates": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeTemplates", "hash": "78b8115eb0ef2be4583acbe655f0c5128c39712084ec23ce47820ea154141898", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -422,6 +440,7 @@ "FlowEVMBridgeTokenEscrow": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeTokenEscrow", "hash": "49df9c8e5d0dd45abd5bf94376d3b9045299b3c2a5ba6caf48092c916362358d", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -432,6 +451,7 @@ "FlowEVMBridgeUtils": { "source": "mainnet://1e4aa0b87d10b141.FlowEVMBridgeUtils", "hash": "634ed6dde03eb8f027368aa7861889ce1f5099160903493a7a39a86c9afea14b", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -442,6 +462,7 @@ "FlowFees": { "source": "mainnet://f919ee77447b7497.FlowFees", "hash": "341cc0f3cc847d6b787c390133f6a5e6c867c111784f09c5c0083c47f2f1df64", + "block_height": 141772866, "aliases": { "emulator": "e5a8b7f23e8b548f", "mainnet": "f919ee77447b7497", @@ -451,6 +472,7 @@ "FlowStorageFees": { "source": "mainnet://e467b9dd11fa00df.FlowStorageFees", "hash": "a92c26fb2ea59725441fa703aa4cd811e0fc56ac73d649a8e12c1e72b67a8473", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "e467b9dd11fa00df", @@ -460,6 +482,7 @@ "FlowToken": { "source": "mainnet://1654653399040a61.FlowToken", "hash": "f82389e2412624ffa439836b00b42e6605b0c00802a4e485bc95b8930a7eac38", + "block_height": 141772866, "aliases": { "emulator": "0ae53cb6e3f42a79", "mainnet": "1654653399040a61", @@ -468,7 +491,8 @@ }, "FlowTransactionScheduler": { "source": "mainnet://e467b9dd11fa00df.FlowTransactionScheduler", - "hash": "c701f26f6a8e993b2573ec8700142f61c9ca936b199af8cc75dee7d9b19c9e95", + "hash": "23157cf7d70534e45b0ab729133232d0ffb3cdae52661df1744747cb1f8c0495", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "e467b9dd11fa00df", @@ -477,7 +501,8 @@ }, "FlowTransactionSchedulerUtils": { "source": "mainnet://e467b9dd11fa00df.FlowTransactionSchedulerUtils", - "hash": "429ed886472cd65def9e5ab1dd20079b0dcfb23095d18d54077767ac3316a8ce", + "hash": "71a1febab6b9ba76abec36dab1e61b1c377e44fbe627e5fac649deb71b727877", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "e467b9dd11fa00df", @@ -487,6 +512,7 @@ "FungibleToken": { "source": "mainnet://f233dcee88fe0abe.FungibleToken", "hash": "4b74edfe7d7ddfa70b703c14aa731a0b2e7ce016ce54d998bfd861ada4d240f6", + "block_height": 141772866, "aliases": { "emulator": "ee82856bf20e2aa6", "mainnet": "f233dcee88fe0abe", @@ -496,6 +522,7 @@ "FungibleTokenMetadataViews": { "source": "mainnet://f233dcee88fe0abe.FungibleTokenMetadataViews", "hash": "70477f80fd7678466c224507e9689f68f72a9e697128d5ea54d19961ec856b3c", + "block_height": 141772866, "aliases": { "emulator": "ee82856bf20e2aa6", "mainnet": "f233dcee88fe0abe", @@ -505,6 +532,7 @@ "IBridgePermissions": { "source": "mainnet://1e4aa0b87d10b141.IBridgePermissions", "hash": "431a51a6cca87773596f79832520b19499fe614297eaef347e49383f2ae809af", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -514,6 +542,7 @@ "ICrossVM": { "source": "mainnet://1e4aa0b87d10b141.ICrossVM", "hash": "b95c36eef516da7cd4d2f507cd48288cc16b1d6605ff03b6fcd18161ff2d82e7", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -524,6 +553,7 @@ "ICrossVMAsset": { "source": "mainnet://1e4aa0b87d10b141.ICrossVMAsset", "hash": "d9c7b2bd9fdcc454180c33b3509a5a060a7fe4bd49bce38818f22fd08acb8ba0", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -534,6 +564,7 @@ "IEVMBridgeNFTMinter": { "source": "mainnet://1e4aa0b87d10b141.IEVMBridgeNFTMinter", "hash": "e2ad15c495ad7fbf4ab744bccaf8c4334dfb843b50f09e9681ce9a5067dbf049", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -544,6 +575,7 @@ "IEVMBridgeTokenMinter": { "source": "mainnet://1e4aa0b87d10b141.IEVMBridgeTokenMinter", "hash": "0ef39c6cb476f0eea2c835900b6a5a83c1ed5f4dbaaeb29cb68ad52c355a40e6", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -554,6 +586,7 @@ "IFlowEVMNFTBridge": { "source": "mainnet://1e4aa0b87d10b141.IFlowEVMNFTBridge", "hash": "2d495e896510a10bbc7307739aca9341633cac4c7fe7dad32488a81f90a39dd9", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -564,6 +597,7 @@ "IFlowEVMTokenBridge": { "source": "mainnet://1e4aa0b87d10b141.IFlowEVMTokenBridge", "hash": "87f7d752da8446e73acd3bf4aa17fe5c279d9641b7976c56561af01bc5240ea4", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -574,6 +608,7 @@ "MetadataViews": { "source": "mainnet://1d7e57aa55817448.MetadataViews", "hash": "b290b7906d901882b4b62e596225fb2f10defb5eaaab4a09368f3aee0e9c18b1", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1d7e57aa55817448", @@ -583,6 +618,7 @@ "NonFungibleToken": { "source": "mainnet://1d7e57aa55817448.NonFungibleToken", "hash": "a258de1abddcdb50afc929e74aca87161d0083588f6abf2b369672e64cf4a403", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1d7e57aa55817448", @@ -592,6 +628,7 @@ "ScopedFTProviders": { "source": "mainnet://1e4aa0b87d10b141.ScopedFTProviders", "hash": "77213f9588ec9862d07c4706689424ad7c1d8f043d5970d96bf18764bb936fc3", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -602,6 +639,7 @@ "Serialize": { "source": "mainnet://1e4aa0b87d10b141.Serialize", "hash": "064bb0d7b6c24ee1ed370cbbe9e0cda2a4e0955247de5e3e81f2f3a8a8cabfb7", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -611,6 +649,7 @@ "SerializeMetadata": { "source": "mainnet://1e4aa0b87d10b141.SerializeMetadata", "hash": "e9f84ea07e29cae05ee0d9264596eb281c291fc1090a10ce3de1a042b4d671da", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -620,6 +659,7 @@ "StableSwapFactory": { "source": "mainnet://b063c16cac85dbd1.StableSwapFactory", "hash": "a63b57a5cc91085016abc34c1b49622b385a8f976ac2ba0e646f7a3f780d344e", + "block_height": 141772866, "aliases": { "emulator": "f3fcd2c1a78f5eee", "mainnet": "b063c16cac85dbd1", @@ -629,6 +669,7 @@ "StringUtils": { "source": "mainnet://1e4aa0b87d10b141.StringUtils", "hash": "28ac1a744ac7fb97253cba007a520a9ec1c2e14458d1bd1add1424fa19282c03", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1e4aa0b87d10b141", @@ -638,6 +679,7 @@ "SwapConfig": { "source": "mainnet://b78ef7afa52ff906.SwapConfig", "hash": "111f3caa0ab506bed100225a1481f77687f6ac8493d97e49f149fa26a174ef99", + "block_height": 141772866, "aliases": { "emulator": "f3fcd2c1a78f5eee", "mainnet": "b78ef7afa52ff906", @@ -647,6 +689,7 @@ "SwapError": { "source": "mainnet://b78ef7afa52ff906.SwapError", "hash": "7d13a652a1308af387513e35c08b4f9a7389a927bddf08431687a846e4c67f21", + "block_height": 141772866, "aliases": { "emulator": "f3fcd2c1a78f5eee", "mainnet": "b78ef7afa52ff906", @@ -656,6 +699,7 @@ "SwapFactory": { "source": "mainnet://b063c16cac85dbd1.SwapFactory", "hash": "deea03edbb49877c8c72276e1911cf87bdba4052ae9c3ac54c0d4ac62f3ef511", + "block_height": 141772866, "aliases": { "emulator": "f3fcd2c1a78f5eee", "mainnet": "b063c16cac85dbd1", @@ -665,6 +709,7 @@ "SwapInterfaces": { "source": "mainnet://b78ef7afa52ff906.SwapInterfaces", "hash": "e559dff4d914fa12fff7ba482f30d3c575dc3d31587833fd628763d1a4ee96b2", + "block_height": 141772866, "aliases": { "emulator": "f3fcd2c1a78f5eee", "mainnet": "b78ef7afa52ff906", @@ -674,6 +719,7 @@ "SwapRouter": { "source": "mainnet://a6850776a94e6551.SwapRouter", "hash": "c0365c01978ca32af94602bfddd0796cfe6375e60a05b927b5de539e608baec5", + "block_height": 141772866, "aliases": { "emulator": "f3fcd2c1a78f5eee", "mainnet": "a6850776a94e6551", @@ -683,6 +729,7 @@ "USDCFlow": { "source": "mainnet://f1ab99c82dee3526.USDCFlow", "hash": "da7c21064dc73c06499f0b652caea447233465b49787605ce0f679beca48dee7", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "f1ab99c82dee3526", @@ -692,6 +739,7 @@ "ViewResolver": { "source": "mainnet://1d7e57aa55817448.ViewResolver", "hash": "374a1994046bac9f6228b4843cb32393ef40554df9bd9907a702d098a2987bde", + "block_height": 141772866, "aliases": { "emulator": "f8d6e0586b0a20c7", "mainnet": "1d7e57aa55817448", @@ -829,6 +877,7 @@ "BandOracle", "BandOracleConnectors", "MockSwapper", + "MockDexSwapper", "EVMAbiHelpers", "EVMTokenConnectors", "ERC4626Utils", @@ -1140,4 +1189,4 @@ ] } } -} +} \ No newline at end of file diff --git a/local/e2e_test.sh b/local/e2e_test.sh index 68bdefb..fd0fd37 100755 --- a/local/e2e_test.sh +++ b/local/e2e_test.sh @@ -35,18 +35,18 @@ run_txn "Creating YieldVault[0]" \ A.0ae53cb6e3f42a79.FlowToken.Vault \ 100.0 \ --signer test-user \ - --gas-limit 9999 + --compute-limit 9999 run_txn "Depositing 20.0 to YieldVault[0]" \ ./cadence/transactions/flow-yield-vaults/deposit_to_yield_vault.cdc 0 20.0 --signer test-user \ - --gas-limit 9999 + --compute-limit 9999 run_txn "Withdrawing 10.0 from YieldVault[0]" \ ./cadence/transactions/flow-yield-vaults/withdraw_from_yield_vault.cdc 0 10.0 --signer test-user \ - --gas-limit 9999 + --compute-limit 9999 run_txn "Closing YieldVault[0]" \ ./cadence/transactions/flow-yield-vaults/close_yield_vault.cdc 0 --signer test-user \ - --gas-limit 9999 + --compute-limit 9999 echo "✅ All E2E transactions SEALED successfully!" diff --git a/local/punchswap/punchswap.env b/local/punchswap/punchswap.env index 345e91a..04f6668 100644 --- a/local/punchswap/punchswap.env +++ b/local/punchswap/punchswap.env @@ -30,8 +30,8 @@ TOKENS_OWNER=0xC31A5268a1d311d992D637E8cE925bfdcCEB4310 USDC_MINT=2000000000000 WBTC_MINT=100000000000000 -USDC_ADDR=0xaf2Bb3E0017d2eD9B69004c9b38318a166fA9f63 -WBTC_ADDR=0x34A99426966D2023f1f66929c1b0989fA5C6B9FC +USDC_ADDR=0x102A7ed67858cF757CBBeA3390eaB72fcc60237E +WBTC_ADDR=0x6Ce75363856e46B42bf0c933E01A4Eec17eE963B # how much to fund the helper (base units) # USDC_FUND=600000000 # 600k * 1e6 diff --git a/local/setup_bridged_tokens.sh b/local/setup_bridged_tokens.sh index 0c64b43..aa352d1 100755 --- a/local/setup_bridged_tokens.sh +++ b/local/setup_bridged_tokens.sh @@ -3,17 +3,17 @@ source ./local/punchswap/punchswap.env USDC_ADDR_LOWER=$(echo ${USDC_ADDR#0x} | tr '[:upper:]' '[:lower:]') echo "bridge USDC to Cadence" -flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_evm_address.cdc $USDC_ADDR --gas-limit 9999 --signer emulator-flow-yield-vaults +flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_evm_address.cdc $USDC_ADDR --compute-limit 9999 --signer emulator-flow-yield-vaults echo "set USDC token price" flow transactions send ./cadence/transactions/mocks/oracle/set_price.cdc "A.f8d6e0586b0a20c7.EVMVMBridgedToken_${USDC_ADDR_LOWER}.Vault" 1.0 --signer emulator-flow-yield-vaults echo "bridge WBTC to Cadence" -flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_evm_address.cdc $WBTC_ADDR --gas-limit 9999 --signer emulator-flow-yield-vaults +flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_evm_address.cdc $WBTC_ADDR --compute-limit 9999 --signer emulator-flow-yield-vaults # this step is done earlier # echo "bridge MOET to EVM" -# flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc "A.045a1763c93006ca.MOET.Vault" --gas-limit 9999 --signer emulator-flow-yield-vaults +# flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc "A.045a1763c93006ca.MOET.Vault" --compute-limit 9999 --signer emulator-flow-yield-vaults #flow transactions send ../cadence/tests/transactions/create_univ3_pool.cdc @@ -39,7 +39,7 @@ cast send $USDC_ADDR "approve(address,uint256)" $POSITION_MANAGER $MAX_UINT \ echo "transfer MOET" -flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/tokens/bridge_tokens_to_any_evm_address.cdc "A.045a1763c93006ca.MOET.Vault" 100000.0 $OWNER --gas-limit 9999 --signer emulator-flow-yield-vaults +flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/tokens/bridge_tokens_to_any_evm_address.cdc "A.045a1763c93006ca.MOET.Vault" 100000.0 $OWNER --compute-limit 9999 --signer emulator-flow-yield-vaults # create position / add liquidity diff --git a/local/setup_emulator.sh b/local/setup_emulator.sh index c726fb5..65ffddb 100755 --- a/local/setup_emulator.sh +++ b/local/setup_emulator.sh @@ -6,7 +6,7 @@ flow deps install --skip-alias --skip-deployments echo "deploy MOET & bridge MOET to EVM" flow accounts add-contract ./lib/FlowCreditMarket/cadence/contracts/MOET.cdc 1000000.00000000 --signer emulator-flow-yield-vaults -flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc "A.045a1763c93006ca.MOET.Vault" --gas-limit 9999 --signer emulator-flow-yield-vaults +flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc "A.045a1763c93006ca.MOET.Vault" --compute-limit 9999 --signer emulator-flow-yield-vaults # execute emulator deployment flow deploy @@ -23,7 +23,7 @@ flow transactions send ./cadence/transactions/mocks/oracle/set_price.cdc 'A.045a # create Pool with MOET as default token flow transactions send ./lib/FlowCreditMarket/cadence/transactions/flow-credit-market/pool-factory/create_and_store_pool.cdc 'A.045a1763c93006ca.MOET.Vault' --signer emulator-flow-yield-vaults # add FLOW as supported token - params: collateralFactor, borrowFactor, depositRate, depositCapacityCap -flow transactions send ./lib/FlowCreditMarket/cadence/transactions/flow-credit-market/pool-governance/add_supported_token_simple_interest_curve.cdc \ +flow transactions send ./lib/FlowCreditMarket/cadence/transactions/flow-credit-market/pool-governance/add_supported_token_zero_rate_curve.cdc \ 'A.0ae53cb6e3f42a79.FlowToken.Vault' \ 0.8 \ 1.0 \ @@ -66,5 +66,5 @@ flow transactions send ./lib/FlowCreditMarket/cadence/tests/transactions/flow-cr TIDAL_COA=0x$(flow scripts execute ./lib/flow-evm-bridge/cadence/scripts/evm/get_evm_address_string.cdc 045a1763c93006ca --format inline | sed -E 's/"([^"]+)"/\1/') echo $TIDAL_COA -flow transactions send ./lib/flow-evm-bridge/cadence/transactions/flow-token/transfer_flow_to_cadence_or_evm.cdc $TIDAL_COA 100.0 --signer emulator-flow-yield-vaults --gas-limit 9999 +flow transactions send ./lib/flow-evm-bridge/cadence/transactions/flow-token/transfer_flow_to_cadence_or_evm.cdc $TIDAL_COA 100.0 --signer emulator-flow-yield-vaults --compute-limit 9999 diff --git a/local/setup_mainnet.sh b/local/setup_mainnet.sh index 5982c6d..d5bf83f 100755 --- a/local/setup_mainnet.sh +++ b/local/setup_mainnet.sh @@ -12,7 +12,7 @@ flow transactions send ./cadence/transactions/mocks/oracle/set_price.cdc 'A.1654 echo "bridge YieldToken to Cadence" flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_evm_address.cdc 0xc52E820d2D6207D18667a97e2c6Ac22eB26E803c --network mainnet --signer mainnet-admin echo "bridge MOET to EVM" -flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc "A.6b00ff876c299c61.MOET.Vault" --gas-limit 9999 --network mainnet --signer mainnet-flow-credit-market-deployer +flow transactions send ./lib/flow-evm-bridge/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc "A.6b00ff876c299c61.MOET.Vault" --compute-limit 9999 --network mainnet --signer mainnet-flow-credit-market-deployer # configure FlowCreditMarket # @@ -210,7 +210,7 @@ flow transactions send ./lib/FlowCreditMarket/cadence/tests/transactions/flow-cr # TODO # setup coa and transfer flow to it # TIDAL_COA=0x$(flow scripts execute ./lib/flow-evm-bridge/cadence/scripts/evm/get_evm_address_string.cdc 0xb1d63873c3cc9f79 --format inline --network mainnet | sed -E 's/"([^"]+)"/\1/') -# flow transactions send ./lib/flow-evm-bridge/cadence/transactions/flow-token/transfer_flow_to_cadence_or_evm.cdc $TIDAL_COA 100.0 --network mainnet --signer mainnet-admin --gas-limit 9999 +# flow transactions send ./lib/flow-evm-bridge/cadence/transactions/flow-token/transfer_flow_to_cadence_or_evm.cdc $TIDAL_COA 100.0 --network mainnet --signer mainnet-admin --compute-limit 9999 # # # sanity test From 4a7d187309c9cc005228e33251b4b727aeef3b58 Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 10 Feb 2026 11:42:01 -0500 Subject: [PATCH 6/8] revert addresses --- local/punchswap/punchswap.env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/local/punchswap/punchswap.env b/local/punchswap/punchswap.env index 04f6668..345e91a 100644 --- a/local/punchswap/punchswap.env +++ b/local/punchswap/punchswap.env @@ -30,8 +30,8 @@ TOKENS_OWNER=0xC31A5268a1d311d992D637E8cE925bfdcCEB4310 USDC_MINT=2000000000000 WBTC_MINT=100000000000000 -USDC_ADDR=0x102A7ed67858cF757CBBeA3390eaB72fcc60237E -WBTC_ADDR=0x6Ce75363856e46B42bf0c933E01A4Eec17eE963B +USDC_ADDR=0xaf2Bb3E0017d2eD9B69004c9b38318a166fA9f63 +WBTC_ADDR=0x34A99426966D2023f1f66929c1b0989fA5C6B9FC # how much to fund the helper (base units) # USDC_FUND=600000000 # 600k * 1e6 From 7907cc55e267f0c5680dc1bdaf111d8888549a9e Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 10 Feb 2026 11:57:11 -0500 Subject: [PATCH 7/8] remove metadata from bytecode --- foundry.toml | 5 +++++ local/punchswap/punchswap.env | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/foundry.toml b/foundry.toml index 0bb94eb..0c07ee0 100644 --- a/foundry.toml +++ b/foundry.toml @@ -10,3 +10,8 @@ remappings = [ "@openzeppelin/=./solidity/lib/openzeppelin-contracts/" ] # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options + +# --- Make CREATE2 deterministic across environments/versions --- +# Removes metadata hash / CBOR metadata that otherwise changes initcode hash. +bytecode_hash = "none" +cbor_metadata = false diff --git a/local/punchswap/punchswap.env b/local/punchswap/punchswap.env index 345e91a..acb507d 100644 --- a/local/punchswap/punchswap.env +++ b/local/punchswap/punchswap.env @@ -30,8 +30,8 @@ TOKENS_OWNER=0xC31A5268a1d311d992D637E8cE925bfdcCEB4310 USDC_MINT=2000000000000 WBTC_MINT=100000000000000 -USDC_ADDR=0xaf2Bb3E0017d2eD9B69004c9b38318a166fA9f63 -WBTC_ADDR=0x34A99426966D2023f1f66929c1b0989fA5C6B9FC +USDC_ADDR=0x5678485De199745707A79Aa617Ec4DD6254d0D1e +WBTC_ADDR=0xf32b01c04Bce7d08e356d2e7b4E1AF8F533F70B0 # how much to fund the helper (base units) # USDC_FUND=600000000 # 600k * 1e6 From 953f5d94d3d51abf19519f134d38523fffe89cda Mon Sep 17 00:00:00 2001 From: Alex <12097569+nialexsan@users.noreply.github.com> Date: Tue, 10 Feb 2026 12:00:57 -0500 Subject: [PATCH 8/8] Revert "remove metadata from bytecode" This reverts commit 7907cc55e267f0c5680dc1bdaf111d8888549a9e. --- foundry.toml | 5 ----- local/punchswap/punchswap.env | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/foundry.toml b/foundry.toml index 0c07ee0..0bb94eb 100644 --- a/foundry.toml +++ b/foundry.toml @@ -10,8 +10,3 @@ remappings = [ "@openzeppelin/=./solidity/lib/openzeppelin-contracts/" ] # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options - -# --- Make CREATE2 deterministic across environments/versions --- -# Removes metadata hash / CBOR metadata that otherwise changes initcode hash. -bytecode_hash = "none" -cbor_metadata = false diff --git a/local/punchswap/punchswap.env b/local/punchswap/punchswap.env index acb507d..345e91a 100644 --- a/local/punchswap/punchswap.env +++ b/local/punchswap/punchswap.env @@ -30,8 +30,8 @@ TOKENS_OWNER=0xC31A5268a1d311d992D637E8cE925bfdcCEB4310 USDC_MINT=2000000000000 WBTC_MINT=100000000000000 -USDC_ADDR=0x5678485De199745707A79Aa617Ec4DD6254d0D1e -WBTC_ADDR=0xf32b01c04Bce7d08e356d2e7b4E1AF8F533F70B0 +USDC_ADDR=0xaf2Bb3E0017d2eD9B69004c9b38318a166fA9f63 +WBTC_ADDR=0x34A99426966D2023f1f66929c1b0989fA5C6B9FC # how much to fund the helper (base units) # USDC_FUND=600000000 # 600k * 1e6