@ledgerhq/hw-app-eth 7.0.0-next.0 → 7.0.0-nightly.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +35 -3
  3. package/CHANGELOG.md +21 -5
  4. package/README.md +2 -1
  5. package/lib/Eth.d.ts.map +1 -1
  6. package/lib/Eth.js +1 -0
  7. package/lib/Eth.js.map +1 -1
  8. package/lib/modules/Uniswap/constants.d.ts +24 -0
  9. package/lib/modules/Uniswap/constants.d.ts.map +1 -0
  10. package/lib/modules/Uniswap/constants.js +59 -0
  11. package/lib/modules/Uniswap/constants.js.map +1 -0
  12. package/lib/modules/Uniswap/decoders.d.ts +3 -0
  13. package/lib/modules/Uniswap/decoders.d.ts.map +1 -0
  14. package/lib/modules/Uniswap/decoders.js +46 -0
  15. package/lib/modules/Uniswap/decoders.js.map +1 -0
  16. package/lib/modules/Uniswap/index.d.ts +44 -0
  17. package/lib/modules/Uniswap/index.d.ts.map +1 -0
  18. package/lib/modules/Uniswap/index.js +143 -0
  19. package/lib/modules/Uniswap/index.js.map +1 -0
  20. package/lib/modules/Uniswap/types.d.ts +3 -0
  21. package/lib/modules/Uniswap/types.d.ts.map +1 -0
  22. package/lib/modules/Uniswap/types.js +3 -0
  23. package/lib/modules/Uniswap/types.js.map +1 -0
  24. package/lib/services/ledger/index.d.ts.map +1 -1
  25. package/lib/services/ledger/index.js +20 -5
  26. package/lib/services/ledger/index.js.map +1 -1
  27. package/lib/services/types.d.ts +1 -0
  28. package/lib/services/types.d.ts.map +1 -1
  29. package/lib/utils.js +1 -1
  30. package/lib/utils.js.map +1 -1
  31. package/lib-es/Eth.d.ts.map +1 -1
  32. package/lib-es/Eth.js +1 -0
  33. package/lib-es/Eth.js.map +1 -1
  34. package/lib-es/modules/Uniswap/constants.d.ts +24 -0
  35. package/lib-es/modules/Uniswap/constants.d.ts.map +1 -0
  36. package/lib-es/modules/Uniswap/constants.js +56 -0
  37. package/lib-es/modules/Uniswap/constants.js.map +1 -0
  38. package/lib-es/modules/Uniswap/decoders.d.ts +3 -0
  39. package/lib-es/modules/Uniswap/decoders.d.ts.map +1 -0
  40. package/lib-es/modules/Uniswap/decoders.js +43 -0
  41. package/lib-es/modules/Uniswap/decoders.js.map +1 -0
  42. package/lib-es/modules/Uniswap/index.d.ts +44 -0
  43. package/lib-es/modules/Uniswap/index.d.ts.map +1 -0
  44. package/lib-es/modules/Uniswap/index.js +137 -0
  45. package/lib-es/modules/Uniswap/index.js.map +1 -0
  46. package/lib-es/modules/Uniswap/types.d.ts +3 -0
  47. package/lib-es/modules/Uniswap/types.d.ts.map +1 -0
  48. package/lib-es/modules/Uniswap/types.js +2 -0
  49. package/lib-es/modules/Uniswap/types.js.map +1 -0
  50. package/lib-es/services/ledger/index.d.ts.map +1 -1
  51. package/lib-es/services/ledger/index.js +20 -5
  52. package/lib-es/services/ledger/index.js.map +1 -1
  53. package/lib-es/services/types.d.ts +1 -0
  54. package/lib-es/services/types.d.ts.map +1 -1
  55. package/lib-es/utils.js +1 -1
  56. package/lib-es/utils.js.map +1 -1
  57. package/package.json +10 -5
  58. package/src/Eth.ts +1 -0
  59. package/src/modules/Uniswap/constants.ts +60 -0
  60. package/src/modules/Uniswap/decoders.ts +62 -0
  61. package/src/modules/Uniswap/index.ts +168 -0
  62. package/src/modules/Uniswap/types.ts +14 -0
  63. package/src/services/ledger/index.ts +22 -5
  64. package/src/services/types.ts +2 -0
  65. package/src/utils.ts +1 -1
  66. package/tests/Eth.unit.test.ts +65 -3
  67. package/tests/Uniswap/decoders.unit.test.ts +101 -0
  68. package/tests/Uniswap/index.unit.test.ts +188 -0
  69. package/tests/fixtures/utils.ts +8 -1
  70. package/tests/ledgerService.unit.test.ts +113 -19
@@ -0,0 +1,137 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { log } from "@ledgerhq/logs";
11
+ import { utils } from "ethers";
12
+ import { byContractAddressAndChainId, findERC20SignaturesInfo } from "../../services/ledger/erc20";
13
+ import { UniswapDecoders } from "./decoders";
14
+ import { SWAP_COMMANDS, UNISWAP_EXECUTE_SELECTOR, UNISWAP_UNIVERSAL_ROUTER_ADDRESS, UNISWAP_COMMANDS, } from "./constants";
15
+ /**
16
+ * @ignore for external documentation
17
+ *
18
+ * Indicates if the given calldata is supported by the Uniswap plugin
19
+ * applying some basic checks and testing some assumptions
20
+ * specific to the Uniswap plugin internals
21
+ *
22
+ * @param {`0x${string}`} calldata
23
+ * @param {string | undefined} to
24
+ * @param {number} chainId
25
+ * @param {CommandsAndTokens} commandsAndTokens
26
+ * @returns {boolean}
27
+ */
28
+ export const isSupported = (calldata, to, chainId, commandsAndTokens) => {
29
+ const selector = calldata.slice(0, 10);
30
+ const contractAddress = to === null || to === void 0 ? void 0 : to.toLowerCase();
31
+ if (selector !== UNISWAP_EXECUTE_SELECTOR ||
32
+ contractAddress !== UNISWAP_UNIVERSAL_ROUTER_ADDRESS ||
33
+ !commandsAndTokens.length) {
34
+ return false;
35
+ }
36
+ let endingAsset;
37
+ for (let i = 0; i < commandsAndTokens.length; i++) {
38
+ const [command, tokens] = commandsAndTokens[i];
39
+ if (!command)
40
+ return false;
41
+ if (!SWAP_COMMANDS.includes(command))
42
+ continue;
43
+ const poolVersion = command.slice(0, 2);
44
+ if (endingAsset &&
45
+ // Chained swaps should work as a pipe regarding the traded assets:
46
+ // The last asset of swap 1 should be the first asset of swap 2
47
+ // and the same pool version should be used for both swaps
48
+ (endingAsset.asset !== tokens[0] || endingAsset.poolVersion !== poolVersion)) {
49
+ return false;
50
+ }
51
+ else {
52
+ endingAsset = {
53
+ poolVersion,
54
+ asset: tokens[tokens.length - 1],
55
+ };
56
+ }
57
+ }
58
+ return true;
59
+ };
60
+ /**
61
+ * @ignore for external documentation
62
+ *
63
+ * Provides a list of commands and associated tokens for a given Uniswap calldata
64
+ *
65
+ * @param {`0x${string}`} calldata
66
+ * @param {number} chainId
67
+ * @returns {CommandsAndTokens}
68
+ */
69
+ export const getCommandsAndTokensFromUniswapCalldata = (calldata, chainId) => {
70
+ try {
71
+ const [commands, inputs] = new utils.Interface([
72
+ "function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external payable",
73
+ ]).decodeFunctionData("execute", calldata);
74
+ const commandsBuffer = Buffer.from(commands.slice(2), "hex");
75
+ return commandsBuffer.reduce((acc, curr, i) => {
76
+ const commandName = UNISWAP_COMMANDS[`0x${curr.toString(16).padStart(2, "0")}`];
77
+ if (!commandName)
78
+ return [...acc, [undefined, []]];
79
+ const commandDecoder = UniswapDecoders[commandName];
80
+ return [...acc, [commandName, commandDecoder(inputs[i], chainId)]];
81
+ }, []);
82
+ }
83
+ catch (e) {
84
+ log("Uniswap", "Error decoding Uniswap calldata", e);
85
+ return [];
86
+ }
87
+ };
88
+ /**
89
+ * @ignore for external documentation
90
+ *
91
+ * Returns the necessary APDUs to load the Uniswap plugin
92
+ * and the token descriptors for a transaction
93
+ *
94
+ * @param {Transaction} transaction
95
+ * @param {number} chainId
96
+ * @param {LoadConfig} userConfig
97
+ * @returns {Promise<{ pluginData?: Buffer; tokenDescriptors?: Buffer[] }>}
98
+ */
99
+ export const loadInfosForUniswap = (transaction, chainId, userConfig) => __awaiter(void 0, void 0, void 0, function* () {
100
+ const selector = transaction.data.slice(0, 10);
101
+ const commandsAndTokens = getCommandsAndTokensFromUniswapCalldata(transaction.data, chainId);
102
+ if (!isSupported(selector, transaction.to, chainId, commandsAndTokens)) {
103
+ return {};
104
+ }
105
+ const tokenDescriptorsPromises = Promise.all(commandsAndTokens.flatMap(([, tokens]) => tokens.map((token) => __awaiter(void 0, void 0, void 0, function* () {
106
+ var _a;
107
+ const erc20SignaturesBlob = yield findERC20SignaturesInfo(userConfig || {}, chainId);
108
+ return (_a = byContractAddressAndChainId(token, chainId, erc20SignaturesBlob)) === null || _a === void 0 ? void 0 : _a.data;
109
+ }))));
110
+ const tokenDescriptors = yield tokenDescriptorsPromises.then(descriptors => descriptors.filter((descriptor) => !!descriptor));
111
+ const pluginName = "Uniswap";
112
+ // 1 byte for the length of the plugin name
113
+ const lengthBuff = Buffer.alloc(1);
114
+ lengthBuff.writeUIntBE(pluginName.length, 0, 1);
115
+ // dynamic length bytes for the plugin name
116
+ const pluginNameBuff = Buffer.from(pluginName);
117
+ // 20 bytes for the contract address
118
+ const contractAddressBuff = Buffer.from(UNISWAP_UNIVERSAL_ROUTER_ADDRESS.slice(2), "hex");
119
+ // 4 bytes for the selector
120
+ const selectorBuff = Buffer.from(UNISWAP_EXECUTE_SELECTOR.slice(2), "hex");
121
+ // 70 bytes for the signature
122
+ const signature = Buffer.from(
123
+ // Signature is hardcoded as it would create issues by being in the CAL ethereum.json file
124
+ "3044022014391e8f355867a57fe88f6a5a4dbcb8bf8f888a9db3ff3449caf72d120396bd02200c13d9c3f79400fe0aa0434ac54d59b79503c9964a4abc3e8cd22763e0242935", "hex");
125
+ const pluginData = Buffer.concat([
126
+ lengthBuff,
127
+ pluginNameBuff,
128
+ contractAddressBuff,
129
+ selectorBuff,
130
+ signature,
131
+ ]);
132
+ return {
133
+ pluginData,
134
+ tokenDescriptors,
135
+ };
136
+ });
137
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/Uniswap/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type UniswapSupportedCommand = "V2_SWAP_EXACT_IN" | "V2_SWAP_EXACT_OUT" | "V3_SWAP_EXACT_IN" | "V3_SWAP_EXACT_OUT" | "WRAP_ETH" | "UNWRAP_ETH" | "PERMIT2_PERMIT" | "PERMIT2_TRANSFER_FROM" | "PERMIT2_PERMIT_BATCH" | "PERMIT2_TRANSFER_FROM_BATCH" | "PAY_PORTION";
2
+ export type CommandsAndTokens = [UniswapSupportedCommand | undefined, `0x${string}`[]][];
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/Uniswap/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,GAClB,mBAAmB,GACnB,UAAU,GACV,YAAY,GACZ,gBAAgB,GAChB,uBAAuB,GACvB,sBAAsB,GACtB,6BAA6B,GAC7B,aAAa,CAAC;AAElB,MAAM,MAAM,iBAAiB,GAAG,CAAC,uBAAuB,GAAG,SAAS,EAAE,KAAK,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/Uniswap/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/ledger/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkC,2BAA2B,EAAc,MAAM,UAAU,CAAC;;AAwNnG,wBAIiC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/ledger/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkC,2BAA2B,EAAc,MAAM,UAAU,CAAC;;AA0OnG,wBAIiC"}
@@ -7,14 +7,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- // This implements the resolution of a Transaction using Ledger's own API
10
+ import { utils } from "ethers";
11
11
  import { log } from "@ledgerhq/logs";
12
- import { Interface } from "@ethersproject/abi";
13
12
  import { signDomainResolution, signAddressResolution, } from "@ledgerhq/domain-service/signers/index";
13
+ import { decodeTxInfo, tokenSelectors, nftSelectors, mergeResolutions } from "../../utils";
14
+ import { UNISWAP_UNIVERSAL_ROUTER_ADDRESS } from "../../modules/Uniswap/constants";
14
15
  import { byContractAddressAndChainId, findERC20SignaturesInfo } from "./erc20";
16
+ import { loadInfosForUniswap } from "../../modules/Uniswap";
15
17
  import { loadInfosForContractMethod } from "./contracts";
16
18
  import { getNFTInfo, loadNftPlugin } from "./nfts";
17
- import { decodeTxInfo, tokenSelectors, nftSelectors, mergeResolutions } from "../../utils";
18
19
  /**
19
20
  * @ignore for external documentation
20
21
  *
@@ -74,7 +75,9 @@ const loadNanoAppPlugins = (contractAddress, selector, decodedTx, chainIdTruncat
74
75
  log("ethereum", "no NFT plugin payload for selector " + selector + " and address " + contractAddress);
75
76
  }
76
77
  }
77
- if (shouldResolve.externalPlugins) {
78
+ // Uniswap has its own way of working, so we need to handle it separately
79
+ // This will prevent an error if we add Uniswap to the CAL service
80
+ if (shouldResolve.externalPlugins && contractAddress !== UNISWAP_UNIVERSAL_ROUTER_ADDRESS) {
78
81
  const contractMethodInfos = yield loadInfosForContractMethod(contractAddress, selector, chainIdTruncated, loadConfig);
79
82
  if (contractMethodInfos) {
80
83
  const { plugin, payload, signature, erc20OfInterest, abi } = contractMethodInfos;
@@ -83,7 +86,7 @@ const loadNanoAppPlugins = (contractAddress, selector, decodedTx, chainIdTruncat
83
86
  resolution.externalPlugin.push({ payload, signature });
84
87
  }
85
88
  if (erc20OfInterest && erc20OfInterest.length && abi) {
86
- const contract = new Interface(abi);
89
+ const contract = new utils.Interface(abi);
87
90
  const args = contract.parseTransaction(decodedTx).args;
88
91
  for (const path of erc20OfInterest) {
89
92
  const erc20ContractAddress = path.split(".").reduce((value, seg) => {
@@ -96,6 +99,7 @@ const loadNanoAppPlugins = (contractAddress, selector, decodedTx, chainIdTruncat
96
99
  nft: false,
97
100
  externalPlugins: false,
98
101
  token: true, // enforcing resolution of tokens for external plugins that need info on assets (e.g. for a swap)
102
+ uniswapV3: false,
99
103
  });
100
104
  resolution = mergeResolutions([resolution, externalPluginResolution]);
101
105
  }
@@ -105,6 +109,16 @@ const loadNanoAppPlugins = (contractAddress, selector, decodedTx, chainIdTruncat
105
109
  log("ethereum", "no infos for selector " + selector);
106
110
  }
107
111
  }
112
+ if (shouldResolve.uniswapV3) {
113
+ const { pluginData, tokenDescriptors } = yield loadInfosForUniswap(decodedTx, chainIdTruncated);
114
+ if (pluginData && tokenDescriptors) {
115
+ resolution.externalPlugin.push({
116
+ payload: pluginData.toString("hex"),
117
+ signature: "",
118
+ });
119
+ resolution.erc20Tokens.push(...tokenDescriptors.map(d => d.toString("hex")));
120
+ }
121
+ }
108
122
  return resolution;
109
123
  });
110
124
  /**
@@ -125,6 +139,7 @@ const resolveTransaction = (rawTxHex, loadConfig, resolutionConfig) => __awaiter
125
139
  token: resolutionConfig.erc20 && tokenSelectors.includes(selector),
126
140
  nft: resolutionConfig.nft && nftSelectors.includes(selector),
127
141
  externalPlugins: resolutionConfig.externalPlugins,
142
+ uniswapV3: resolutionConfig.uniswapV3,
128
143
  };
129
144
  const pluginsResolution = yield loadNanoAppPlugins(contractAddress, selector, decodedTx, chainIdTruncated, loadConfig, shouldResolve);
130
145
  if (pluginsResolution) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/ledger/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/ledger/index.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ export type ResolutionConfig = {
26
26
  externalPlugins?: boolean;
27
27
  erc20?: boolean;
28
28
  domains?: DomainDescriptor[];
29
+ uniswapV3?: boolean;
29
30
  };
30
31
  export type LedgerEthTransactionService = {
31
32
  resolveTransaction: (rawTxHex: string, loadConfig: LoadConfig, resolutionConfig: ResolutionConfig) => Promise<LedgerEthTransactionResolution>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,8BAA8B,GAAG;IAE3C,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpB,cAAc,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE9D,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAEvB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAInC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,YAAY,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAE7B,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;IAClD,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;CACrD,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,8BAA8B,GAAG;IAE3C,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEpB,cAAc,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE9D,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAEvB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAInC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,YAAY,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAE7B,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE7B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;IAClD,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;CACrD,CAAC"}
package/lib-es/utils.js CHANGED
@@ -59,7 +59,7 @@ export const decodeTxInfo = (rawTx) => {
59
59
  data: rlpDecoded[5],
60
60
  to: rlpDecoded[3],
61
61
  // Default to 1 for non EIP 155 txs
62
- chainId: rlpTx.length > 6 ? rlpTx[6] : Buffer.from("0x01", "hex"),
62
+ chainId: rlpTx.length > 6 ? rlpTx[6] : Buffer.from("01", "hex"),
63
63
  };
64
64
  }
65
65
  const chainIdSrc = decodedTx.chainId;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/hw-app-eth",
3
- "version": "7.0.0-next.0",
3
+ "version": "7.0.0-nightly.1",
4
4
  "description": "Ledger Hardware Wallet Ethereum Application API",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -31,14 +31,14 @@
31
31
  "axios": "1.7.7",
32
32
  "bignumber.js": "^9.1.2",
33
33
  "semver": "^7.3.5",
34
- "@ledgerhq/cryptoassets-evm-signatures": "^14.0.0-next.0",
35
- "@ledgerhq/domain-service": "^1.2.6-next.0",
34
+ "@ledgerhq/cryptoassets-evm-signatures": "^14.0.0-nightly.1",
35
+ "@ledgerhq/domain-service": "^1.2.6-nightly.1",
36
36
  "@ledgerhq/errors": "^6.19.1",
37
- "@ledgerhq/evm-tools": "^1.2.3-next.0",
37
+ "@ledgerhq/evm-tools": "^1.2.3-nightly.1",
38
38
  "@ledgerhq/hw-transport": "^6.31.4",
39
39
  "@ledgerhq/hw-transport-mocker": "^6.29.4",
40
40
  "@ledgerhq/logs": "^6.12.0",
41
- "@ledgerhq/types-live": "^6.52.0-next.0"
41
+ "@ledgerhq/types-live": "^6.52.0-nightly.1"
42
42
  },
43
43
  "gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec",
44
44
  "devDependencies": {
@@ -53,6 +53,11 @@
53
53
  "ts-jest": "^29.1.1",
54
54
  "ts-node": "^10.4.0"
55
55
  },
56
+ "overrides": {
57
+ "@ethersproject/providers": {
58
+ "ws": "7.5.10"
59
+ }
60
+ },
56
61
  "scripts": {
57
62
  "clean": "rimraf lib lib-es",
58
63
  "build": "tsc && tsc -m ES6 --outDir lib-es",
package/src/Eth.ts CHANGED
@@ -207,6 +207,7 @@ export default class Eth {
207
207
  .resolveTransaction(rawTxHex, this.loadConfig, {
208
208
  externalPlugins: true,
209
209
  erc20: true,
210
+ uniswapV3: false,
210
211
  })
211
212
  .catch(e => {
212
213
  console.warn(
@@ -0,0 +1,60 @@
1
+ import { UniswapSupportedCommand } from "./types";
2
+
3
+ export const UNISWAP_UNIVERSAL_ROUTER_ADDRESS = "0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad";
4
+ export const UNISWAP_EXECUTE_SELECTOR = "0x3593564c";
5
+
6
+ export const WETH_PER_CHAIN_ID = {
7
+ // Ethereum Mainnet
8
+ 1: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
9
+ // Ethereum Goerli
10
+ 5: "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",
11
+ // Ethereum Sepolia
12
+ 11155111: "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",
13
+ // Arbitrum One
14
+ 42161: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
15
+ // Arbitrum Goerli
16
+ 421613: "0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3",
17
+ // Avalanche C-Chain
18
+ 43114: "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",
19
+ // BSC
20
+ 56: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
21
+ // Base
22
+ 8453: "0x4200000000000000000000000000000000000006",
23
+ // Base Goerli
24
+ 84531: "0x44D627f900da8AdaC7561bD73aA745F132450798",
25
+ // Blast
26
+ 23888: "0x4300000000000000000000000000000000000004",
27
+ // Celo
28
+ 42220: new Error("Celo isn't supporting wrapping Eth"),
29
+ // Celo Alfajores
30
+ 44787: new Error("Celo Alfajores isn't supporting wrapping Eth"),
31
+ // Optimism
32
+ 10: "0x4200000000000000000000000000000000000006",
33
+ // Optimism Goerli
34
+ 420: "0x4200000000000000000000000000000000000006",
35
+ // Polygon
36
+ 137: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",
37
+ // Polygon Mumbai
38
+ 80001: "0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889",
39
+ };
40
+
41
+ export const UNISWAP_COMMANDS: Record<`0x${string}`, UniswapSupportedCommand> = {
42
+ "0x08": "V2_SWAP_EXACT_IN",
43
+ "0x09": "V2_SWAP_EXACT_OUT",
44
+ "0x00": "V3_SWAP_EXACT_IN",
45
+ "0x01": "V3_SWAP_EXACT_OUT",
46
+ "0x0b": "WRAP_ETH",
47
+ "0x0c": "UNWRAP_ETH",
48
+ "0x0a": "PERMIT2_PERMIT",
49
+ "0x0d": "PERMIT2_TRANSFER_FROM",
50
+ "0x02": "PERMIT2_PERMIT_BATCH",
51
+ "0x03": "PERMIT2_TRANSFER_FROM_BATCH",
52
+ "0x06": "PAY_PORTION",
53
+ };
54
+
55
+ export const SWAP_COMMANDS: Partial<UniswapSupportedCommand>[] = [
56
+ "V2_SWAP_EXACT_IN",
57
+ "V2_SWAP_EXACT_OUT",
58
+ "V3_SWAP_EXACT_IN",
59
+ "V3_SWAP_EXACT_OUT",
60
+ ] as const;
@@ -0,0 +1,62 @@
1
+ import { utils } from "ethers";
2
+ import { WETH_PER_CHAIN_ID } from "./constants";
3
+ import { UniswapSupportedCommand } from "./types";
4
+
5
+ const swapV2Decoder = (input: `0x${string}`): `0x${string}`[] => {
6
+ const [, , , addresses] = utils.defaultAbiCoder.decode(
7
+ ["address", "uint256", "uint256", "address[]", "bool"],
8
+ input,
9
+ );
10
+
11
+ return addresses.map(address => address.toLowerCase());
12
+ };
13
+
14
+ const swapV3Decoder = (input: `0x${string}`): `0x${string}`[] => {
15
+ const [, , , path] = utils.defaultAbiCoder.decode(
16
+ ["address", "uint256", "uint256", "bytes", "bool"],
17
+ input,
18
+ );
19
+ // Path is at least 43 bytes long for 2 times 20B addresses + 3B fee in between
20
+ // Example for the pattern pattern: 20B address + 3B fee + 20B address
21
+ // more addresses can be included after another 3B space
22
+ const pathBuffer = Buffer.from(path.slice(2), "hex");
23
+
24
+ const tokens: `0x${string}`[] = [];
25
+ let i = 0;
26
+ while (i < pathBuffer.length) {
27
+ tokens.push(
28
+ `0x${pathBuffer
29
+ .subarray(i, i + 20)
30
+ .toString("hex")
31
+ .toLowerCase()}`,
32
+ );
33
+ // Skip 20B address + 3B fee
34
+ i += 23;
35
+ }
36
+
37
+ return tokens;
38
+ };
39
+
40
+ const wrapEthDecoder = (input: `0x${string}`, chainId: number | string): `0x${string}`[] => {
41
+ const contract = WETH_PER_CHAIN_ID[chainId];
42
+ return contract instanceof Error ? [] : [contract.toLowerCase()];
43
+ };
44
+
45
+ const noDecoder = () => [];
46
+
47
+ export const UniswapDecoders: Record<
48
+ UniswapSupportedCommand,
49
+ (input: `0x${string}`, chainId: number | string) => `0x${string}`[]
50
+ > = {
51
+ V2_SWAP_EXACT_IN: swapV2Decoder,
52
+ V2_SWAP_EXACT_OUT: swapV2Decoder,
53
+ V3_SWAP_EXACT_IN: swapV3Decoder,
54
+ V3_SWAP_EXACT_OUT: swapV3Decoder,
55
+ WRAP_ETH: wrapEthDecoder,
56
+ UNWRAP_ETH: wrapEthDecoder,
57
+ PERMIT2_PERMIT: noDecoder,
58
+ PERMIT2_TRANSFER_FROM: noDecoder,
59
+ PERMIT2_PERMIT_BATCH: noDecoder,
60
+ PERMIT2_TRANSFER_FROM_BATCH: noDecoder,
61
+ PAY_PORTION: noDecoder,
62
+ };