Skip to content

Commit 108556d

Browse files
authored
Feat/mev protection walletapi (#8829)
* use mev protection opt-in * wallet-api mev protection * changeset * target proper wallet api server version * cleanup broadcastConfig
1 parent c2fd8f7 commit 108556d

File tree

7 files changed

+48
-6
lines changed

7 files changed

+48
-6
lines changed

.changeset/giant-beans-study.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"ledger-live-desktop": patch
3+
"live-mobile": patch
4+
"@ledgerhq/live-common": patch
5+
---
6+
7+
feat: use mev protection opt-in with wallet-api / wallet-connect

apps/ledger-live-desktop/src/renderer/components/Web3AppWebview/WalletAPIWebview.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import { track } from "~/renderer/analytics/segment";
3232
import SelectAccountAndCurrencyDrawer from "~/renderer/drawers/DataSelector/SelectAccountAndCurrencyDrawer";
3333
import { OperationDetails } from "~/renderer/drawers/OperationDetails";
3434
import { setDrawer } from "~/renderer/drawers/Provider";
35-
import { shareAnalyticsSelector } from "~/renderer/reducers/settings";
35+
import { mevProtectionSelector, shareAnalyticsSelector } from "~/renderer/reducers/settings";
3636
import { walletSelector } from "~/renderer/reducers/wallet";
3737
import { getStoreValue, setStoreValue } from "~/renderer/store";
3838
import { updateAccountWithUpdater } from "~/renderer/actions/accounts";
@@ -238,6 +238,7 @@ function useWebView(
238238
customWebviewStyle?: React.CSSProperties,
239239
) {
240240
const accounts = useSelector(flattenAccountsSelector);
241+
const mevProtected = useSelector(mevProtectionSelector);
241242

242243
const uiHook = useUiHook(manifest, tracking);
243244
const shareAnalytics = useSelector(shareAnalyticsSelector);
@@ -247,6 +248,7 @@ function useWebView(
247248
userId,
248249
tracking: shareAnalytics,
249250
wallet,
251+
mevProtected,
250252
});
251253

252254
const webviewHook = useMemo(() => {
@@ -290,6 +292,7 @@ function useWebView(
290292
currentAccountHistDb,
291293
tracking,
292294
initialAccountId: inputs?.accountId?.toString(),
295+
mevProtected,
293296
});
294297

295298
const handleMessage = useCallback(

apps/ledger-live-mobile/src/components/Web3AppWebview/helpers.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { WebviewAPI, WebviewProps, WebviewState } from "./types";
2727
import prepareSignTransaction from "./liveSDKLogic";
2828
import { StackNavigatorNavigation } from "../RootNavigator/types/helpers";
2929
import { BaseNavigatorStackParamList } from "../RootNavigator/types/BaseNavigator";
30-
import { trackingEnabledSelector } from "../../reducers/settings";
30+
import { mevProtectionSelector, trackingEnabledSelector } from "../../reducers/settings";
3131
import deviceStorage from "../../logic/storeWrapper";
3232
import { track } from "../../analytics";
3333
import getOrCreateUser from "../../user";
@@ -76,6 +76,7 @@ export function useWebView(
7676
);
7777

7878
const accounts = useSelector(flattenAccountsSelector);
79+
const mevProtected = useSelector(mevProtectionSelector);
7980

8081
const uiHook = useUiHook();
8182
const trackingEnabled = useSelector(trackingEnabledSelector);
@@ -85,6 +86,7 @@ export function useWebView(
8586
userId,
8687
tracking: trackingEnabled,
8788
wallet,
89+
mevProtected,
8890
});
8991

9092
const webviewHook = useMemo(() => {
@@ -145,6 +147,7 @@ export function useWebView(
145147
postMessage: webviewHook.postMessage,
146148
tracking,
147149
initialAccountId: inputs?.accountId?.toString(),
150+
mevProtected,
148151
});
149152

150153
const onMessage = useCallback(

libs/ledger-live-common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@
194194
"@ledgerhq/wallet-api-client": "^1.6.0",
195195
"@ledgerhq/wallet-api-core": "^1.13.0",
196196
"@ledgerhq/wallet-api-exchange-module": "workspace:^",
197-
"@ledgerhq/wallet-api-server": "^1.6.0",
197+
"@ledgerhq/wallet-api-server": "^1.7.0",
198198
"@noble/hashes": "1.6.1",
199199
"@stricahq/typhonjs": "^2.0.0",
200200
"@taquito/ledger-signer": "^20.0.0",

libs/ledger-live-common/src/wallet-api/react.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,13 +208,20 @@ function useTransport(postMessage: (message: string) => void | undefined): Trans
208208
}, [postMessage]);
209209
}
210210

211-
export function useConfig({ appId, userId, tracking, wallet }: ServerConfig): ServerConfig {
211+
export function useConfig({
212+
appId,
213+
userId,
214+
tracking,
215+
wallet,
216+
mevProtected,
217+
}: ServerConfig): ServerConfig {
212218
return useMemo(
213219
() => ({
214220
appId,
215221
userId,
216222
tracking,
217223
wallet,
224+
mevProtected,
218225
}),
219226
[appId, tracking, userId, wallet],
220227
);
@@ -561,6 +568,7 @@ export function useWalletAPIServer({
561568
optimisticOperation = await bridge.broadcast({
562569
account: mainAccount,
563570
signedOperation,
571+
broadcastConfig: { mevProtected: !!config.mevProtected },
564572
});
565573
tracking.broadcastSuccess(manifest);
566574
} catch (error) {

libs/ledger-live-common/src/wallet-api/useDappLogic.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ export function useDappLogic({
207207
tracking,
208208
currentAccountHistDb,
209209
initialAccountId,
210+
mevProtected,
210211
}: {
211212
manifest: AppManifest;
212213
postMessage: (message: string) => void;
@@ -215,6 +216,7 @@ export function useDappLogic({
215216
tracking: TrackingAPI;
216217
currentAccountHistDb?: CurrentAccountHistDB;
217218
initialAccountId?: string;
219+
mevProtected?: boolean;
218220
}) {
219221
const nanoApp = manifest.dapp?.nanoApp;
220222
const dependencies = manifest.dapp?.dependencies;
@@ -493,6 +495,7 @@ export function useDappLogic({
493495
optimisticOperation = await bridge.broadcast({
494496
account: mainAccount,
495497
signedOperation: signedTransaction,
498+
broadcastConfig: { mevProtected: !!mevProtected },
496499
});
497500
}
498501

pnpm-lock.yaml

Lines changed: 20 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)