Skip to content

Commit 3031dd1

Browse files
authored
feat: transactions sort
1 parent 24f77d1 commit 3031dd1

File tree

5 files changed

+62
-19
lines changed

5 files changed

+62
-19
lines changed

BDKSwiftExampleWallet.xcodeproj/project.pbxproj

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
AE0C30FD2A804BC1008F1EAE /* ReceiveViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE0C30FC2A804BC1008F1EAE /* ReceiveViewModel.swift */; };
1616
AE1390C72A7DB0AF0098127A /* KeyService.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE1390C62A7DB0AF0098127A /* KeyService.swift */; };
1717
AE184EFC2BFE52C800374362 /* Amount+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE184EFB2BFE52C800374362 /* Amount+Extensions.swift */; };
18+
AE187D782C9BB3B50081D0C3 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE187D772C9BB3B50081D0C3 /* BitcoinDevKit */; };
1819
AE18E9382A9528200019D2A4 /* Bundle+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE18E9372A9528200019D2A4 /* Bundle+Extensions.swift */; };
1920
AE18E93A2A9532CB0019D2A4 /* BDKSwiftExampleWalletBundle+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE18E9392A9532CB0019D2A4 /* BDKSwiftExampleWalletBundle+Extensions.swift */; };
2021
AE1C34242A424456008F807A /* ReceiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE1C34232A424456008F807A /* ReceiveView.swift */; };
@@ -61,7 +62,7 @@
6162
AE7F67072A744CE200CED561 /* Double+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F67062A744CE200CED561 /* Double+Extensions.swift */; };
6263
AE7F67092A7451AA00CED561 /* Price.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F67082A7451AA00CED561 /* Price.swift */; };
6364
AE7F670C2A7451D700CED561 /* CurrencyCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7F670B2A7451D700CED561 /* CurrencyCode.swift */; };
64-
AE8A39C42C8E31D4002C0A62 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AE8A39C32C8E31D4002C0A62 /* BitcoinDevKit */; };
65+
AE83EFDB2C9D07B200B41244 /* ChainPosition+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE83EFDA2C9D07B200B41244 /* ChainPosition+Extensions.swift */; };
6566
AE91CEED2C0FDB70000AAD20 /* SentAndReceivedValues+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE91CEEC2C0FDB70000AAD20 /* SentAndReceivedValues+Extensions.swift */; };
6667
AE91CEEF2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE91CEEE2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift */; };
6768
AE96F6622A424C400055623C /* BDKSwiftExampleWalletReceiveViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE96F6612A424C400055623C /* BDKSwiftExampleWalletReceiveViewModelTests.swift */; };
@@ -73,6 +74,7 @@
7374
AEB735D32B2CC4B900F99DBB /* BitcoinUI in Frameworks */ = {isa = PBXBuildFile; productRef = AEB735D22B2CC4B900F99DBB /* BitcoinUI */; };
7475
AEB905C32A7EEBF000CD0337 /* BackupInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB905C22A7EEBF000CD0337 /* BackupInfo.swift */; };
7576
AEC2CF5A2ABFBA19008065E4 /* BuildTransactionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC2CF592ABFBA19008065E4 /* BuildTransactionViewModel.swift */; };
77+
AED02B912C9D0B44006DAAAF /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = AED02B902C9D0B44006DAAAF /* BitcoinDevKit */; };
7678
AED062712A9BB1D6001DC6BD /* BDKSwiftExampleWalletFeeServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED062702A9BB1D6001DC6BD /* BDKSwiftExampleWalletFeeServiceTests.swift */; };
7779
AED062732A9BD698001DC6BD /* BDKSwiftExampleWalletKeyServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED062722A9BD698001DC6BD /* BDKSwiftExampleWalletKeyServiceTests.swift */; };
7880
AED062752A9BD7FA001DC6BD /* BDKSwiftExampleWalletBDKServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED062742A9BD7FA001DC6BD /* BDKSwiftExampleWalletBDKServiceTests.swift */; };
@@ -153,6 +155,7 @@
153155
AE7F67062A744CE200CED561 /* Double+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Double+Extensions.swift"; sourceTree = "<group>"; };
154156
AE7F67082A7451AA00CED561 /* Price.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Price.swift; sourceTree = "<group>"; };
155157
AE7F670B2A7451D700CED561 /* CurrencyCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyCode.swift; sourceTree = "<group>"; };
158+
AE83EFDA2C9D07B200B41244 /* ChainPosition+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChainPosition+Extensions.swift"; sourceTree = "<group>"; };
156159
AE91CEEC2C0FDB70000AAD20 /* SentAndReceivedValues+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SentAndReceivedValues+Extensions.swift"; sourceTree = "<group>"; };
157160
AE91CEEE2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CanonicalTx+Extensions.swift"; sourceTree = "<group>"; };
158161
AE96F6612A424C400055623C /* BDKSwiftExampleWalletReceiveViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BDKSwiftExampleWalletReceiveViewModelTests.swift; sourceTree = "<group>"; };
@@ -180,9 +183,10 @@
180183
isa = PBXFrameworksBuildPhase;
181184
buildActionMask = 2147483647;
182185
files = (
183-
AE8A39C42C8E31D4002C0A62 /* BitcoinDevKit in Frameworks */,
186+
AE187D782C9BB3B50081D0C3 /* BitcoinDevKit in Frameworks */,
184187
AE29ED0F2BBE2E7100EB9C4F /* BitcoinDevKit in Frameworks */,
185188
AEAF83B62B7BD4D10019B23B /* CodeScanner in Frameworks */,
189+
AED02B912C9D0B44006DAAAF /* BitcoinDevKit in Frameworks */,
186190
AEB735D32B2CC4B900F99DBB /* BitcoinUI in Frameworks */,
187191
AEE83A492C07F54B00834468 /* BitcoinDevKit in Frameworks */,
188192
AE7D5A0E2A7EE62200EAC8CE /* KeychainAccess in Frameworks */,
@@ -502,6 +506,7 @@
502506
isa = PBXGroup;
503507
children = (
504508
AEE6C74B2ABCB3E200442ADD /* Transaction+Extensions.swift */,
509+
AE83EFDA2C9D07B200B41244 /* ChainPosition+Extensions.swift */,
505510
AE2381B02C60690900F6B00C /* LocalOutput+Extensions.swift */,
506511
AE6F34D72AA6C1800087E700 /* Network+Extensions.swift */,
507512
AE6F34D92AA6C1E00087E700 /* Balance+Extensions.swift */,
@@ -534,7 +539,8 @@
534539
AEAF83B52B7BD4D10019B23B /* CodeScanner */,
535540
AE29ED0E2BBE2E7100EB9C4F /* BitcoinDevKit */,
536541
AEE83A482C07F54B00834468 /* BitcoinDevKit */,
537-
AE8A39C32C8E31D4002C0A62 /* BitcoinDevKit */,
542+
AE187D772C9BB3B50081D0C3 /* BitcoinDevKit */,
543+
AED02B902C9D0B44006DAAAF /* BitcoinDevKit */,
538544
);
539545
productName = BDKSwiftExampleWallet;
540546
productReference = AE4984782A1BBBD6009951E2 /* BDKSwiftExampleWallet.app */;
@@ -591,7 +597,7 @@
591597
AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */,
592598
AEB735D12B2CC4B900F99DBB /* XCRemoteSwiftPackageReference "BitcoinUI" */,
593599
AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */,
594-
AE8A39C22C8E31D4002C0A62 /* XCRemoteSwiftPackageReference "bdk-swift" */,
600+
AED02B8F2C9D0B44006DAAAF /* XCRemoteSwiftPackageReference "bdk-swift" */,
595601
);
596602
productRefGroup = AE4984792A1BBBD6009951E2 /* Products */;
597603
projectDirPath = "";
@@ -629,6 +635,7 @@
629635
isa = PBXSourcesBuildPhase;
630636
buildActionMask = 2147483647;
631637
files = (
638+
AE83EFDB2C9D07B200B41244 /* ChainPosition+Extensions.swift in Sources */,
632639
AE2ADD782B61EFFF00C2A823 /* SettingsViewModel.swift in Sources */,
633640
AEAB03112ABDDB86000C9528 /* FeeViewModel.swift in Sources */,
634641
AEE6C74C2ABCB3E200442ADD /* Transaction+Extensions.swift in Sources */,
@@ -989,14 +996,6 @@
989996
version = 4.2.2;
990997
};
991998
};
992-
AE8A39C22C8E31D4002C0A62 /* XCRemoteSwiftPackageReference "bdk-swift" */ = {
993-
isa = XCRemoteSwiftPackageReference;
994-
repositoryURL = "https://github.com/bitcoindevkit/bdk-swift.git";
995-
requirement = {
996-
kind = exactVersion;
997-
version = "1.0.0-beta.2";
998-
};
999-
};
1000999
AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */ = {
10011000
isa = XCRemoteSwiftPackageReference;
10021001
repositoryURL = "https://github.com/twostraws/CodeScanner.git";
@@ -1013,9 +1012,21 @@
10131012
kind = branch;
10141013
};
10151014
};
1015+
AED02B8F2C9D0B44006DAAAF /* XCRemoteSwiftPackageReference "bdk-swift" */ = {
1016+
isa = XCRemoteSwiftPackageReference;
1017+
repositoryURL = "https://github.com/bitcoindevkit/bdk-swift.git";
1018+
requirement = {
1019+
kind = exactVersion;
1020+
version = "1.0.0-beta.2";
1021+
};
1022+
};
10161023
/* End XCRemoteSwiftPackageReference section */
10171024

10181025
/* Begin XCSwiftPackageProductDependency section */
1026+
AE187D772C9BB3B50081D0C3 /* BitcoinDevKit */ = {
1027+
isa = XCSwiftPackageProductDependency;
1028+
productName = BitcoinDevKit;
1029+
};
10191030
AE29ED0E2BBE2E7100EB9C4F /* BitcoinDevKit */ = {
10201031
isa = XCSwiftPackageProductDependency;
10211032
productName = BitcoinDevKit;
@@ -1025,11 +1036,6 @@
10251036
package = AE7D5A0C2A7EE62200EAC8CE /* XCRemoteSwiftPackageReference "KeychainAccess" */;
10261037
productName = KeychainAccess;
10271038
};
1028-
AE8A39C32C8E31D4002C0A62 /* BitcoinDevKit */ = {
1029-
isa = XCSwiftPackageProductDependency;
1030-
package = AE8A39C22C8E31D4002C0A62 /* XCRemoteSwiftPackageReference "bdk-swift" */;
1031-
productName = BitcoinDevKit;
1032-
};
10331039
AEAF83B52B7BD4D10019B23B /* CodeScanner */ = {
10341040
isa = XCSwiftPackageProductDependency;
10351041
package = AEAF83B42B7BD4D10019B23B /* XCRemoteSwiftPackageReference "CodeScanner" */;
@@ -1040,6 +1046,11 @@
10401046
package = AEB735D12B2CC4B900F99DBB /* XCRemoteSwiftPackageReference "BitcoinUI" */;
10411047
productName = BitcoinUI;
10421048
};
1049+
AED02B902C9D0B44006DAAAF /* BitcoinDevKit */ = {
1050+
isa = XCSwiftPackageProductDependency;
1051+
package = AED02B8F2C9D0B44006DAAAF /* XCRemoteSwiftPackageReference "bdk-swift" */;
1052+
productName = BitcoinDevKit;
1053+
};
10431054
AEE83A482C07F54B00834468 /* BitcoinDevKit */ = {
10441055
isa = XCSwiftPackageProductDependency;
10451056
productName = BitcoinDevKit;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//
2+
// ChainPosition+Extensions.swift
3+
// BDKSwiftExampleWallet
4+
//
5+
// Created by Matthew Ramsden on 9/19/24.
6+
//
7+
8+
import BitcoinDevKit
9+
import Foundation
10+
11+
extension ChainPosition {
12+
func isBefore(_ other: ChainPosition) -> Bool {
13+
switch (self, other) {
14+
case (.unconfirmed, .confirmed):
15+
// Unconfirmed should come before confirmed.
16+
return true
17+
case (.confirmed, .unconfirmed):
18+
// Confirmed should come after unconfirmed.
19+
return false
20+
case (.unconfirmed(let timestamp1), .unconfirmed(let timestamp2)):
21+
// If both are unconfirmed, compare by timestamp (optional).
22+
return timestamp1 < timestamp2
23+
case (.confirmed(let blockTime1), .confirmed(let blockTime2)):
24+
// If both are confirmed, compare by block height descending.
25+
return blockTime1.blockId.height > blockTime2.blockId.height
26+
}
27+
}
28+
}

BDKSwiftExampleWallet/Resources/Localizable.xcstrings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,7 @@
400400
}
401401
},
402402
"Navigation Title" : {
403+
"extractionState" : "stale",
403404
"localizations" : {
404405
"fr" : {
405406
"stringUnit" : {

BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ private class BDKService {
5454
throw WalletError.walletNotFound
5555
}
5656
let transactions = wallet.transactions()
57-
return transactions
57+
let sortedTransactions = transactions.sorted { (tx1, tx2) in
58+
return tx1.chainPosition.isBefore(tx2.chainPosition)
59+
}
60+
return sortedTransactions
5861
}
5962

6063
func listUnspent() throws -> [LocalOutput] {

BDKSwiftExampleWallet/View/Activity/TransactionListView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ struct TransactionListView: View {
3636
} else {
3737

3838
ForEach(
39-
transactions.sorted(by: { $0.transaction.vsize() > $1.transaction.vsize() }),
39+
transactions,
4040
id: \.transaction.transactionID
4141
) { item in
4242
let canonicalTx = item

0 commit comments

Comments
 (0)