Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public struct PerpetualPositionViewModel {
}

public var nameText: String {
data.asset.name
data.perpetual.name
}

public var symbolText: String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,15 +122,15 @@ public final class PerpetualSceneViewModel {
}
}

private var currentChartSubscription: ChartSubscription { ChartSubscription(coin: perpetual.name, period: currentPeriod) }
private var currentChartSubscription: ChartSubscription { ChartSubscription(coin: perpetual.coin, period: currentPeriod) }
}

// MARK: - Actions

public extension PerpetualSceneViewModel {
func fetch() {
Task { await observerService.update(for: wallet) }
Task { try await perpetualService.updateMarket(symbol: perpetual.name) }
Task { try await perpetualService.updateMarket(symbol: perpetual.coin) }
Task { await fetchTransactions() }
Task { await updateCandlesticks() }
}
Expand All @@ -152,7 +152,7 @@ public extension PerpetualSceneViewModel {
func onScenePhaseChange(_ oldPhase: ScenePhase, _ newPhase: ScenePhase) {
switch newPhase {
case .active:
Task { try? await perpetualService.updateMarket(symbol: perpetual.name) }
Task { try? await perpetualService.updateMarket(symbol: perpetual.coin) }
Task { await fetchTransactions() }
Task { await updateCandlesticks() }
case .inactive, .background: break
Expand All @@ -162,9 +162,9 @@ public extension PerpetualSceneViewModel {

func onPeriodChange(_ oldPeriod: ChartPeriod, _ newPeriod: ChartPeriod) {
Task {
await unsubscribeCandles(ChartSubscription(coin: perpetual.name, period: oldPeriod))
await unsubscribeCandles(ChartSubscription(coin: perpetual.coin, period: oldPeriod))
await updateCandlesticks()
await subscribeCandles(ChartSubscription(coin: perpetual.name, period: newPeriod))
await subscribeCandles(ChartSubscription(coin: perpetual.coin, period: newPeriod))
}
}

Expand Down Expand Up @@ -223,7 +223,8 @@ public extension PerpetualSceneViewModel {
func onOpenLongPosition() {
guard let transferData = createTransferData(
direction: .long,
leverage: perpetual.maxLeverage
leverage: perpetual.maxLeverage,
marginType: perpetual.marginType
) else {
return
}
Expand All @@ -233,7 +234,8 @@ public extension PerpetualSceneViewModel {
func onOpenShortPosition() {
guard let transferData = createTransferData(
direction: .short,
leverage: perpetual.maxLeverage
leverage: perpetual.maxLeverage,
marginType: perpetual.marginType
) else {
return
}
Expand All @@ -244,7 +246,7 @@ public extension PerpetualSceneViewModel {
isPresentingModifyAlert = false

guard let position = positions.first?.position,
let transferData = createTransferData(direction: position.direction, leverage: position.leverage)
let transferData = createTransferData(direction: position.direction, leverage: position.leverage, marginType: position.marginType)
else { return }

onPositionAction(.increase(transferData))
Expand All @@ -264,7 +266,7 @@ public extension PerpetualSceneViewModel {
}
}()

guard let transferData = createTransferData(direction: direction, leverage: position.leverage) else {
guard let transferData = createTransferData(direction: direction, leverage: position.leverage, marginType: position.marginType) else {
return
}

Expand All @@ -289,7 +291,7 @@ private extension PerpetualSceneViewModel {
state = .loading
do {
let candlesticks = try await perpetualService.candlesticks(
symbol: perpetual.name,
symbol: perpetual.coin,
period: currentPeriod
)
state = .data(candlesticks)
Expand Down Expand Up @@ -341,7 +343,7 @@ private extension PerpetualSceneViewModel {
state = .data(candlesticks)
}

func createTransferData(direction: PerpetualDirection, leverage: UInt8) -> PerpetualTransferData? {
func createTransferData(direction: PerpetualDirection, leverage: UInt8, marginType: PerpetualMarginType) -> PerpetualTransferData? {
guard let assetIndex = Int(perpetual.identifier) else {
return nil
}
Expand All @@ -353,7 +355,8 @@ private extension PerpetualSceneViewModel {
baseAsset: .hypercoreUSDC(),
assetIndex: assetIndex,
price: perpetual.price,
leverage: leverage
leverage: leverage,
marginType: marginType
)
}

Expand Down
3 changes: 2 additions & 1 deletion Features/Perpetuals/TestKit/Perpetual+TestKit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ public extension Perpetual {
openInterest: openInterest,
volume24h: volume24h,
funding: funding,
maxLeverage: maxLeverage
maxLeverage: maxLeverage,
onlyIsolated: false
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public struct PerpetualOrderFactory {

let data = makePerpetualConfirmData(
direction: perpetual.direction,
marginType: perpetual.marginType,
baseAsset: perpetual.baseAsset,
fiatValue: fiatValue,
assetIndex: Int32(perpetual.assetIndex),
Expand Down Expand Up @@ -81,6 +82,7 @@ public struct PerpetualOrderFactory {

return makePerpetualConfirmData(
direction: position.direction,
marginType: position.marginType,
baseAsset: baseAsset,
fiatValue: abs(position.size) * positionPrice,
assetIndex: assetIndex,
Expand Down Expand Up @@ -115,6 +117,7 @@ public struct PerpetualOrderFactory {

private func makePerpetualConfirmData(
direction: PerpetualDirection,
marginType: PerpetualMarginType,
baseAsset: Asset,
fiatValue: Double,
assetIndex: Int32,
Expand Down Expand Up @@ -143,6 +146,7 @@ public struct PerpetualOrderFactory {

return PerpetualConfirmData(
direction: direction,
marginType: marginType,
baseAsset: baseAsset,
assetIndex: assetIndex,
price: price,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ extension GemPerpetual {
openInterest: openInterest,
volume24h: volume24h,
funding: funding,
maxLeverage: maxLeverage
maxLeverage: maxLeverage,
onlyIsolated: onlyIsolated
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ extension Gemstone.PerpetualConfirmData {
public func map() throws -> Primitives.PerpetualConfirmData {
Primitives.PerpetualConfirmData(
direction: direction.map(),
marginType: marginType.map(),
baseAsset: try baseAsset.map(),
assetIndex: assetIndex,
price: price,
Expand All @@ -29,6 +30,7 @@ extension Primitives.PerpetualConfirmData {
public func map() -> Gemstone.PerpetualConfirmData {
Gemstone.PerpetualConfirmData(
direction: direction.map(),
marginType: marginType.map(),
baseAsset: baseAsset.map(),
assetIndex: assetIndex,
price: price,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ extension PerpetualDirection {
}
}

extension Perpetual {
public var coin: String {
assetId.tokenId?.components(separatedBy: AssetId.subTokenSeparator).last ?? name
}

public var marginType: PerpetualMarginType { onlyIsolated ? .isolated : .cross }
}

extension PerpetualSearchData {
public var assetBasic: AssetBasic {
AssetBasic(
Expand Down
8 changes: 6 additions & 2 deletions Packages/Primitives/Sources/Perpetual.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,9 @@ public struct Perpetual: Codable, Equatable, Hashable, Sendable {
public let volume24h: Double
public let funding: Double
public let maxLeverage: UInt8
public let onlyIsolated: Bool

public init(id: String, name: String, provider: PerpetualProvider, assetId: AssetId, identifier: String, price: Double, pricePercentChange24h: Double, openInterest: Double, volume24h: Double, funding: Double, maxLeverage: UInt8) {
public init(id: String, name: String, provider: PerpetualProvider, assetId: AssetId, identifier: String, price: Double, pricePercentChange24h: Double, openInterest: Double, volume24h: Double, funding: Double, maxLeverage: UInt8, onlyIsolated: Bool) {
self.id = id
self.name = name
self.provider = provider
Expand All @@ -68,6 +69,7 @@ public struct Perpetual: Codable, Equatable, Hashable, Sendable {
self.volume24h = volume24h
self.funding = funding
self.maxLeverage = maxLeverage
self.onlyIsolated = onlyIsolated
}
}

Expand Down Expand Up @@ -97,6 +99,7 @@ public struct PerpetualBasic: Codable, Equatable, Hashable, Sendable {

public struct PerpetualConfirmData: Codable, Equatable, Hashable, Sendable {
public let direction: PerpetualDirection
public let marginType: PerpetualMarginType
public let baseAsset: Asset
public let assetIndex: Int32
public let price: String
Expand All @@ -111,8 +114,9 @@ public struct PerpetualConfirmData: Codable, Equatable, Hashable, Sendable {
public let takeProfit: String?
public let stopLoss: String?

public init(direction: PerpetualDirection, baseAsset: Asset, assetIndex: Int32, price: String, fiatValue: Double, size: String, slippage: Double, leverage: UInt8, pnl: Double?, entryPrice: Double?, marketPrice: Double, marginAmount: Double, takeProfit: String?, stopLoss: String?) {
public init(direction: PerpetualDirection, marginType: PerpetualMarginType, baseAsset: Asset, assetIndex: Int32, price: String, fiatValue: Double, size: String, slippage: Double, leverage: UInt8, pnl: Double?, entryPrice: Double?, marketPrice: Double, marginAmount: Double, takeProfit: String?, stopLoss: String?) {
self.direction = direction
self.marginType = marginType
self.baseAsset = baseAsset
self.assetIndex = assetIndex
self.price = price
Expand Down
5 changes: 4 additions & 1 deletion Packages/Primitives/Sources/PerpetualTransferData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public struct PerpetualTransferData: Codable, Equatable, Hashable, Sendable {
public let assetIndex: Int
public let price: Double
public let leverage: UInt8
public let marginType: PerpetualMarginType

public init(
provider: PerpetualProvider,
Expand All @@ -47,7 +48,8 @@ public struct PerpetualTransferData: Codable, Equatable, Hashable, Sendable {
baseAsset: Asset,
assetIndex: Int,
price: Double,
leverage: UInt8
leverage: UInt8,
marginType: PerpetualMarginType
) {
self.provider = provider
self.direction = direction
Expand All @@ -56,6 +58,7 @@ public struct PerpetualTransferData: Codable, Equatable, Hashable, Sendable {
self.assetIndex = assetIndex
self.price = price
self.leverage = leverage
self.marginType = marginType
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ public extension Perpetual {
openInterest: openInterest,
volume24h: volume24h,
funding: funding,
maxLeverage: maxLeverage
maxLeverage: maxLeverage,
onlyIsolated: false
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import Primitives
public extension PerpetualConfirmData {
static func mock(
direction: PerpetualDirection = .long,
marginType: PerpetualMarginType = .cross,
baseAsset: Asset = .mock(),
assetIndex: Int32 = 0,
price: String = "100",
Expand All @@ -22,6 +23,7 @@ public extension PerpetualConfirmData {
) -> PerpetualConfirmData {
PerpetualConfirmData(
direction: direction,
marginType: marginType,
baseAsset: baseAsset,
assetIndex: assetIndex,
price: price,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public extension PerpetualTransferData {
baseAsset: Asset = .mock(),
assetIndex: Int = 0,
price: Double = 100.0,
leverage: UInt8 = 3
leverage: UInt8 = 3,
marginType: PerpetualMarginType = .cross
) -> PerpetualTransferData {
PerpetualTransferData(
provider: provider,
Expand All @@ -20,7 +21,8 @@ public extension PerpetualTransferData {
baseAsset: baseAsset,
assetIndex: assetIndex,
price: price,
leverage: leverage
leverage: leverage,
marginType: marginType
)
}
}
8 changes: 8 additions & 0 deletions Packages/Store/Sources/Migrations.swift
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,14 @@ struct Migrations {
}
}

migrator.registerMigration("Add onlyIsolated to \(PerpetualRecord.databaseTableName)") { db in
try? db.alter(table: PerpetualRecord.databaseTableName) {
$0.add(column: PerpetualRecord.Columns.onlyIsolated.name, .boolean)
.notNull()
.defaults(to: false)
}
}

try migrator.migrate(dbQueue)
}
}
11 changes: 9 additions & 2 deletions Packages/Store/Sources/Models/PerpetualRecord.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ struct PerpetualRecord: Codable, TableRecord, FetchableRecord, PersistableRecord
static let volume24h = Column("volume24h")
static let funding = Column("funding")
static let maxLeverage = Column("maxLeverage")
static let onlyIsolated = Column("onlyIsolated")
static let isPinned = Column("isPinned")
}

Expand All @@ -33,6 +34,7 @@ struct PerpetualRecord: Codable, TableRecord, FetchableRecord, PersistableRecord
var volume24h: Double
var funding: Double
var maxLeverage: UInt8
var onlyIsolated: Bool
var isPinned: Bool

init(
Expand All @@ -47,6 +49,7 @@ struct PerpetualRecord: Codable, TableRecord, FetchableRecord, PersistableRecord
volume24h: Double,
funding: Double,
maxLeverage: UInt8,
onlyIsolated: Bool = false,
isPinned: Bool = false
) {
self.id = id
Expand All @@ -60,6 +63,7 @@ struct PerpetualRecord: Codable, TableRecord, FetchableRecord, PersistableRecord
self.volume24h = volume24h
self.funding = funding
self.maxLeverage = maxLeverage
self.onlyIsolated = onlyIsolated
self.isPinned = isPinned
}

Expand All @@ -83,6 +87,7 @@ extension PerpetualRecord: CreateTable {
$0.column(Columns.volume24h.name, .double).notNull()
$0.column(Columns.funding.name, .double).notNull()
$0.column(Columns.maxLeverage.name, .integer).notNull()
$0.column(Columns.onlyIsolated.name, .boolean).notNull().defaults(to: false)
$0.column(Columns.isPinned.name, .boolean).notNull().defaults(to: false)
}
}
Expand All @@ -101,7 +106,8 @@ extension PerpetualRecord {
openInterest: openInterest,
volume24h: volume24h,
funding: funding,
maxLeverage: maxLeverage
maxLeverage: maxLeverage,
onlyIsolated: onlyIsolated
)
}
}
Expand All @@ -119,7 +125,8 @@ extension Perpetual {
openInterest: openInterest,
volume24h: volume24h,
funding: funding,
maxLeverage: maxLeverage
maxLeverage: maxLeverage,
onlyIsolated: onlyIsolated
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ extension PerpetualData {
openInterest: .zero,
volume24h: .zero,
funding: .zero,
maxLeverage: 1
maxLeverage: 1,
onlyIsolated: false
),
asset: Asset(id: .init(chain: .bitcoin, tokenId: .none), name: "", symbol: "", decimals: 0, type: .native),
metadata: PerpetualMetadata(isPinned: false)
Expand Down
2 changes: 1 addition & 1 deletion core
Submodule core updated 172 files
Loading