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
6 changes: 0 additions & 6 deletions cadence/contracts/FlowALPv0.cdc
Original file line number Diff line number Diff line change
Expand Up @@ -1927,7 +1927,6 @@ access(all) contract FlowALPv0 {
)

return PositionDetails(
id: pid,
balances: balances,
poolDefaultToken: self.defaultToken,
defaultTokenAvailableBalance: defaultTokenAvailable,
Expand Down Expand Up @@ -4783,9 +4782,6 @@ access(all) contract FlowALPv0 {
/// This structure is NOT used internally.
access(all) struct PositionDetails {

/// The unique identifier of the position
access(all) let id: UInt64

/// Balance details about each Vault Type deposited to the related Position
access(all) let balances: [PositionBalance]

Expand All @@ -4799,13 +4795,11 @@ access(all) contract FlowALPv0 {
access(all) let health: UFix128

init(
id: UInt64,
balances: [PositionBalance],
poolDefaultToken: Type,
defaultTokenAvailableBalance: UFix64,
health: UFix128
) {
self.id = id
self.balances = balances
self.poolDefaultToken = poolDefaultToken
self.defaultTokenAvailableBalance = defaultTokenAvailableBalance
Expand Down
6 changes: 4 additions & 2 deletions cadence/scripts/flow-alp/get_positions_by_ids.cdc
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@
// are silently skipped.
import "FlowALPv0"

access(all) fun main(positionIDs: [UInt64]): [FlowALPv0.PositionDetails] {
access(all) fun main(positionIDs: [UInt64]): [FlowALPv0.PositionDetails?] {
let protocolAddress = Type<@FlowALPv0.Pool>().address!
let account = getAccount(protocolAddress)
let pool = account.capabilities.borrow<&FlowALPv0.Pool>(FlowALPv0.PoolPublicPath)
?? panic("Could not find Pool at path \(FlowALPv0.PoolPublicPath)")

let details: [FlowALPv0.PositionDetails] = []
let details: [FlowALPv0.PositionDetails?] = []
for id in positionIDs {
if let detail = pool.tryGetPositionDetails(pid: id) {
details.append(detail)
} else {
details.append(nil)
}
}
return details
Expand Down
23 changes: 14 additions & 9 deletions cadence/tests/get_positions_by_ids_test.cdc
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ fun test_getPositionsByIDs() {
let details0 = getPositionDetails(pid: 0, beFailed: false)
let details1 = getPositionDetails(pid: 1, beFailed: false)

Test.assertEqual(details0.health, details[0].health)
Test.assertEqual(details0.balances.length, details[0].balances.length)
Test.assertEqual(details0.health, details[0]!.health)
Test.assertEqual(details0.balances.length, details[0]!.balances.length)

Test.assertEqual(details1.health, details[1].health)
Test.assertEqual(details1.balances.length, details[1].balances.length)
Test.assertEqual(details1.health, details[1]!.health)
Test.assertEqual(details1.balances.length, details[1]!.balances.length)

// --- Empty input returns empty array ---
let emptyDetails = getPositionsByIDs(positionIDs: [])
Expand All @@ -64,21 +64,26 @@ fun test_getPositionsByIDs() {
// --- Single ID works ---
let singleDetails = getPositionsByIDs(positionIDs: [UInt64(0)])
Test.assertEqual(1, singleDetails.length)
Test.assertEqual(details0.health, singleDetails[0].health)
Test.assertEqual(details0.health, singleDetails[0]!.health)

// --- Closed positions are silently skipped ---
// Close position 1, then request both IDs — should only return position 0
closePosition(user: user, positionID: 1)
let afterClose = getPositionsByIDs(positionIDs: [UInt64(0), UInt64(1)])
Test.assertEqual(1, afterClose.length)
Test.assertEqual(details0.health, afterClose[0].health)
Test.assertEqual(2, afterClose.length)
Test.assertEqual(details0.health, afterClose[0]!.health)
Test.assertEqual(afterClose[1], nil)

// --- All IDs closed/invalid returns empty array ---
closePosition(user: user, positionID: 0)
let allClosed = getPositionsByIDs(positionIDs: [UInt64(0), UInt64(1)])
Test.assertEqual(0, allClosed.length)
Test.assertEqual(2, allClosed.length)
Test.assertEqual(allClosed[0], nil)
Test.assertEqual(allClosed[1], nil)

// --- Non-existent IDs are skipped ---
let nonExistent = getPositionsByIDs(positionIDs: [UInt64(999), UInt64(1000)])
Test.assertEqual(0, nonExistent.length)
Test.assertEqual(2, nonExistent.length)
Test.assertEqual(nonExistent[0], nil)
Test.assertEqual(nonExistent[1], nil)
}
4 changes: 2 additions & 2 deletions cadence/tests/test_helpers.cdc
Original file line number Diff line number Diff line change
Expand Up @@ -801,13 +801,13 @@ fun getPositionIDs(): [UInt64] {
}

access(all)
fun getPositionsByIDs(positionIDs: [UInt64]): [FlowALPv0.PositionDetails] {
fun getPositionsByIDs(positionIDs: [UInt64]): [FlowALPv0.PositionDetails?] {
let res = _executeScript(
"../scripts/flow-alp/get_positions_by_ids.cdc",
[positionIDs]
)
Test.expect(res, Test.beSucceeded())
return res.returnValue as! [FlowALPv0.PositionDetails]
return res.returnValue as! [FlowALPv0.PositionDetails?]
}

access(all)
Expand Down
Loading