Skip to content

Commit 26cfaf4

Browse files
committed
Apollo: Release source code for 53.1
1 parent c8a7721 commit 26cfaf4

File tree

65 files changed

+2439
-1229
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+2439
-1229
lines changed

android/CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@ follow [https://changelog.md/](https://changelog.md/) guidelines.
66

77
## [Unreleased]
88

9+
## [53.1] - 2025-02-21
10+
11+
### ADDED
12+
13+
- Revamped real time fees calculation
14+
- Background notification processing reliability improvements
15+
16+
### FIXED
17+
18+
- Non deterministic bug regarding hardened key derivation
19+
920
## [52.7] - 2025-01-30
1021

1122
### ADDED

android/apollo/src/main/java/io/muun/apollo/data/di/DataModule.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.muun.apollo.data.os.execution.ExecutionTransformerFactory;
1919
import io.muun.apollo.data.os.execution.JobExecutor;
2020
import io.muun.apollo.data.preferences.RepositoryRegistry;
21+
import io.muun.apollo.data.preferences.UserRepository;
2122
import io.muun.apollo.domain.action.NotificationActions;
2223
import io.muun.apollo.domain.action.NotificationPoller;
2324
import io.muun.apollo.domain.libwallet.GoLibwalletService;
@@ -47,7 +48,7 @@ public class DataModule {
4748
private final Func3<
4849
Context,
4950
ExecutionTransformerFactory,
50-
RepositoryRegistry,
51+
UserRepository,
5152
NotificationService
5253
>
5354
notificationServiceFactory;
@@ -64,7 +65,7 @@ public DataModule(
6465
Func3<
6566
Context,
6667
ExecutionTransformerFactory,
67-
RepositoryRegistry,
68+
UserRepository,
6869
NotificationService
6970
> notificationServiceFactory,
7071
Func1<Context, AppStandbyBucketProvider> appStandbyBucketProviderFactory,
@@ -127,9 +128,13 @@ DaoManager provideDaoManager(
127128
NotificationService provideNotificationService(
128129
Context context,
129130
ExecutionTransformerFactory executionTransformerFactory,
130-
RepositoryRegistry repoRegistry
131+
UserRepository userRepository
131132
) {
132-
return notificationServiceFactory.call(context, executionTransformerFactory, repoRegistry);
133+
return notificationServiceFactory.call(
134+
context,
135+
executionTransformerFactory,
136+
userRepository
137+
);
133138
}
134139

135140
@Provides

android/apollo/src/main/java/io/muun/apollo/data/external/Gen.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import io.muun.apollo.data.preferences.stored.StoredEkVerificationCodes
44
import io.muun.apollo.domain.model.BitcoinAmount
55
import io.muun.apollo.domain.model.Contact
66
import io.muun.apollo.domain.model.ExchangeRateWindow
7+
import io.muun.apollo.domain.model.FeeBumpFunctions
78
import io.muun.apollo.domain.model.FeeWindow
89
import io.muun.apollo.domain.model.ForwardingPolicy
910
import io.muun.apollo.domain.model.IncomingSwap
@@ -273,9 +274,12 @@ object Gen {
273274
* Get a FeeBumpFunctions vector
274275
*/
275276
fun feeBumpFunctions() =
276-
listOf(
277-
"QsgAAAAAAAAAAAAAf4AAAD+AAABAAAAA", // [[100, 0, 0], [+Inf, 1, 2]]
278-
"f4AAAD+AAAAAAAAA" // [[+Inf, 1, 0]]]
277+
FeeBumpFunctions(
278+
"idTest",
279+
listOf(
280+
"QsgAAAAAAAAAAAAAf4AAAD+AAABAAAAA", // [[100, 0, 0], [+Inf, 1, 2]]
281+
"f4AAAD+AAAAAAAAA" // [[+Inf, 1, 0]]]
282+
)
279283
)
280284
/**
281285
* Get a Transaction Hash.

android/apollo/src/main/java/io/muun/apollo/data/net/ApiObjectsMapper.java

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.muun.apollo.data.os.GooglePlayServicesHelper;
88
import io.muun.apollo.data.os.PackageManagerInfoProvider;
99
import io.muun.apollo.data.serialization.dates.ApolloZonedDateTime;
10+
import io.muun.apollo.domain.libwallet.FeeBumpRefreshPolicy;
1011
import io.muun.apollo.domain.libwallet.Invoice;
1112
import io.muun.apollo.domain.model.BackgroundEvent;
1213
import io.muun.apollo.domain.model.BitcoinAmount;
@@ -44,9 +45,9 @@
4445
import io.muun.common.api.PhoneNumberJson;
4546
import io.muun.common.api.PublicKeyJson;
4647
import io.muun.common.api.PublicProfileJson;
48+
import io.muun.common.api.RealTimeFeesRequestJson;
4749
import io.muun.common.api.StartEmailSetupJson;
4850
import io.muun.common.api.SubmarineSwapRequestJson;
49-
import io.muun.common.api.UnconfirmedOutpointsJson;
5051
import io.muun.common.api.UserInvoiceJson;
5152
import io.muun.common.api.UserProfileJson;
5253
import io.muun.common.crypto.ChallengePublicKey;
@@ -232,7 +233,9 @@ public ClientJson mapClient(
232233
final long appSize,
233234
final List<String> hardwareAddresses,
234235
final String vbMeta,
235-
final String efsCreationTimeInSeconds
236+
final String efsCreationTimeInSeconds,
237+
final Boolean isLowRamDevice,
238+
final Long firstInstallTimeInMs
236239
) {
237240
return new ClientJson(
238241
ClientTypeJson.APOLLO,
@@ -278,7 +281,9 @@ public ClientJson mapClient(
278281
appSize,
279282
hardwareAddresses,
280283
vbMeta,
281-
efsCreationTimeInSeconds
284+
efsCreationTimeInSeconds,
285+
isLowRamDevice,
286+
firstInstallTimeInMs
282287
);
283288
}
284289

@@ -415,7 +420,9 @@ public CreateFirstSessionJson mapCreateFirstSession(
415420
final Long appSize,
416421
final List<String> hardwareAddresses,
417422
final String vbMeta,
418-
final String efsCreationTimeInSeconds
423+
final String efsCreationTimeInSeconds,
424+
final Boolean isLowRamDevice,
425+
final Long firstInstallTimeInMs
419426
) {
420427

421428
return new CreateFirstSessionJson(
@@ -442,7 +449,10 @@ public CreateFirstSessionJson mapCreateFirstSession(
442449
appSize,
443450
hardwareAddresses,
444451
vbMeta,
445-
efsCreationTimeInSeconds
452+
efsCreationTimeInSeconds,
453+
isLowRamDevice,
454+
firstInstallTimeInMs
455+
446456
),
447457
gcmToken,
448458
primaryCurrency,
@@ -479,7 +489,9 @@ public CreateLoginSessionJson mapCreateLoginSession(
479489
final Long appSize,
480490
final List<String> hardwareAddresses,
481491
final String vbMeta,
482-
final String efsCreationTimeInSeconds
492+
final String efsCreationTimeInSeconds,
493+
final Boolean isLowRamDevice,
494+
final Long firstInstallTimeInMs
483495
) {
484496

485497
return new CreateLoginSessionJson(
@@ -506,7 +518,9 @@ public CreateLoginSessionJson mapCreateLoginSession(
506518
appSize,
507519
hardwareAddresses,
508520
vbMeta,
509-
efsCreationTimeInSeconds
521+
efsCreationTimeInSeconds,
522+
isLowRamDevice,
523+
firstInstallTimeInMs
510524
),
511525
gcmToken,
512526
email
@@ -541,7 +555,9 @@ public CreateRcLoginSessionJson mapCreateRcLoginSession(
541555
final Long appSize,
542556
final List<String> hardwareAddresses,
543557
final String vbMeta,
544-
final String efsCreationTimeInSeconds
558+
final String efsCreationTimeInSeconds,
559+
final Boolean isLowRamDevice,
560+
final Long firstInstallTimeInMs
545561
) {
546562

547563
return new CreateRcLoginSessionJson(
@@ -568,7 +584,9 @@ public CreateRcLoginSessionJson mapCreateRcLoginSession(
568584
appSize,
569585
hardwareAddresses,
570586
vbMeta,
571-
efsCreationTimeInSeconds
587+
efsCreationTimeInSeconds,
588+
isLowRamDevice,
589+
firstInstallTimeInMs
572590
),
573591
gcmToken,
574592
new ChallengeKeyJson(
@@ -771,11 +789,12 @@ private ExportEmergencyKitJson.Method mapExportMethod(
771789
}
772790

773791
/**
774-
* Creates a UnconfirmedOutpointsJson.
792+
* Creates a RealTimeFeesRequestJson.
775793
*/
776794
@NotNull
777-
public UnconfirmedOutpointsJson mapUnconfirmedOutpointsJson(
778-
@NotNull List<SizeForAmount> sizeProgression
795+
public RealTimeFeesRequestJson mapRealTimeFeesRequestJson(
796+
@NotNull List<SizeForAmount> sizeProgression,
797+
@NotNull FeeBumpRefreshPolicy feeBumpRefreshPolicy
779798
) {
780799
final List<String> unconfirmedUtxos = new ArrayList<>();
781800

@@ -784,7 +803,28 @@ public UnconfirmedOutpointsJson mapUnconfirmedOutpointsJson(
784803
unconfirmedUtxos.add(sizeForAmount.outpoint);
785804
}
786805
}
806+
;
807+
return new RealTimeFeesRequestJson(
808+
unconfirmedUtxos,
809+
mapFeeBumpRefreshPolicy(feeBumpRefreshPolicy)
810+
);
811+
}
787812

788-
return new UnconfirmedOutpointsJson(unconfirmedUtxos);
813+
@NotNull
814+
private RealTimeFeesRequestJson.FeeBumpRefreshPolicy mapFeeBumpRefreshPolicy(
815+
@NotNull FeeBumpRefreshPolicy feeBumpRefreshPolicy
816+
) {
817+
switch (feeBumpRefreshPolicy) {
818+
case PERIODIC:
819+
return RealTimeFeesRequestJson.FeeBumpRefreshPolicy.PERIODIC;
820+
case FOREGROUND:
821+
return RealTimeFeesRequestJson.FeeBumpRefreshPolicy.FOREGROUND;
822+
case NTS_CHANGED:
823+
return RealTimeFeesRequestJson.FeeBumpRefreshPolicy.CHANGED_NEXT_TRANSACTION_SIZE;
824+
case NEW_OP_BLOCKINGLY:
825+
return RealTimeFeesRequestJson.FeeBumpRefreshPolicy.NEW_OPERATION;
826+
default:
827+
throw new MissingCaseError(feeBumpRefreshPolicy);
828+
}
789829
}
790830
}

android/apollo/src/main/java/io/muun/apollo/data/net/HoustonClient.java

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.muun.apollo.data.net.base.BaseClient;
44
import io.muun.apollo.data.net.okio.ContentUriRequestBody;
5+
import io.muun.apollo.data.os.ActivityManagerInfoProvider;
56
import io.muun.apollo.data.os.BuildInfoProvider;
67
import io.muun.apollo.data.os.CpuInfoProvider;
78
import io.muun.apollo.data.os.FileInfoProvider;
@@ -22,13 +23,15 @@
2223
import io.muun.apollo.domain.errors.newop.NoPaymentRouteException;
2324
import io.muun.apollo.domain.errors.newop.SwapFailedException;
2425
import io.muun.apollo.domain.errors.newop.UnreachableNodeException;
26+
import io.muun.apollo.domain.libwallet.FeeBumpRefreshPolicy;
2527
import io.muun.apollo.domain.libwallet.Invoice;
2628
import io.muun.apollo.domain.model.ChallengeKeyUpdateMigration;
2729
import io.muun.apollo.domain.model.Contact;
2830
import io.muun.apollo.domain.model.CreateFirstSessionOk;
2931
import io.muun.apollo.domain.model.CreateSessionOk;
3032
import io.muun.apollo.domain.model.CreateSessionRcOk;
3133
import io.muun.apollo.domain.model.EmergencyKitExport;
34+
import io.muun.apollo.domain.model.FulfillmentPushedResult;
3235
import io.muun.apollo.domain.model.IncomingSwapFulfillmentData;
3336
import io.muun.apollo.domain.model.NextTransactionSize;
3437
import io.muun.apollo.domain.model.NotificationReport;
@@ -126,6 +129,8 @@ public class HoustonClient extends BaseClient<HoustonService> {
126129

127130
private final SystemCapabilitiesProvider systemCapabilitiesProvider;
128131

132+
private final ActivityManagerInfoProvider activityManagerInfoProvider;
133+
129134
/**
130135
* Constructor.
131136
*/
@@ -140,7 +145,8 @@ public HoustonClient(
140145
BuildInfoProvider buildInfoProvider,
141146
PackageManagerInfoProvider packageManagerInfoProvider,
142147
FileInfoProvider fileInfoProvider,
143-
SystemCapabilitiesProvider systemCapabilitiesProvider
148+
SystemCapabilitiesProvider systemCapabilitiesProvider,
149+
ActivityManagerInfoProvider activityManagerInfoProvider
144150
) {
145151

146152
super(HoustonService.class);
@@ -155,6 +161,7 @@ public HoustonClient(
155161
this.packageManagerInfoProvider = packageManagerInfoProvider;
156162
this.fileInfoProvider = fileInfoProvider;
157163
this.systemCapabilitiesProvider = systemCapabilitiesProvider;
164+
this.activityManagerInfoProvider = activityManagerInfoProvider;
158165
}
159166

160167
/**
@@ -194,7 +201,9 @@ public Observable<CreateFirstSessionOk> createFirstSession(
194201
fileInfoProvider.getAppSize(),
195202
hardwareCapabilitiesProvider.getHardwareAddresses(),
196203
systemCapabilitiesProvider.getVbMeta(),
197-
fileInfoProvider.getEfsCreationTimeInSeconds()
204+
fileInfoProvider.getEfsCreationTimeInSeconds(),
205+
activityManagerInfoProvider.isLowRamDevice(),
206+
packageManagerInfoProvider.getFirstInstallTimeInMs()
198207
);
199208

200209
return getService().createFirstSession(params)
@@ -236,7 +245,9 @@ public Observable<CreateSessionOk> createLoginSession(
236245
fileInfoProvider.getAppSize(),
237246
hardwareCapabilitiesProvider.getHardwareAddresses(),
238247
systemCapabilitiesProvider.getVbMeta(),
239-
fileInfoProvider.getEfsCreationTimeInSeconds()
248+
fileInfoProvider.getEfsCreationTimeInSeconds(),
249+
activityManagerInfoProvider.isLowRamDevice(),
250+
packageManagerInfoProvider.getFirstInstallTimeInMs()
240251
);
241252

242253
return getService().createLoginSession(params)
@@ -278,8 +289,9 @@ public Observable<Challenge> createRcLoginSession(
278289
fileInfoProvider.getAppSize(),
279290
hardwareCapabilitiesProvider.getHardwareAddresses(),
280291
systemCapabilitiesProvider.getVbMeta(),
281-
fileInfoProvider.getEfsCreationTimeInSeconds()
282-
292+
fileInfoProvider.getEfsCreationTimeInSeconds(),
293+
activityManagerInfoProvider.isLowRamDevice(),
294+
packageManagerInfoProvider.getFirstInstallTimeInMs()
283295
);
284296

285297
return getService().createRecoveryCodeLoginSession(session)
@@ -714,10 +726,13 @@ public Observable<RealTimeData> fetchRealTimeData() {
714726
* @param sizeProgression from NTS
715727
*/
716728
public Observable<RealTimeFees> fetchRealTimeFees(
717-
List<SizeForAmount> sizeProgression
729+
List<SizeForAmount> sizeProgression,
730+
FeeBumpRefreshPolicy feeBumpRefreshPolicy
718731
) {
719732
return getService()
720-
.fetchRealTimeFees(apiMapper.mapUnconfirmedOutpointsJson(sizeProgression))
733+
.fetchRealTimeFees(
734+
apiMapper.mapRealTimeFeesRequestJson(sizeProgression, feeBumpRefreshPolicy)
735+
)
721736
.map(modelMapper::mapRealTimeFees);
722737
}
723738

@@ -834,12 +849,13 @@ public Single<IncomingSwapFulfillmentData> fetchFulfillmentData(final String inc
834849
/**
835850
* Push the fulfillment TX for an incoming swap.
836851
*/
837-
public Completable pushFulfillmentTransaction(
852+
public Single<FulfillmentPushedResult> pushFulfillmentTransaction(
838853
final String incomingSwap,
839854
final RawTransaction rawTransaction
840855
) {
841856

842-
return getService().pushFulfillmentTransaction(incomingSwap, rawTransaction);
857+
return getService().pushFulfillmentTransaction(incomingSwap, rawTransaction)
858+
.map(modelMapper::mapFulfillmentPushed);
843859
}
844860

845861
/**

0 commit comments

Comments
 (0)