@ledgerhq/coin-aptos 2.0.0-nightly.4 → 2.0.0

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 (217) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.unimportedrc.json +18 -6
  3. package/CHANGELOG.md +156 -29
  4. package/jest.config.js +2 -1
  5. package/jest.integ.config.js +8 -0
  6. package/lib/__tests__/api/index.integ.test.d.ts +2 -0
  7. package/lib/__tests__/api/index.integ.test.d.ts.map +1 -0
  8. package/lib/__tests__/api/index.integ.test.js +52 -0
  9. package/lib/__tests__/api/index.integ.test.js.map +1 -0
  10. package/lib/__tests__/api/index.test.js +48 -460
  11. package/lib/__tests__/api/index.test.js.map +1 -1
  12. package/lib/__tests__/bridge/broadcast.test.js +5 -5
  13. package/lib/__tests__/bridge/broadcast.test.js.map +1 -1
  14. package/lib/__tests__/bridge/buildTransaction.test.js +6 -6
  15. package/lib/__tests__/bridge/buildTransaction.test.js.map +1 -1
  16. package/lib/__tests__/bridge/createTransaction.test.js +1 -1
  17. package/lib/__tests__/bridge/createTransaction.test.js.map +1 -1
  18. package/lib/__tests__/bridge/getFeesForTransaction.test.js +9 -9
  19. package/lib/__tests__/bridge/getFeesForTransaction.test.js.map +1 -1
  20. package/lib/__tests__/bridge/prepareTransaction.test.js +3 -3
  21. package/lib/__tests__/bridge/prepareTransaction.test.js.map +1 -1
  22. package/lib/__tests__/bridge/signOperation.test.js +3 -2
  23. package/lib/__tests__/bridge/signOperation.test.js.map +1 -1
  24. package/lib/__tests__/bridge/synchronisation.test.js +6 -6
  25. package/lib/__tests__/bridge/synchronisation.test.js.map +1 -1
  26. package/lib/__tests__/network/client.test.d.ts +2 -0
  27. package/lib/__tests__/network/client.test.d.ts.map +1 -0
  28. package/lib/__tests__/network/client.test.js +520 -0
  29. package/lib/__tests__/network/client.test.js.map +1 -0
  30. package/lib/api/index.d.ts +4 -33
  31. package/lib/api/index.d.ts.map +1 -1
  32. package/lib/api/index.js +24 -196
  33. package/lib/api/index.js.map +1 -1
  34. package/lib/bridge/broadcast.d.ts +3 -2
  35. package/lib/bridge/broadcast.d.ts.map +1 -1
  36. package/lib/bridge/broadcast.js +4 -3
  37. package/lib/bridge/broadcast.js.map +1 -1
  38. package/lib/bridge/buildTransaction.d.ts +1 -1
  39. package/lib/bridge/buildTransaction.d.ts.map +1 -1
  40. package/lib/bridge/buildTransaction.js.map +1 -1
  41. package/lib/bridge/createTransaction.js +3 -3
  42. package/lib/bridge/createTransaction.js.map +1 -1
  43. package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -1
  44. package/lib/bridge/estimateMaxSpendable.js +5 -4
  45. package/lib/bridge/estimateMaxSpendable.js.map +1 -1
  46. package/lib/bridge/getFeesForTransaction.d.ts +1 -1
  47. package/lib/bridge/getFeesForTransaction.d.ts.map +1 -1
  48. package/lib/bridge/getFeesForTransaction.js +7 -6
  49. package/lib/bridge/getFeesForTransaction.js.map +1 -1
  50. package/lib/bridge/index.d.ts +1 -1
  51. package/lib/bridge/index.d.ts.map +1 -1
  52. package/lib/bridge/logic.d.ts +0 -3
  53. package/lib/bridge/logic.d.ts.map +1 -1
  54. package/lib/bridge/logic.js +1 -4
  55. package/lib/bridge/logic.js.map +1 -1
  56. package/lib/bridge/prepareTransaction.d.ts.map +1 -1
  57. package/lib/bridge/prepareTransaction.js +4 -3
  58. package/lib/bridge/prepareTransaction.js.map +1 -1
  59. package/lib/bridge/signOperation.js +3 -3
  60. package/lib/bridge/signOperation.js.map +1 -1
  61. package/lib/bridge/synchronisation.js +3 -3
  62. package/lib/bridge/synchronisation.js.map +1 -1
  63. package/lib/config.d.ts +13 -0
  64. package/lib/config.d.ts.map +1 -0
  65. package/lib/config.js +9 -0
  66. package/lib/config.js.map +1 -0
  67. package/lib/constants.d.ts +4 -0
  68. package/lib/constants.d.ts.map +1 -1
  69. package/lib/constants.js +8 -1
  70. package/lib/constants.js.map +1 -1
  71. package/lib/network/client.d.ts +36 -0
  72. package/lib/network/client.d.ts.map +1 -0
  73. package/lib/network/client.js +247 -0
  74. package/lib/network/client.js.map +1 -0
  75. package/lib/network/graphql/queries.d.ts.map +1 -0
  76. package/lib/network/graphql/queries.js.map +1 -0
  77. package/lib/network/graphql/types.d.ts.map +1 -0
  78. package/lib/{api → network}/graphql/types.js.map +1 -1
  79. package/lib/network/index.d.ts +2 -1
  80. package/lib/network/index.d.ts.map +1 -1
  81. package/lib/network/index.js +15 -0
  82. package/lib/network/index.js.map +1 -1
  83. package/lib/test/bridgeDatasetTest.d.ts.map +1 -1
  84. package/lib/test/bridgeDatasetTest.js +1 -0
  85. package/lib/test/bridgeDatasetTest.js.map +1 -1
  86. package/lib/types/assets.d.ts +12 -0
  87. package/lib/types/assets.d.ts.map +1 -0
  88. package/lib/types/assets.js +3 -0
  89. package/lib/types/assets.js.map +1 -0
  90. package/lib-es/__tests__/api/index.integ.test.d.ts +2 -0
  91. package/lib-es/__tests__/api/index.integ.test.d.ts.map +1 -0
  92. package/lib-es/__tests__/api/index.integ.test.js +50 -0
  93. package/lib-es/__tests__/api/index.integ.test.js.map +1 -0
  94. package/lib-es/__tests__/api/index.test.js +52 -464
  95. package/lib-es/__tests__/api/index.test.js.map +1 -1
  96. package/lib-es/__tests__/bridge/broadcast.test.js +2 -2
  97. package/lib-es/__tests__/bridge/broadcast.test.js.map +1 -1
  98. package/lib-es/__tests__/bridge/buildTransaction.test.js +2 -2
  99. package/lib-es/__tests__/bridge/buildTransaction.test.js.map +1 -1
  100. package/lib-es/__tests__/bridge/createTransaction.test.js +1 -1
  101. package/lib-es/__tests__/bridge/createTransaction.test.js.map +1 -1
  102. package/lib-es/__tests__/bridge/getFeesForTransaction.test.js +2 -2
  103. package/lib-es/__tests__/bridge/getFeesForTransaction.test.js.map +1 -1
  104. package/lib-es/__tests__/bridge/prepareTransaction.test.js +2 -2
  105. package/lib-es/__tests__/bridge/prepareTransaction.test.js.map +1 -1
  106. package/lib-es/__tests__/bridge/signOperation.test.js +3 -2
  107. package/lib-es/__tests__/bridge/signOperation.test.js.map +1 -1
  108. package/lib-es/__tests__/bridge/synchronisation.test.js +3 -3
  109. package/lib-es/__tests__/bridge/synchronisation.test.js.map +1 -1
  110. package/lib-es/__tests__/network/client.test.d.ts +2 -0
  111. package/lib-es/__tests__/network/client.test.d.ts.map +1 -0
  112. package/lib-es/__tests__/network/client.test.js +515 -0
  113. package/lib-es/__tests__/network/client.test.js.map +1 -0
  114. package/lib-es/api/index.d.ts +4 -33
  115. package/lib-es/api/index.d.ts.map +1 -1
  116. package/lib-es/api/index.js +22 -194
  117. package/lib-es/api/index.js.map +1 -1
  118. package/lib-es/bridge/broadcast.d.ts +3 -2
  119. package/lib-es/bridge/broadcast.d.ts.map +1 -1
  120. package/lib-es/bridge/broadcast.js +4 -3
  121. package/lib-es/bridge/broadcast.js.map +1 -1
  122. package/lib-es/bridge/buildTransaction.d.ts +1 -1
  123. package/lib-es/bridge/buildTransaction.d.ts.map +1 -1
  124. package/lib-es/bridge/buildTransaction.js.map +1 -1
  125. package/lib-es/bridge/createTransaction.js +1 -1
  126. package/lib-es/bridge/createTransaction.js.map +1 -1
  127. package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -1
  128. package/lib-es/bridge/estimateMaxSpendable.js +3 -2
  129. package/lib-es/bridge/estimateMaxSpendable.js.map +1 -1
  130. package/lib-es/bridge/getFeesForTransaction.d.ts +1 -1
  131. package/lib-es/bridge/getFeesForTransaction.d.ts.map +1 -1
  132. package/lib-es/bridge/getFeesForTransaction.js +2 -1
  133. package/lib-es/bridge/getFeesForTransaction.js.map +1 -1
  134. package/lib-es/bridge/index.d.ts +1 -1
  135. package/lib-es/bridge/index.d.ts.map +1 -1
  136. package/lib-es/bridge/logic.d.ts +0 -3
  137. package/lib-es/bridge/logic.d.ts.map +1 -1
  138. package/lib-es/bridge/logic.js +0 -3
  139. package/lib-es/bridge/logic.js.map +1 -1
  140. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -1
  141. package/lib-es/bridge/prepareTransaction.js +3 -2
  142. package/lib-es/bridge/prepareTransaction.js.map +1 -1
  143. package/lib-es/bridge/signOperation.js +1 -1
  144. package/lib-es/bridge/signOperation.js.map +1 -1
  145. package/lib-es/bridge/synchronisation.js +1 -1
  146. package/lib-es/bridge/synchronisation.js.map +1 -1
  147. package/lib-es/config.d.ts +13 -0
  148. package/lib-es/config.d.ts.map +1 -0
  149. package/lib-es/config.js +4 -0
  150. package/lib-es/config.js.map +1 -0
  151. package/lib-es/constants.d.ts +4 -0
  152. package/lib-es/constants.d.ts.map +1 -1
  153. package/lib-es/constants.js +4 -0
  154. package/lib-es/constants.js.map +1 -1
  155. package/lib-es/network/client.d.ts +36 -0
  156. package/lib-es/network/client.d.ts.map +1 -0
  157. package/lib-es/network/client.js +240 -0
  158. package/lib-es/network/client.js.map +1 -0
  159. package/lib-es/network/graphql/queries.d.ts.map +1 -0
  160. package/lib-es/network/graphql/queries.js.map +1 -0
  161. package/lib-es/network/graphql/types.d.ts.map +1 -0
  162. package/lib-es/{api → network}/graphql/types.js.map +1 -1
  163. package/lib-es/network/index.d.ts +2 -1
  164. package/lib-es/network/index.d.ts.map +1 -1
  165. package/lib-es/network/index.js +1 -0
  166. package/lib-es/network/index.js.map +1 -1
  167. package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -1
  168. package/lib-es/test/bridgeDatasetTest.js +1 -0
  169. package/lib-es/test/bridgeDatasetTest.js.map +1 -1
  170. package/lib-es/types/assets.d.ts +12 -0
  171. package/lib-es/types/assets.d.ts.map +1 -0
  172. package/lib-es/types/assets.js +2 -0
  173. package/lib-es/types/assets.js.map +1 -0
  174. package/package.json +12 -10
  175. package/src/__tests__/api/index.integ.test.ts +58 -0
  176. package/src/__tests__/api/index.test.ts +60 -547
  177. package/src/__tests__/bridge/broadcast.test.ts +2 -2
  178. package/src/__tests__/bridge/buildTransaction.test.ts +2 -2
  179. package/src/__tests__/bridge/createTransaction.test.ts +1 -1
  180. package/src/__tests__/bridge/getFeesForTransaction.test.ts +2 -2
  181. package/src/__tests__/bridge/prepareTransaction.test.ts +2 -2
  182. package/src/__tests__/bridge/signOperation.test.ts +6 -3
  183. package/src/__tests__/bridge/synchronisation.test.ts +4 -4
  184. package/src/__tests__/network/client.test.ts +618 -0
  185. package/src/api/index.ts +31 -250
  186. package/src/bridge/broadcast.ts +7 -7
  187. package/src/bridge/buildTransaction.ts +1 -1
  188. package/src/bridge/createTransaction.ts +1 -1
  189. package/src/bridge/estimateMaxSpendable.ts +3 -2
  190. package/src/bridge/getFeesForTransaction.ts +3 -2
  191. package/src/bridge/index.ts +1 -1
  192. package/src/bridge/logic.ts +0 -4
  193. package/src/bridge/prepareTransaction.ts +4 -2
  194. package/src/bridge/signOperation.ts +1 -1
  195. package/src/bridge/synchronisation.ts +1 -1
  196. package/src/config.ts +19 -0
  197. package/src/constants.ts +5 -0
  198. package/src/network/client.ts +315 -0
  199. package/src/network/index.ts +2 -1
  200. package/src/test/bridgeDatasetTest.ts +1 -0
  201. package/src/types/assets.ts +15 -0
  202. package/lib/api/graphql/queries.d.ts.map +0 -1
  203. package/lib/api/graphql/queries.js.map +0 -1
  204. package/lib/api/graphql/types.d.ts.map +0 -1
  205. package/lib-es/api/graphql/queries.d.ts.map +0 -1
  206. package/lib-es/api/graphql/queries.js.map +0 -1
  207. package/lib-es/api/graphql/types.d.ts.map +0 -1
  208. /package/lib/{api → network}/graphql/queries.d.ts +0 -0
  209. /package/lib/{api → network}/graphql/queries.js +0 -0
  210. /package/lib/{api → network}/graphql/types.d.ts +0 -0
  211. /package/lib/{api → network}/graphql/types.js +0 -0
  212. /package/lib-es/{api → network}/graphql/queries.d.ts +0 -0
  213. /package/lib-es/{api → network}/graphql/queries.js +0 -0
  214. /package/lib-es/{api → network}/graphql/types.d.ts +0 -0
  215. /package/lib-es/{api → network}/graphql/types.js +0 -0
  216. /package/src/{api → network}/graphql/queries.ts +0 -0
  217. /package/src/{api → network}/graphql/types.ts +0 -0
@@ -0,0 +1,315 @@
1
+ import { ApolloClient, InMemoryCache } from "@apollo/client";
2
+
3
+ import {
4
+ AccountData,
5
+ Aptos,
6
+ AptosApiType,
7
+ AptosConfig,
8
+ Ed25519PublicKey,
9
+ GasEstimation,
10
+ InputEntryFunctionData,
11
+ InputGenerateTransactionOptions,
12
+ MimeType,
13
+ post,
14
+ RawTransaction,
15
+ SimpleTransaction,
16
+ TransactionResponse,
17
+ UserTransactionResponse,
18
+ PostRequestOptions,
19
+ Block,
20
+ AptosSettings,
21
+ MoveFunctionId,
22
+ } from "@aptos-labs/ts-sdk";
23
+ import { getEnv } from "@ledgerhq/live-env";
24
+ import network from "@ledgerhq/live-network";
25
+ import BigNumber from "bignumber.js";
26
+ import isUndefined from "lodash/isUndefined";
27
+ import { APTOS_ASSET_ID, DEFAULT_GAS, DEFAULT_GAS_PRICE, ESTIMATE_GAS_MUL } from "../constants";
28
+ import { isTestnet } from "../bridge/logic";
29
+ import type { AptosTransaction, TransactionOptions } from "../types";
30
+ import { GetAccountTransactionsData, GetAccountTransactionsDataGt } from "./graphql/queries";
31
+ import {
32
+ GetAccountTransactionsDataQuery,
33
+ GetAccountTransactionsDataGtQueryVariables,
34
+ } from "./graphql/types";
35
+ import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
36
+ import { BlockInfo, FeeEstimation, TransactionIntent } from "@ledgerhq/coin-framework/api/types";
37
+ import { AptosAsset, AptosExtra, AptosFeeParameters, AptosSender } from "../types/assets";
38
+ import { log } from "@ledgerhq/logs";
39
+
40
+ const getApiEndpoint = (currencyId: string) =>
41
+ isTestnet(currencyId) ? getEnv("APTOS_TESTNET_API_ENDPOINT") : getEnv("APTOS_API_ENDPOINT");
42
+ const getIndexerEndpoint = (currencyId: string) =>
43
+ isTestnet(currencyId)
44
+ ? getEnv("APTOS_TESTNET_INDEXER_ENDPOINT")
45
+ : getEnv("APTOS_INDEXER_ENDPOINT");
46
+
47
+ export class AptosAPI {
48
+ private readonly aptosConfig: AptosConfig;
49
+ private readonly aptosClient: Aptos;
50
+ private readonly apolloClient: ApolloClient<object>;
51
+
52
+ constructor(currencyIdOrSettings: AptosSettings | string) {
53
+ if (typeof currencyIdOrSettings === "string") {
54
+ this.aptosConfig = new AptosConfig({
55
+ fullnode: getApiEndpoint(currencyIdOrSettings),
56
+ indexer: getIndexerEndpoint(currencyIdOrSettings),
57
+ });
58
+ } else {
59
+ this.aptosConfig = new AptosConfig(currencyIdOrSettings);
60
+ }
61
+
62
+ this.aptosClient = new Aptos(this.aptosConfig);
63
+ this.apolloClient = new ApolloClient({
64
+ uri: this.aptosConfig.indexer ?? "",
65
+ cache: new InMemoryCache(),
66
+ headers: {
67
+ "x-client": "ledger-live",
68
+ },
69
+ });
70
+ }
71
+
72
+ async getAccount(address: string): Promise<AccountData> {
73
+ return this.aptosClient.getAccountInfo({ accountAddress: address });
74
+ }
75
+
76
+ async getAccountInfo(address: string, startAt?: string) {
77
+ const [balance, transactions, blockHeight] = await Promise.all([
78
+ this.getCoinBalance(address, APTOS_ASSET_ID),
79
+ this.fetchTransactions(address, startAt),
80
+ this.getHeight(),
81
+ ]);
82
+
83
+ return {
84
+ balance,
85
+ transactions,
86
+ blockHeight,
87
+ };
88
+ }
89
+
90
+ async estimateGasPrice(): Promise<GasEstimation> {
91
+ return this.aptosClient.getGasPriceEstimation();
92
+ }
93
+
94
+ async generateTransaction(
95
+ address: string,
96
+ payload: InputEntryFunctionData,
97
+ options: TransactionOptions,
98
+ ): Promise<RawTransaction> {
99
+ const opts: Partial<InputGenerateTransactionOptions> = {};
100
+ if (!isUndefined(options.maxGasAmount)) {
101
+ opts.maxGasAmount = Number(options.maxGasAmount);
102
+ }
103
+
104
+ if (!isUndefined(options.gasUnitPrice)) {
105
+ opts.gasUnitPrice = Number(options.gasUnitPrice);
106
+ }
107
+
108
+ try {
109
+ const { ledger_timestamp } = await this.aptosClient.getLedgerInfo();
110
+ opts.expireTimestamp = Number(Math.ceil(+ledger_timestamp / 1_000_000 + 2 * 60)); // in milliseconds
111
+ } catch {
112
+ // skip
113
+ }
114
+
115
+ return this.aptosClient.transaction.build
116
+ .simple({
117
+ sender: address,
118
+ data: payload,
119
+ options: opts,
120
+ })
121
+ .then(t => t.rawTransaction)
122
+ .catch(error => {
123
+ throw error;
124
+ });
125
+ }
126
+
127
+ async simulateTransaction(
128
+ address: Ed25519PublicKey,
129
+ tx: RawTransaction,
130
+ options = {
131
+ estimateGasUnitPrice: true,
132
+ estimateMaxGasAmount: true,
133
+ estimatePrioritizedGasUnitPrice: false,
134
+ },
135
+ ): Promise<UserTransactionResponse[]> {
136
+ return this.aptosClient.transaction.simulate.simple({
137
+ signerPublicKey: address,
138
+ transaction: { rawTransaction: tx } as SimpleTransaction,
139
+ options,
140
+ });
141
+ }
142
+
143
+ async broadcast(signature: string): Promise<string> {
144
+ const txBytes = Uint8Array.from(Buffer.from(signature, "hex"));
145
+ const pendingTx = await post<PostRequestOptions, TransactionResponse>({
146
+ contentType: MimeType.BCS_SIGNED_TRANSACTION,
147
+ aptosConfig: this.aptosClient.config,
148
+ body: txBytes,
149
+ path: "transactions",
150
+ type: AptosApiType.FULLNODE,
151
+ originMethod: "",
152
+ });
153
+ return pendingTx.data.hash;
154
+ }
155
+
156
+ async getBalance(address: string, token: TokenCurrency): Promise<BigNumber> {
157
+ if (token.tokenType === "coin") {
158
+ return await this.getCoinBalance(address, token.contractAddress);
159
+ } else {
160
+ return await this.getFABalance(address, token.contractAddress);
161
+ }
162
+ }
163
+
164
+ async getLastBlock(): Promise<BlockInfo> {
165
+ const { block_height } = await this.aptosClient.getLedgerInfo();
166
+ const block = await this.aptosClient.getBlockByHeight({ blockHeight: Number(block_height) });
167
+ return {
168
+ height: Number(block.block_height),
169
+ hash: block.block_hash,
170
+ time: new Date(Number(block.block_timestamp)),
171
+ };
172
+ }
173
+
174
+ async getCoinBalance(address: string, contract_address: string): Promise<BigNumber> {
175
+ try {
176
+ const [balanceStr] = await this.aptosClient.view<[string]>({
177
+ payload: {
178
+ function: "0x1::coin::balance",
179
+ typeArguments: [contract_address],
180
+ functionArguments: [address],
181
+ },
182
+ });
183
+ const balance = parseInt(balanceStr, 10);
184
+ return new BigNumber(balance);
185
+ } catch (error) {
186
+ log("error", "getCoinBalance", {
187
+ error,
188
+ });
189
+ return new BigNumber(0);
190
+ }
191
+ }
192
+
193
+ async getFABalance(address: string, contract_address: string): Promise<BigNumber> {
194
+ try {
195
+ const [balanceStr] = await this.aptosClient.view<[string]>({
196
+ payload: {
197
+ function: "0x1::primary_fungible_store::balance",
198
+ typeArguments: ["0x1::object::ObjectCore"],
199
+ functionArguments: [address, contract_address],
200
+ },
201
+ });
202
+ const balance = parseInt(balanceStr, 10);
203
+ return new BigNumber(balance);
204
+ } catch (error) {
205
+ log("error", "getFABalance", {
206
+ error,
207
+ });
208
+ return new BigNumber(0);
209
+ }
210
+ }
211
+
212
+ async estimateFees(
213
+ transactionIntent: TransactionIntent<AptosAsset, AptosExtra, AptosSender>,
214
+ ): Promise<FeeEstimation<AptosFeeParameters>> {
215
+ const publicKeyEd = new Ed25519PublicKey(transactionIntent.sender.xpub);
216
+ const fn: MoveFunctionId = "0x1::aptos_account::transfer_coins";
217
+
218
+ const txPayload: InputEntryFunctionData = {
219
+ function: fn,
220
+ typeArguments: [APTOS_ASSET_ID],
221
+ functionArguments: [transactionIntent.recipient, transactionIntent.amount],
222
+ };
223
+
224
+ const txOptions: TransactionOptions = {
225
+ maxGasAmount: DEFAULT_GAS.toString(),
226
+ gasUnitPrice: DEFAULT_GAS_PRICE.toString(),
227
+ };
228
+
229
+ const tx = await this.generateTransaction(
230
+ transactionIntent.sender.freshAddress,
231
+ txPayload,
232
+ txOptions,
233
+ );
234
+
235
+ const simulation = await this.simulateTransaction(publicKeyEd, tx);
236
+ const completedTx = simulation[0];
237
+
238
+ const gasLimit = new BigNumber(completedTx.gas_used).multipliedBy(ESTIMATE_GAS_MUL);
239
+ const gasPrice = new BigNumber(completedTx.gas_unit_price);
240
+
241
+ const expectedGas = gasPrice.multipliedBy(gasLimit);
242
+
243
+ return {
244
+ value: BigInt(expectedGas.toString()),
245
+ parameters: {
246
+ gasLimit: BigInt(gasLimit.toString()),
247
+ gasPrice: BigInt(gasPrice.toString()),
248
+ },
249
+ };
250
+ }
251
+
252
+ private async fetchTransactions(address: string, gt?: string) {
253
+ if (!address) {
254
+ return [];
255
+ }
256
+
257
+ let query = GetAccountTransactionsData;
258
+ if (gt) {
259
+ query = GetAccountTransactionsDataGt;
260
+ }
261
+
262
+ const queryResponse = await this.apolloClient.query<
263
+ GetAccountTransactionsDataQuery,
264
+ GetAccountTransactionsDataGtQueryVariables
265
+ >({
266
+ query,
267
+ variables: {
268
+ address,
269
+ limit: 1000,
270
+ gt,
271
+ },
272
+ fetchPolicy: "network-only",
273
+ });
274
+
275
+ return Promise.all(
276
+ queryResponse.data.account_transactions.map(({ transaction_version }) => {
277
+ return this.richItemByVersion(transaction_version);
278
+ }),
279
+ );
280
+ }
281
+
282
+ private async richItemByVersion(version: number): Promise<AptosTransaction | null> {
283
+ try {
284
+ const tx: TransactionResponse = await this.aptosClient.getTransactionByVersion({
285
+ ledgerVersion: version,
286
+ });
287
+ const block = await this.getBlock(version);
288
+ return {
289
+ ...tx,
290
+ block,
291
+ } as AptosTransaction;
292
+ } catch (error) {
293
+ log("error", "richItemByVersion", {
294
+ error,
295
+ });
296
+ return null;
297
+ }
298
+ }
299
+
300
+ private async getHeight(): Promise<number> {
301
+ const { data } = await network<Block>({
302
+ method: "GET",
303
+ url: this.aptosConfig.fullnode ?? "",
304
+ });
305
+ return parseInt(data.block_height);
306
+ }
307
+
308
+ private async getBlock(version: number) {
309
+ const block = await this.aptosClient.getBlockByVersion({ ledgerVersion: version });
310
+ return {
311
+ height: parseInt(block.block_height),
312
+ hash: block.block_hash,
313
+ };
314
+ }
315
+ }
@@ -9,10 +9,11 @@ import {
9
9
  RawTransaction,
10
10
  SimpleTransaction,
11
11
  } from "@aptos-labs/ts-sdk";
12
- import { SignerContext } from "@ledgerhq/coin-framework/lib/signer";
12
+ import { SignerContext } from "@ledgerhq/coin-framework/signer";
13
13
  import { Account } from "@ledgerhq/types-live";
14
14
  import { AptosSigner } from "../types";
15
15
  import { sha3_256 as sha3Hash } from "@noble/hashes/sha3";
16
+ export * from "./client";
16
17
 
17
18
  export async function signTransaction(
18
19
  signerContext: SignerContext<AptosSigner>,
@@ -19,6 +19,7 @@ const aptos: CurrenciesData<Transaction> = {
19
19
  ],
20
20
  accounts: [
21
21
  {
22
+ FIXME_tests: ["balance is sum of ops"],
22
23
  raw: {
23
24
  id: "js:2:aptos:d1a8c6a1cdd52dd40c7ea61ee4571fb51fcae440a594c1eca18636928f1d3956:aptos",
24
25
  seedIdentifier: "d6816f4f22f867b56cf9304b776f452a16d107835d73ee8a33c4ced210300583",
@@ -0,0 +1,15 @@
1
+ import type { Asset } from "@ledgerhq/coin-framework/api/types";
2
+
3
+ export type AptosAsset = Asset;
4
+
5
+ export type AptosExtra = Record<string, unknown>;
6
+
7
+ export type AptosSender = {
8
+ xpub: string;
9
+ freshAddress: string;
10
+ };
11
+
12
+ export type AptosFeeParameters = {
13
+ gasLimit: bigint;
14
+ gasPrice: bigint;
15
+ };
@@ -1 +0,0 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/api/graphql/queries.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,6BAA6B,uCAczC,CAAC;AACF,eAAO,MAAM,0BAA0B,uCAWtC,CAAC;AACF,eAAO,MAAM,4BAA4B,uCAWxC,CAAC;AACF,eAAO,MAAM,4BAA4B,uCAWxC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/api/graphql/queries.ts"],"names":[],"mappings":";;;AAAA,qDAAqD;AACrD,2CAAqC;AAExB,QAAA,6BAA6B,GAAG,IAAA,YAAG,EAAA;;;;;;;;;;;;;;CAc/C,CAAC;AACW,QAAA,0BAA0B,GAAG,IAAA,YAAG,EAAA;;;;;;;;;;;CAW5C,CAAC;AACW,QAAA,4BAA4B,GAAG,IAAA,YAAG,EAAA;;;;;;;;;;;CAW9C,CAAC;AACW,QAAA,4BAA4B,GAAG,IAAA,YAAG,EAAA;;;;;;;;;;;CAW9C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/graphql/types.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/api/graphql/queries.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,6BAA6B,uCAczC,CAAC;AACF,eAAO,MAAM,0BAA0B,uCAWtC,CAAC;AACF,eAAO,MAAM,4BAA4B,uCAWxC,CAAC;AACF,eAAO,MAAM,4BAA4B,uCAWxC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/api/graphql/queries.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAA;;;;;;;;;;;;;;CAc/C,CAAC;AACF,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAA;;;;;;;;;;;CAW5C,CAAC;AACF,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAA;;;;;;;;;;;CAW9C,CAAC;AACF,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAA;;;;;;;;;;;CAW9C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/graphql/types.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes