Skip to content

Commit 763a264

Browse files
authored
feat(sdk): add SignerSendTransactionOptions to IMultiProtocolSigner (#8277)
1 parent 3de3774 commit 763a264

8 files changed

Lines changed: 34 additions & 5 deletions

File tree

.changeset/sdk-signer-options.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@hyperlane-xyz/sdk': minor
3+
---
4+
5+
An optional `options` parameter was added to `sendAndConfirmTransaction()` on `IMultiProtocolSigner`, reusing `SendTransactionOptions` from `MultiProvider`. The EVM adapter passes options (including `waitConfirmations`) directly through to `MultiProvider.sendTransaction()`. Other protocol adapters accept but ignore the parameter. This is a non-breaking change.

typescript/sdk/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -956,3 +956,4 @@ export {
956956
} from './signers/turnkeyClient.js';
957957
export { TurnkeyEvmSigner } from './signers/evm/turnkey.js';
958958
export { TurnkeySealevelSigner } from './signers/svm/turnkey.js';
959+
export { IMultiProtocolSigner } from './signers/types.js';

typescript/sdk/src/signers/cosmos/cosmjs.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { GasPrice, SigningStargateClient } from '@cosmjs/stargate';
44
import { Address, ProtocolType, assert, strip0x } from '@hyperlane-xyz/utils';
55

66
import { MultiProtocolProvider } from '../../providers/MultiProtocolProvider.js';
7+
import { SendTransactionOptions } from '../../providers/MultiProvider.js';
78
import { CosmJsNativeTransaction } from '../../providers/ProviderType.js';
89
import { ChainName } from '../../types.js';
910
import { IMultiProtocolSigner } from '../types.js';
@@ -56,6 +57,7 @@ export class CosmosNativeMultiProtocolSignerAdapter implements IMultiProtocolSig
5657

5758
async sendAndConfirmTransaction(
5859
tx: CosmJsNativeTransaction,
60+
_options?: SendTransactionOptions,
5961
): Promise<string> {
6062
await this.signer.simulate(
6163
this.accountAddress,

typescript/sdk/src/signers/evm/ethersv5.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import { Address, ProtocolType, assert } from '@hyperlane-xyz/utils';
66

77
import { ChainTechnicalStack } from '../../metadata/chainMetadataTypes.js';
88
import { MultiProtocolProvider } from '../../providers/MultiProtocolProvider.js';
9-
import { MultiProvider } from '../../providers/MultiProvider.js';
9+
import {
10+
MultiProvider,
11+
SendTransactionOptions,
12+
} from '../../providers/MultiProvider.js';
1013
import { EthersV5Transaction } from '../../providers/ProviderType.js';
1114
import { ChainName } from '../../types.js';
1215
import { IMultiProtocolSigner } from '../types.js';
@@ -49,10 +52,14 @@ export class EvmMultiProtocolSignerAdapter implements IMultiProtocolSigner<Proto
4952
return this.multiProvider.getSignerAddress(this.chainName);
5053
}
5154

52-
async sendAndConfirmTransaction(tx: EthersV5Transaction): Promise<string> {
55+
async sendAndConfirmTransaction(
56+
tx: EthersV5Transaction,
57+
options?: SendTransactionOptions,
58+
): Promise<string> {
5359
const res = await this.multiProvider.sendTransaction(
5460
this.chainName,
5561
tx.transaction,
62+
options,
5663
);
5764

5865
return res.transactionHash;

typescript/sdk/src/signers/radix/radix-toolkit.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
} from '@hyperlane-xyz/radix-sdk';
77

88
import { MultiProtocolProvider } from '../../providers/MultiProtocolProvider.js';
9+
import { SendTransactionOptions } from '../../providers/MultiProvider.js';
910
import { RadixTransaction } from '../../providers/ProviderType.js';
1011
import { ChainName } from '../../types.js';
1112
import { IMultiProtocolSigner } from '../types.js';
@@ -37,7 +38,10 @@ export class RadixMultiProtocolSignerAdapter implements IMultiProtocolSigner<Pro
3738
return this.signer.getSignerAddress();
3839
}
3940

40-
async sendAndConfirmTransaction(tx: RadixTransaction): Promise<string> {
41+
async sendAndConfirmTransaction(
42+
tx: RadixTransaction,
43+
_options?: SendTransactionOptions,
44+
): Promise<string> {
4145
try {
4246
await this.signer.estimateTransactionFee({
4347
transaction: tx.transaction,

typescript/sdk/src/signers/starknet/starknetjs.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Account as StarknetAccount } from 'starknet';
44
import { ProtocolType, assert } from '@hyperlane-xyz/utils';
55

66
import { MultiProtocolProvider } from '../../providers/MultiProtocolProvider.js';
7+
import { SendTransactionOptions } from '../../providers/MultiProvider.js';
78
import { StarknetJsTransaction } from '../../providers/ProviderType.js';
89
import { ChainName } from '../../types.js';
910
import { IMultiProtocolSigner } from '../types.js';
@@ -35,7 +36,10 @@ export class StarknetMultiProtocolSignerAdapter implements IMultiProtocolSigner<
3536
return this.signer.address;
3637
}
3738

38-
async sendAndConfirmTransaction(tx: StarknetJsTransaction): Promise<string> {
39+
async sendAndConfirmTransaction(
40+
tx: StarknetJsTransaction,
41+
_options?: SendTransactionOptions,
42+
): Promise<string> {
3943
const { entrypoint, calldata, contractAddress } = tx.transaction;
4044
assert(entrypoint, 'entrypoint is required for starknet transactions');
4145

typescript/sdk/src/signers/svm/solana-web3js.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { Address, ProtocolType, rootLogger, sleep } from '@hyperlane-xyz/utils';
1212

1313
import { SEALEVEL_PRIORITY_FEES } from '../../consts/sealevel.js';
1414
import { MultiProtocolProvider } from '../../providers/MultiProtocolProvider.js';
15+
import { SendTransactionOptions } from '../../providers/MultiProvider.js';
1516
import { SolanaWeb3Transaction } from '../../providers/ProviderType.js';
1617
import { ChainName } from '../../types.js';
1718
import { IMultiProtocolSigner } from '../types.js';
@@ -109,7 +110,10 @@ export class SvmMultiProtocolSignerAdapter implements IMultiProtocolSigner<Proto
109110
/**
110111
* Send and confirm a pre-built transaction (IMultiProtocolSigner interface)
111112
*/
112-
async sendAndConfirmTransaction(tx: SolanaWeb3Transaction): Promise<string> {
113+
async sendAndConfirmTransaction(
114+
tx: SolanaWeb3Transaction,
115+
_options?: SendTransactionOptions,
116+
): Promise<string> {
113117
return this.signAndConfirm(tx.transaction);
114118
}
115119

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { Address, ProtocolType } from '@hyperlane-xyz/utils';
22

3+
import { SendTransactionOptions } from '../providers/MultiProvider.js';
34
import { ProtocolTypedTransaction } from '../providers/ProviderType.js';
45

56
export interface IMultiProtocolSigner<TProtocol extends ProtocolType> {
67
address(): Promise<Address>;
78
sendAndConfirmTransaction(
89
tx: ProtocolTypedTransaction<TProtocol>,
10+
options?: SendTransactionOptions,
911
): Promise<string>;
1012
}

0 commit comments

Comments
 (0)