@atomiqlabs/chain-starknet 8.1.11 → 8.2.2

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 (63) hide show
  1. package/README.md +74 -0
  2. package/dist/index.d.ts +1 -2
  3. package/dist/index.js +72 -3
  4. package/dist/node/index.d.ts +10 -0
  5. package/dist/node/index.js +15 -0
  6. package/dist/starknet/StarknetInitializer.d.ts +39 -6
  7. package/dist/starknet/StarknetInitializer.js +3 -3
  8. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +7 -6
  9. package/dist/starknet/btcrelay/StarknetBtcRelay.js +8 -8
  10. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +2 -0
  11. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +2 -0
  12. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +3 -1
  13. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +3 -1
  14. package/dist/starknet/chain/StarknetAction.js +1 -1
  15. package/dist/starknet/chain/StarknetChainInterface.d.ts +25 -0
  16. package/dist/starknet/chain/StarknetChainInterface.js +7 -0
  17. package/dist/starknet/chain/modules/StarknetFees.d.ts +15 -19
  18. package/dist/starknet/chain/modules/StarknetFees.js +23 -29
  19. package/dist/starknet/chain/modules/StarknetTransactions.d.ts +32 -6
  20. package/dist/starknet/chain/modules/StarknetTransactions.js +47 -17
  21. package/dist/starknet/contract/StarknetContractBase.d.ts +12 -3
  22. package/dist/starknet/contract/StarknetContractBase.js +2 -2
  23. package/dist/starknet/contract/modules/StarknetContractEvents.js +1 -1
  24. package/dist/starknet/events/StarknetChainEvents.d.ts +3 -0
  25. package/dist/starknet/events/StarknetChainEvents.js +3 -0
  26. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +45 -7
  27. package/dist/starknet/events/StarknetChainEventsBrowser.js +20 -9
  28. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +4 -4
  29. package/dist/starknet/swaps/StarknetSwapContract.js +5 -5
  30. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +1 -1
  31. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +2 -2
  32. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +1 -1
  33. package/dist/starknet/wallet/StarknetBrowserSigner.d.ts +9 -1
  34. package/dist/starknet/wallet/StarknetBrowserSigner.js +31 -1
  35. package/dist/starknet/wallet/StarknetSigner.d.ts +44 -3
  36. package/dist/starknet/wallet/StarknetSigner.js +52 -2
  37. package/dist/utils/Utils.d.ts +1 -1
  38. package/dist/utils/Utils.js +2 -2
  39. package/node/index.d.ts +1 -0
  40. package/node/index.js +3 -0
  41. package/package.json +5 -4
  42. package/src/index.ts +76 -2
  43. package/src/node/index.ts +10 -0
  44. package/src/starknet/StarknetInitializer.ts +40 -1
  45. package/src/starknet/btcrelay/StarknetBtcRelay.ts +19 -16
  46. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +2 -0
  47. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +3 -1
  48. package/src/starknet/chain/StarknetAction.ts +2 -2
  49. package/src/starknet/chain/StarknetChainInterface.ts +29 -1
  50. package/src/starknet/chain/modules/StarknetFees.ts +23 -27
  51. package/src/starknet/chain/modules/StarknetTransactions.ts +59 -18
  52. package/src/starknet/contract/StarknetContractBase.ts +14 -5
  53. package/src/starknet/contract/modules/StarknetContractEvents.ts +1 -1
  54. package/src/starknet/events/StarknetChainEvents.ts +3 -0
  55. package/src/starknet/events/StarknetChainEventsBrowser.ts +51 -10
  56. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +4 -4
  57. package/src/starknet/swaps/StarknetSwapContract.ts +5 -5
  58. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +1 -1
  59. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +3 -3
  60. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +2 -2
  61. package/src/starknet/wallet/StarknetBrowserSigner.ts +39 -2
  62. package/src/starknet/wallet/StarknetSigner.ts +62 -3
  63. package/src/utils/Utils.ts +3 -3
@@ -1,5 +1,12 @@
1
1
  import {AbstractSigner} from "@atomiqlabs/base";
2
- import {Account, DeployAccountContractPayload, BlockTag, Invocation, DeployAccountContractTransaction} from "starknet";
2
+ import {
3
+ Account,
4
+ DeployAccountContractPayload,
5
+ BlockTag,
6
+ Invocation,
7
+ DeployAccountContractTransaction,
8
+ shortString, constants
9
+ } from "starknet";
3
10
  import {calculateHash, toHex} from "../../utils/Utils";
4
11
  import {
5
12
  isStarknetTxDeployAccount,
@@ -16,6 +23,59 @@ import {
16
23
  * @category Wallets
17
24
  */
18
25
  export class StarknetSigner implements AbstractSigner {
26
+ /**
27
+ * A static message (text message part), which should be signed by the Starknet wallets to generate reproducible entropy. Works when
28
+ * wallets use signing with deterministic nonce, such that signature over the same message always yields the
29
+ * same signature (same entropy).
30
+ */
31
+ private static readonly STARKNET_REPRODUCIBLE_ENTROPY_MESSAGE = "Signing this messages generates a reproducible secret" +
32
+ " to be used on %APPNAME%.";
33
+
34
+ /**
35
+ * A static message (warning part), which should be signed by the Starknet wallets to generate reproducible entropy. Works when
36
+ * wallets use signing with deterministic nonce, such that signature over the same message always yields the
37
+ * same signature (same entropy).
38
+ */
39
+ private static readonly STARKNET_REPRODUCIBLE_ENTROPY_WARNING = "PLEASE DOUBLE CHECK THAT YOU ARE ON THE %APPNAME%" +
40
+ " WEBSITE BEFORE SIGNING THE MESSAGE, SIGNING THIS MESSAGE ON ANY OTHER WEBSITE MIGHT LEAD TO LOSS OF FUNDS!";
41
+
42
+ /**
43
+ * Returns a SNIP-12 message to be signed for extracting reproducible entropy. Works when wallets use signing with
44
+ * deterministic nonce, such that signature over the same message always yields the same signature (same entropy).
45
+ *
46
+ * @param starknetChainId Starknet chain ID to use for the SNIP-12 message
47
+ * @param appName Application name to differentiate reproducible entropy generated across different apps
48
+ */
49
+ public static getReproducibleEntropyMessage(starknetChainId: constants.StarknetChainId, appName: string) {
50
+ const message = StarknetSigner.STARKNET_REPRODUCIBLE_ENTROPY_MESSAGE.replace(new RegExp("%APPNAME%", 'g'), appName);
51
+ const warning = StarknetSigner.STARKNET_REPRODUCIBLE_ENTROPY_WARNING.replace(new RegExp("%APPNAME%", 'g'), appName);
52
+ return {
53
+ types: {
54
+ StarknetDomain: [
55
+ { name: 'name', type: 'shortstring' },
56
+ { name: 'version', type: 'shortstring' },
57
+ { name: 'chainId', type: 'shortstring' },
58
+ { name: 'revision', type: 'shortstring' },
59
+ ],
60
+ Message: [
61
+ { name: 'Message', type: 'string' },
62
+ { name: 'Warning', type: 'string' }
63
+ ],
64
+ },
65
+ primaryType: 'Message',
66
+ domain: {
67
+ name: appName,
68
+ version: '1',
69
+ chainId: shortString.decodeShortString(starknetChainId),
70
+ revision: '1'
71
+ },
72
+ message: {
73
+ 'Message': message,
74
+ 'Warning': warning
75
+ }
76
+ };
77
+ }
78
+
19
79
  type = "AtomiqAbstractSigner" as const;
20
80
 
21
81
  public readonly isManagingNoncesInternally: boolean;
@@ -41,9 +101,8 @@ export class StarknetSigner implements AbstractSigner {
41
101
  }
42
102
 
43
103
  /**
44
- *
45
104
  * @param tx
46
- * @protected
105
+ * @internal
47
106
  */
48
107
  protected async _signTransaction(tx: StarknetTx): Promise<StarknetTx> {
49
108
  if(isStarknetTxInvoke(tx)) {
@@ -155,12 +155,12 @@ export function calculateHash(tx: StarknetTx): string {
155
155
  if(
156
156
  tx.signed.constructorCalldata==null ||
157
157
  tx.signed.addressSalt==null ||
158
- tx.tx.contractAddress==null
158
+ tx.details.walletAddress==null
159
159
  ) throw new Error("TX not enough data to compute hash!");
160
160
 
161
161
  const deployAccountData = CallData.compile(tx.signed.constructorCalldata);
162
162
  return tx.txId = hash.calculateDeployAccountTransactionHash({
163
- contractAddress: tx.tx.contractAddress,
163
+ contractAddress: tx.details.walletAddress,
164
164
  classHash: tx.signed.classHash,
165
165
  compiledConstructorCalldata: deployAccountData,
166
166
  salt: tx.signed.addressSalt,
@@ -288,7 +288,7 @@ export function bigIntMax(a: bigint, b: bigint) {
288
288
  return a>b ? a : b;
289
289
  }
290
290
 
291
- export function serializeSignature(signature?: Signature): ReplaceBigInt<Signature> | undefined {
291
+ export function serializeSignature(signature?: Signature): string[] | undefined {
292
292
  return signature==null
293
293
  ? undefined
294
294
  : Array.isArray(signature)