@dynamic-labs-wallet/evm 1.1.33 → 1.1.35

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.
package/index.cjs CHANGED
@@ -98,6 +98,7 @@ const mapTransactionToEvmTransaction = (transaction)=>{
98
98
  };
99
99
  };
100
100
 
101
+ /** The most fee attempts one sign-and-broadcast request carries. */ const MAX_SIGN_AND_BROADCAST_FEES = 3;
101
102
  class DynamicEvmWalletClient extends browser.DynamicWalletClient {
102
103
  createViemPublicClient({ chain, rpcUrl }) {
103
104
  return viem.createPublicClient({
@@ -296,6 +297,52 @@ class DynamicEvmWalletClient extends browser.DynamicWalletClient {
296
297
  throw error;
297
298
  }
298
299
  }
300
+ /**
301
+ * Signs the transaction at each fee for Dynamic to broadcast: the cheapest is sent first and the next replaces it if it stalls. Each fee is its own signing ceremony.
302
+ *
303
+ * @param params.senderAddress - The wallet's address.
304
+ * @param params.transaction - The transaction without a fee: chain id, recipient, nonce, gas limit, and optionally value and data.
305
+ * @param params.fees - One to three prices for the same transaction, cheapest first, all in one style (`gasPrice`, or `maxFeePerGas` with `maxPriorityFeePerGas`).
306
+ * @param params.requestedCertainty - How sure to be before calling it confirmed: `fast`, `safe` or `final`, or `chain:` plus a chain-specific value. Defaults to `safe`.
307
+ * @param params.externalReference - Your own label, returned on every event. Not unique.
308
+ * @param params.idempotencyKey - Makes a retry safe: the same key replays the stored answer instead of sending twice. A new one is made when omitted.
309
+ * @param params.password - The wallet's backup password, if it has one.
310
+ * @param params.signedSessionId - The signed-in session, used to unlock the wallet's key share.
311
+ * @param params.mfaToken - Proof of the user's multi-factor check, when the wallet needs one.
312
+ * @param params.elevatedAccessToken - Proof of a recent re-login, when the wallet needs one.
313
+ * @param params.approvalQuorum - Approvers' consent for a governed wallet, sent on the retry after `intent_required`.
314
+ * @param params.onError - Called with the failure's message, never the raw error.
315
+ * @param params.traceContext - Ties this call's logs to the server's, across retries. Created when omitted.
316
+ * @returns The transaction record.
317
+ * @throws Error when `fees` has no entry or more than three.
318
+ */ async signAndBroadcastTransaction({ senderAddress, transaction, fees, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, requestedCertainty, externalReference, idempotencyKey, onError, traceContext }) {
319
+ if (fees.length === 0 || fees.length > MAX_SIGN_AND_BROADCAST_FEES) {
320
+ throw new Error(`Sign and broadcast takes 1 to ${MAX_SIGN_AND_BROADCAST_FEES} fees, got ${fees.length}`);
321
+ }
322
+ const transactions = fees.map((fee)=>_extends({}, transaction, fee));
323
+ const messages = transactions.map((attempt)=>this.prepareSignTransaction({
324
+ transaction: attempt
325
+ }));
326
+ const contexts = transactions.map((attempt)=>({
327
+ evmTransaction: mapTransactionToEvmTransaction(attempt)
328
+ }));
329
+ return await this.signAndBroadcast({
330
+ accountAddress: senderAddress,
331
+ chainName: this.chainName,
332
+ contexts,
333
+ messages,
334
+ password,
335
+ signedSessionId,
336
+ mfaToken,
337
+ elevatedAccessToken,
338
+ approvalQuorum,
339
+ requestedCertainty,
340
+ externalReference,
341
+ idempotencyKey,
342
+ onError,
343
+ traceContext
344
+ });
345
+ }
299
346
  async signTypedData({ accountAddress, typedData, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, onError, traceContext }) {
300
347
  await this.verifyPassword({
301
348
  accountAddress,
package/index.esm.js CHANGED
@@ -96,6 +96,7 @@ const mapTransactionToEvmTransaction = (transaction)=>{
96
96
  };
97
97
  };
98
98
 
99
+ /** The most fee attempts one sign-and-broadcast request carries. */ const MAX_SIGN_AND_BROADCAST_FEES = 3;
99
100
  class DynamicEvmWalletClient extends DynamicWalletClient {
100
101
  createViemPublicClient({ chain, rpcUrl }) {
101
102
  return createPublicClient({
@@ -294,6 +295,52 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
294
295
  throw error;
295
296
  }
296
297
  }
298
+ /**
299
+ * Signs the transaction at each fee for Dynamic to broadcast: the cheapest is sent first and the next replaces it if it stalls. Each fee is its own signing ceremony.
300
+ *
301
+ * @param params.senderAddress - The wallet's address.
302
+ * @param params.transaction - The transaction without a fee: chain id, recipient, nonce, gas limit, and optionally value and data.
303
+ * @param params.fees - One to three prices for the same transaction, cheapest first, all in one style (`gasPrice`, or `maxFeePerGas` with `maxPriorityFeePerGas`).
304
+ * @param params.requestedCertainty - How sure to be before calling it confirmed: `fast`, `safe` or `final`, or `chain:` plus a chain-specific value. Defaults to `safe`.
305
+ * @param params.externalReference - Your own label, returned on every event. Not unique.
306
+ * @param params.idempotencyKey - Makes a retry safe: the same key replays the stored answer instead of sending twice. A new one is made when omitted.
307
+ * @param params.password - The wallet's backup password, if it has one.
308
+ * @param params.signedSessionId - The signed-in session, used to unlock the wallet's key share.
309
+ * @param params.mfaToken - Proof of the user's multi-factor check, when the wallet needs one.
310
+ * @param params.elevatedAccessToken - Proof of a recent re-login, when the wallet needs one.
311
+ * @param params.approvalQuorum - Approvers' consent for a governed wallet, sent on the retry after `intent_required`.
312
+ * @param params.onError - Called with the failure's message, never the raw error.
313
+ * @param params.traceContext - Ties this call's logs to the server's, across retries. Created when omitted.
314
+ * @returns The transaction record.
315
+ * @throws Error when `fees` has no entry or more than three.
316
+ */ async signAndBroadcastTransaction({ senderAddress, transaction, fees, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, requestedCertainty, externalReference, idempotencyKey, onError, traceContext }) {
317
+ if (fees.length === 0 || fees.length > MAX_SIGN_AND_BROADCAST_FEES) {
318
+ throw new Error(`Sign and broadcast takes 1 to ${MAX_SIGN_AND_BROADCAST_FEES} fees, got ${fees.length}`);
319
+ }
320
+ const transactions = fees.map((fee)=>_extends({}, transaction, fee));
321
+ const messages = transactions.map((attempt)=>this.prepareSignTransaction({
322
+ transaction: attempt
323
+ }));
324
+ const contexts = transactions.map((attempt)=>({
325
+ evmTransaction: mapTransactionToEvmTransaction(attempt)
326
+ }));
327
+ return await this.signAndBroadcast({
328
+ accountAddress: senderAddress,
329
+ chainName: this.chainName,
330
+ contexts,
331
+ messages,
332
+ password,
333
+ signedSessionId,
334
+ mfaToken,
335
+ elevatedAccessToken,
336
+ approvalQuorum,
337
+ requestedCertainty,
338
+ externalReference,
339
+ idempotencyKey,
340
+ onError,
341
+ traceContext
342
+ });
343
+ }
297
344
  async signTypedData({ accountAddress, typedData, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, onError, traceContext }) {
298
345
  await this.verifyPassword({
299
346
  accountAddress,
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/evm",
3
- "version": "1.1.33",
3
+ "version": "1.1.35",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@dynamic-labs-wallet/browser": "1.1.33",
8
- "@dynamic-labs-wallet/core": "1.1.33",
7
+ "@dynamic-labs-wallet/browser": "1.1.35",
8
+ "@dynamic-labs-wallet/core": "1.1.35",
9
9
  "@dynamic-labs/sdk-api-core": "0.50.0"
10
10
  },
11
11
  "peerDependencies": {
@@ -1,5 +1,5 @@
1
- import { DynamicWalletClient, type EcdsaKeygenResult, type EcdsaPublicKey, type Ed25519KeygenResult, type ThresholdSignatureScheme, type TraceContext, type RequestWithElevatedAccessToken, type BaseSignParams } from '@dynamic-labs-wallet/browser';
2
- import { type Chain, type PublicClient, type SignableMessage, type TransactionSerializable, type TypedData } from 'viem';
1
+ import { DynamicWalletClient, type EcdsaKeygenResult, type EcdsaPublicKey, type Ed25519KeygenResult, type ThresholdSignatureScheme, type TraceContext, type RequestWithElevatedAccessToken, type BaseSignParams, type SignAndBroadcastResponse } from '@dynamic-labs-wallet/browser';
2
+ import { type Address, type Chain, type Hex, type PublicClient, type SignableMessage, type TransactionSerializable, type TypedData } from 'viem';
3
3
  export declare class DynamicEvmWalletClient extends DynamicWalletClient {
4
4
  readonly chainName = "EVM";
5
5
  createViemPublicClient({ chain, rpcUrl }: {
@@ -45,6 +45,46 @@ export declare class DynamicEvmWalletClient extends DynamicWalletClient {
45
45
  senderAddress: string;
46
46
  transaction: TransactionSerializable;
47
47
  } & BaseSignParams): Promise<string>;
48
+ /**
49
+ * Signs the transaction at each fee for Dynamic to broadcast: the cheapest is sent first and the next replaces it if it stalls. Each fee is its own signing ceremony.
50
+ *
51
+ * @param params.senderAddress - The wallet's address.
52
+ * @param params.transaction - The transaction without a fee: chain id, recipient, nonce, gas limit, and optionally value and data.
53
+ * @param params.fees - One to three prices for the same transaction, cheapest first, all in one style (`gasPrice`, or `maxFeePerGas` with `maxPriorityFeePerGas`).
54
+ * @param params.requestedCertainty - How sure to be before calling it confirmed: `fast`, `safe` or `final`, or `chain:` plus a chain-specific value. Defaults to `safe`.
55
+ * @param params.externalReference - Your own label, returned on every event. Not unique.
56
+ * @param params.idempotencyKey - Makes a retry safe: the same key replays the stored answer instead of sending twice. A new one is made when omitted.
57
+ * @param params.password - The wallet's backup password, if it has one.
58
+ * @param params.signedSessionId - The signed-in session, used to unlock the wallet's key share.
59
+ * @param params.mfaToken - Proof of the user's multi-factor check, when the wallet needs one.
60
+ * @param params.elevatedAccessToken - Proof of a recent re-login, when the wallet needs one.
61
+ * @param params.approvalQuorum - Approvers' consent for a governed wallet, sent on the retry after `intent_required`.
62
+ * @param params.onError - Called with the failure's message, never the raw error.
63
+ * @param params.traceContext - Ties this call's logs to the server's, across retries. Created when omitted.
64
+ * @returns The transaction record.
65
+ * @throws Error when `fees` has no entry or more than three.
66
+ */
67
+ signAndBroadcastTransaction({ senderAddress, transaction, fees, password, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, requestedCertainty, externalReference, idempotencyKey, onError, traceContext, }: {
68
+ senderAddress: string;
69
+ transaction: {
70
+ chainId: number;
71
+ to: Address;
72
+ nonce: number;
73
+ gas: bigint;
74
+ value?: bigint;
75
+ data?: Hex;
76
+ };
77
+ /** Cheapest first, all in one style. */
78
+ fees: Array<{
79
+ gasPrice: bigint;
80
+ } | {
81
+ maxFeePerGas: bigint;
82
+ maxPriorityFeePerGas: bigint;
83
+ }>;
84
+ requestedCertainty?: string;
85
+ externalReference?: string;
86
+ idempotencyKey?: string;
87
+ } & Pick<BaseSignParams, 'password' | 'signedSessionId' | 'mfaToken' | 'elevatedAccessToken' | 'approvalQuorum' | 'onError' | 'traceContext'>): Promise<SignAndBroadcastResponse>;
48
88
  signTypedData({ accountAddress, typedData, password, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, onError, traceContext, }: {
49
89
  accountAddress: string;
50
90
  typedData: TypedData;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}