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
16 changes: 16 additions & 0 deletions fearless.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1916,6 +1916,8 @@
FA072C21277B19A900731718 /* ImageGalleryProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA072C20277B19A900731718 /* ImageGalleryProtocols.swift */; };
FA072C25277C0FA900731718 /* ApplicationSettingsPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA072C24277C0FA900731718 /* ApplicationSettingsPresentable.swift */; };
FA08B3652A31A09E00D9D126 /* BigUInt+StringInitializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA08B3642A31A09E00D9D126 /* BigUInt+StringInitializable.swift */; };
FA09AD352C37ABA000BE0B9C /* TransactionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA09AD342C37ABA000BE0B9C /* TransactionObserver.swift */; };
FA09AD372C37AF9200BE0B9C /* SubstrateTransactionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA09AD362C37AF9200BE0B9C /* SubstrateTransactionObserver.swift */; };
FA1109EB27A92D56003C2158 /* ChainAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1109EA27A92D56003C2158 /* ChainAction.swift */; };
FA14AE892B0785670066CADF /* SoraSubsquidHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA14AE882B0785670066CADF /* SoraSubsquidHistoryResponse.swift */; };
FA14AE8B2B0788D20066CADF /* AssetTransactionData+SoraSubsquidHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA14AE8A2B0788D20066CADF /* AssetTransactionData+SoraSubsquidHistory.swift */; };
Expand Down Expand Up @@ -5078,6 +5080,8 @@
FA072C20277B19A900731718 /* ImageGalleryProtocols.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageGalleryProtocols.swift; sourceTree = "<group>"; };
FA072C24277C0FA900731718 /* ApplicationSettingsPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationSettingsPresentable.swift; sourceTree = "<group>"; };
FA08B3642A31A09E00D9D126 /* BigUInt+StringInitializable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BigUInt+StringInitializable.swift"; sourceTree = "<group>"; };
FA09AD342C37ABA000BE0B9C /* TransactionObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionObserver.swift; sourceTree = "<group>"; };
FA09AD362C37AF9200BE0B9C /* SubstrateTransactionObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateTransactionObserver.swift; sourceTree = "<group>"; };
FA0B7C9F68A6BF3D3A6D8234 /* StakingPoolInfoInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoInteractor.swift; sourceTree = "<group>"; };
FA1109EA27A92D56003C2158 /* ChainAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAction.swift; sourceTree = "<group>"; };
FA14AE882B0785670066CADF /* SoraSubsquidHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubsquidHistoryResponse.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -12560,6 +12564,15 @@
path = QRService;
sourceTree = "<group>";
};
FA09AD332C37AB9400BE0B9C /* TransactionObserver */ = {
isa = PBXGroup;
children = (
FA09AD342C37ABA000BE0B9C /* TransactionObserver.swift */,
FA09AD362C37AF9200BE0B9C /* SubstrateTransactionObserver.swift */,
);
path = TransactionObserver;
sourceTree = "<group>";
};
FA176BB62851B41900258125 /* Parachain */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -13438,6 +13451,7 @@
FA38C9A32760700B005C5577 /* Services */ = {
isa = PBXGroup;
children = (
FA09AD332C37AB9400BE0B9C /* TransactionObserver */,
FA34EE902B98711F0042E73E /* CrowdloanService.swift */,
FA34EE912B9871200042E73E /* Onboarding */,
0765296B2AD9516800BA1D99 /* Polkaswap */,
Expand Down Expand Up @@ -16383,6 +16397,7 @@
84DA3B1224C6D29100B5E27F /* RuntimeVersion.swift in Sources */,
FA176BB82851B42700258125 /* StakingBalanceParachainViewModelFactory.swift in Sources */,
843C49DB24DF373000B71DDA /* AccountImportRequest.swift in Sources */,
FA09AD352C37ABA000BE0B9C /* TransactionObserver.swift in Sources */,
843910C1253F36F300E3C217 /* BaseStorageChildSubscription.swift in Sources */,
84644AC52567EC05004EAA4B /* MultilineTriangularedView.swift in Sources */,
FA86443E2768439900956D8E /* ContainerProtocols.swift in Sources */,
Expand Down Expand Up @@ -16865,6 +16880,7 @@
FA7336E22A0E3B880096A291 /* ResponseDecoder.swift in Sources */,
84100F3626A6069200A5054E /* IconTitleValueView.swift in Sources */,
842876AB24AE049B00D91AD8 /* SelectionItemViewProtocol.swift in Sources */,
FA09AD372C37AF9200BE0B9C /* SubstrateTransactionObserver.swift in Sources */,
FA2FC82528B380C500CC0A42 /* StakingPoolMember.swift in Sources */,
FA584C862AB30ACE00F6F020 /* AlchemyNftMediaInfo.swift in Sources */,
8472C5AF265CF9C500E2481B /* StakingRewardDestConfirmViewLayout.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import Foundation
import SSFChainConnection
import SSFUtils

final class SubstrateTransactionObserver: TransactionObserver {
private let engine: SubstrateConnection
private var activeRequestIds: [UInt16] = []

init(engine: SubstrateConnection) {
self.engine = engine
}

deinit {
activeRequestIds.forEach { try? engine.unsubsribe($0) }
}

func subscribe(transactionHash: String) async throws -> AsyncThrowingStream<ExtrinsicStatus, Error> {
AsyncThrowingStream<ExtrinsicStatus, Error> { continuation in
let updateClosure: (JSONRPCSubscriptionUpdate<ExtrinsicStatus>) -> Void = { statusUpdate in
let state = statusUpdate.params.result
continuation.yield(state)
}

let failureClosure: (Error, Bool) -> Void = { error, _ in
continuation.finish(throwing: error)
}

let requestId = engine.generateRequestId()
activeRequestIds.append(requestId)
let subscription = JSONRPCSubscription(
requestId: requestId,
requestData: .init(),
requestOptions: .init(resendOnReconnect: true),
updateClosure: updateClosure,
failureClosure: failureClosure
)

subscription.remoteId = transactionHash
engine.addSubscription(subscription)
}
}

private func cancelSubscription(requestId: UInt16) {
engine.cancelForIdentifier(requestId)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Foundation

protocol TransactionObserver {
func subscribe(transactionHash: String) async throws -> AsyncThrowingStream<ExtrinsicStatus, Error>
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import SSFPolkaswap
import SSFModels

final class LiquidityPoolDetailsAssembly {
static func configureModule(assetIdPair: AssetIdPair, chain: ChainModel, wallet: MetaAccountModel, input: LiquidityPoolDetailsInput, poolOperationFlowsClosure: @escaping () -> Void) -> LiquidityPoolDetailsModuleCreationResult? {
static func configureModule(assetIdPair: AssetIdPair, chain: ChainModel, wallet: MetaAccountModel, input: LiquidityPoolDetailsInput, didSubmitTransactionClosure: @escaping (String) -> Void) -> LiquidityPoolDetailsModuleCreationResult? {
let localizationManager = LocalizationManager.shared

let chainRegistry = ChainRegistryFacade.sharedRegistry
Expand Down Expand Up @@ -33,7 +33,7 @@ final class LiquidityPoolDetailsAssembly {
chain: chain,
wallet: wallet,
input: input,
poolOperationFlowsClosure: poolOperationFlowsClosure
didSubmitTransactionClosure: didSubmitTransactionClosure
)

let view = LiquidityPoolDetailsViewController(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ final class LiquidityPoolDetailsPresenter {
private let chain: ChainModel
private let wallet: MetaAccountModel
private let input: LiquidityPoolDetailsInput
private var poolOperationFlowsClosure: () -> Void
private var didSubmitTransactionClosure: (String) -> Void

private var liquidityPair: LiquidityPair?
private var accountPoolInfo: AccountPool?
Expand All @@ -115,7 +115,7 @@ final class LiquidityPoolDetailsPresenter {
chain: ChainModel,
wallet: MetaAccountModel,
input: LiquidityPoolDetailsInput,
poolOperationFlowsClosure: @escaping () -> Void
didSubmitTransactionClosure: @escaping (String) -> Void
) {
self.interactor = interactor
self.router = router
Expand All @@ -125,7 +125,7 @@ final class LiquidityPoolDetailsPresenter {
self.chain = chain
self.wallet = wallet
self.input = input
self.poolOperationFlowsClosure = poolOperationFlowsClosure
self.didSubmitTransactionClosure = didSubmitTransactionClosure

liquidityPair = input.liquidityPair

Expand Down Expand Up @@ -177,15 +177,15 @@ extension LiquidityPoolDetailsPresenter: LiquidityPoolDetailsViewOutput {
return
}

router.showSupplyFlow(liquidityPair: liquidityPair, chain: chain, wallet: wallet, availablePairs: input.availablePairs, flowClosure: poolOperationFlowsClosure, from: view)
router.showSupplyFlow(liquidityPair: liquidityPair, chain: chain, wallet: wallet, availablePairs: input.availablePairs, didSubmitTransactionClosure: didSubmitTransactionClosure, from: view)
}

func removeButtonClicked() {
guard let liquidityPair else {
return
}

router.showRemoveFlow(liquidityPair: liquidityPair, chain: chain, wallet: wallet, flowClosure: poolOperationFlowsClosure, from: view)
router.showRemoveFlow(liquidityPair: liquidityPair, chain: chain, wallet: wallet, didSubmitTransactionClosure: didSubmitTransactionClosure, from: view)
}

func didTapApyInfo() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ protocol LiquidityPoolDetailsRouterInput: AnyObject, AnyDismissable, SheetAlertP
chain: ChainModel,
wallet: MetaAccountModel,
availablePairs: [LiquidityPair]?,
flowClosure: @escaping () -> Void,
didSubmitTransactionClosure: @escaping (String) -> Void,
from view: ControllerBackedProtocol?
)
func showRemoveFlow(
liquidityPair: LiquidityPair,
chain: ChainModel,
wallet: MetaAccountModel,
flowClosure: @escaping () -> Void,
didSubmitTransactionClosure: @escaping (String) -> Void,
from view: ControllerBackedProtocol?
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,40 @@ import SSFModels
import SSFPools

final class LiquidityPoolDetailsRouter: LiquidityPoolDetailsRouterInput {
func showSupplyFlow(liquidityPair: LiquidityPair, chain: ChainModel, wallet: MetaAccountModel, availablePairs: [LiquidityPair]?, flowClosure: @escaping () -> Void, from view: ControllerBackedProtocol?) {
guard let controller = LiquidityPoolSupplyAssembly.configureModule(chain: chain, wallet: wallet, liquidityPair: liquidityPair, availablePairs: availablePairs, flowClosure: flowClosure)?.view.controller else {
func showSupplyFlow(
liquidityPair: LiquidityPair,
chain: ChainModel,
wallet: MetaAccountModel,
availablePairs: [LiquidityPair]?,
didSubmitTransactionClosure: @escaping (String) -> Void,
from view: ControllerBackedProtocol?
) {
guard let controller = LiquidityPoolSupplyAssembly.configureModule(
chain: chain,
wallet: wallet,
liquidityPair: liquidityPair,
availablePairs: availablePairs,
didSubmitTransactionClosure: didSubmitTransactionClosure
)?.view.controller else {
return
}

view?.controller.navigationController?.pushViewController(controller, animated: true)
}

func showRemoveFlow(liquidityPair: LiquidityPair, chain: ChainModel, wallet: MetaAccountModel, flowClosure: @escaping () -> Void, from view: ControllerBackedProtocol?) {
guard let controller = LiquidityPoolRemoveLiquidityAssembly.configureModule(wallet: wallet, chain: chain, liquidityPair: liquidityPair, flowClosure: flowClosure)?.view.controller else {
func showRemoveFlow(
liquidityPair: LiquidityPair,
chain: ChainModel,
wallet: MetaAccountModel,
didSubmitTransactionClosure: @escaping (String) -> Void,
from view: ControllerBackedProtocol?
) {
guard let controller = LiquidityPoolRemoveLiquidityAssembly.configureModule(
wallet: wallet,
chain: chain,
liquidityPair: liquidityPair,
didSubmitTransactionClosure: didSubmitTransactionClosure
)?.view.controller else {
return
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ final class LiquidityPoolRemoveLiquidityAssembly {
wallet: MetaAccountModel,
chain: ChainModel,
liquidityPair: LiquidityPair,
flowClosure: @escaping () -> Void
didSubmitTransactionClosure: @escaping (String) -> Void
) -> LiquidityPoolRemoveLiquidityModuleCreationResult? {
guard let response = wallet.fetch(for: chain.accountRequest()) else {
return nil
Expand Down Expand Up @@ -46,7 +46,19 @@ final class LiquidityPoolRemoveLiquidityAssembly {
let interactor = LiquidityPoolRemoveLiquidityInteractor(lpOperationService: lpOperationService, lpDataService: lpDataService, liquidityPair: liquidityPair, priceLocalSubscriber: PriceLocalStorageSubscriberImpl.shared, chain: chain, accountInfoSubscriptionAdapter: accountInfoSubscriptionAdapter, wallet: wallet)
let router = LiquidityPoolRemoveLiquidityRouter()
let dataValidatingFactory = SendDataValidatingFactory(presentable: router)
let presenter = LiquidityPoolRemoveLiquidityPresenter(interactor: interactor, router: router, localizationManager: localizationManager, wallet: wallet, logger: Logger.shared, chain: chain, liquidityPair: liquidityPair, dataValidatingFactory: dataValidatingFactory, confirmViewModelFactory: nil, removeInfo: nil, flowClosure: flowClosure)
let presenter = LiquidityPoolRemoveLiquidityPresenter(
interactor: interactor,
router: router,
localizationManager: localizationManager,
wallet: wallet,
logger: Logger.shared,
chain: chain,
liquidityPair: liquidityPair,
dataValidatingFactory: dataValidatingFactory,
confirmViewModelFactory: nil,
removeInfo: nil,
didSubmitTransactionClosure: didSubmitTransactionClosure
)

let view = LiquidityPoolRemoveLiquidityViewController(
output: presenter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ final class LiquidityPoolRemoveLiquidityPresenter {
private let liquidityPair: LiquidityPair
private let dataValidatingFactory: SendDataValidatingFactory
private let confirmViewModelFactory: LiquidityPoolSupplyConfirmViewModelFactory?
private var flowClosure: () -> Void
private var didSubmitTransactionClosure: (String) -> Void

private var removeInfo: RemoveLiquidityInfo?
private var reserves: PolkaswapPoolReservesInfo?
Expand Down Expand Up @@ -114,7 +114,7 @@ final class LiquidityPoolRemoveLiquidityPresenter {
dataValidatingFactory: SendDataValidatingFactory,
confirmViewModelFactory: LiquidityPoolSupplyConfirmViewModelFactory?,
removeInfo: RemoveLiquidityInfo?,
flowClosure: @escaping () -> Void
didSubmitTransactionClosure: @escaping (String) -> Void
) {
self.interactor = interactor
self.router = router
Expand All @@ -126,7 +126,7 @@ final class LiquidityPoolRemoveLiquidityPresenter {
self.confirmViewModelFactory = confirmViewModelFactory
self.removeInfo = removeInfo
dexId = liquidityPair.dexId
self.flowClosure = flowClosure
self.didSubmitTransactionClosure = didSubmitTransactionClosure

if let removeInfo = removeInfo, let utilityAsset = chain.utilityAssets().first {
totalIssuance = removeInfo.totalIssuances.toSubstrateAmount(precision: Int16(utilityAsset.precision))
Expand Down Expand Up @@ -533,7 +533,7 @@ extension LiquidityPoolRemoveLiquidityPresenter: LiquidityPoolRemoveLiquidityVie
wallet: self.wallet,
liquidityPair: self.liquidityPair,
info: info,
flowClosure: self.flowClosure,
didSubmitTransactionClosure: self.didSubmitTransactionClosure,
from: self.setupView
)
}
Expand Down Expand Up @@ -614,7 +614,7 @@ extension LiquidityPoolRemoveLiquidityPresenter: LiquidityPoolRemoveLiquidityInt
return
}

flowClosure()
didSubmitTransactionClosure(hash)
resetLoadingState()

router.complete(on: confirmView, title: hash, chainAsset: utilityChainAsset)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ protocol LiquidityPoolRemoveLiquidityRouterInput: AnyObject, ErrorPresentable, S
wallet: MetaAccountModel,
liquidityPair: LiquidityPair,
info: RemoveLiquidityInfo,
flowClosure: @escaping () -> Void,
didSubmitTransactionClosure: @escaping (String) -> Void,
from view: ControllerBackedProtocol?
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ final class LiquidityPoolRemoveLiquidityRouter: LiquidityPoolRemoveLiquidityRout
wallet: MetaAccountModel,
liquidityPair: LiquidityPair,
info: RemoveLiquidityInfo,
flowClosure: @escaping () -> Void,
didSubmitTransactionClosure: @escaping (String) -> Void,
from view: ControllerBackedProtocol?
) {
guard let module = LiquidityPoolRemoveLiquidityConfirmAssembly.configureModule(wallet: wallet, chain: chain, liquidityPair: liquidityPair, removeInfo: info, flowClosure: flowClosure) else {
guard let module = LiquidityPoolRemoveLiquidityConfirmAssembly.configureModule(wallet: wallet, chain: chain, liquidityPair: liquidityPair, removeInfo: info, didSubmitTransactionClosure: didSubmitTransactionClosure) else {
return
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ final class LiquidityPoolRemoveLiquidityConfirmAssembly {
chain: ChainModel,
liquidityPair: LiquidityPair,
removeInfo: RemoveLiquidityInfo,
flowClosure: @escaping () -> Void
didSubmitTransactionClosure: @escaping (String) -> Void
) -> LiquidityPoolRemoveLiquidityConfirmModuleCreationResult? {
guard let response = wallet.fetch(for: chain.accountRequest()) else {
return nil
Expand Down Expand Up @@ -58,7 +58,7 @@ final class LiquidityPoolRemoveLiquidityConfirmAssembly {
dataValidatingFactory: dataValidatingFactory,
confirmViewModelFactory: LiquidityPoolSupplyConfirmViewModelFactoryDefault(),
removeInfo: removeInfo,
flowClosure: flowClosure
didSubmitTransactionClosure: didSubmitTransactionClosure
)

let view = LiquidityPoolRemoveLiquidityConfirmViewController(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import SSFModels
import SoraKeystore

final class LiquidityPoolSupplyAssembly {
static func configureModule(chain: ChainModel, wallet: MetaAccountModel, liquidityPair: LiquidityPair, availablePairs: [LiquidityPair]?, flowClosure: @escaping () -> Void) -> LiquidityPoolSupplyModuleCreationResult? {
static func configureModule(chain: ChainModel, wallet: MetaAccountModel, liquidityPair: LiquidityPair, availablePairs: [LiquidityPair]?, didSubmitTransactionClosure: @escaping (String) -> Void) -> LiquidityPoolSupplyModuleCreationResult? {
guard let response = wallet.fetch(for: chain.accountRequest()) else {
return nil
}
Expand Down Expand Up @@ -52,7 +52,7 @@ final class LiquidityPoolSupplyAssembly {
dataValidatingFactory: dataValidatingFactory,
viewModelFactory: LiquidityPoolSupplyViewModelFactoryDefault(),
availablePairs: availablePairs,
flowClosure: flowClosure
didSubmitTransactionClosure: didSubmitTransactionClosure
)

let view = LiquidityPoolSupplyViewController(
Expand Down
Loading