Skip to content

Commit 7c80489

Browse files
authored
add additional method to skip requirement of chain context as argument for sign send utils (#498)
1 parent 8ad7d25 commit 7c80489

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

connect/src/common.ts

+29-6
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,50 @@
11
import type { Chain, Network } from "@wormhole-foundation/sdk-base";
22
import type {
33
ChainContext,
4+
SignAndSendSigner,
45
Signer,
56
TransactionId,
67
TxHash,
78
UnsignedTransaction,
89
} from "@wormhole-foundation/sdk-definitions";
910
import { isSignAndSendSigner, isSigner } from "@wormhole-foundation/sdk-definitions";
1011

12+
type SignSend<N extends Network, C extends Chain> = (
13+
txns: UnsignedTransaction<N, C>[],
14+
) => Promise<TxHash[]>;
15+
1116
export async function signSendWait<N extends Network, C extends Chain>(
1217
chain: ChainContext<N, C>,
1318
xfer: AsyncGenerator<UnsignedTransaction<N, C>>,
1419
signer: Signer<N, C>,
1520
): Promise<TransactionId[]> {
16-
const txHashes: TxHash[] = [];
17-
1821
if (!isSigner(signer)) throw new Error("Invalid signer, not SignAndSendSigner or SignOnlySigner");
1922

2023
const signSend = async (txns: UnsignedTransaction<N, C>[]): Promise<TxHash[]> =>
2124
isSignAndSendSigner(signer)
2225
? signer.signAndSend(txns)
2326
: chain.sendWait(await signer.sign(txns));
2427

28+
const txHashes = await ssw(xfer, signSend);
29+
return txHashes.map((txid) => ({ chain: chain.chain, txid }));
30+
}
31+
32+
export async function signAndSendWait<N extends Network, C extends Chain>(
33+
xfer: AsyncGenerator<UnsignedTransaction<N, C>>,
34+
signer: SignAndSendSigner<N, C>,
35+
): Promise<TransactionId[]> {
36+
if (!isSignAndSendSigner(signer))
37+
throw new Error("Invalid signer, only SignAndSendSigner may call this method");
38+
39+
const txHashes = await ssw(xfer, signer.signAndSend);
40+
return txHashes.map((txid) => ({ chain: signer.chain(), txid }));
41+
}
42+
43+
async function ssw<N extends Network, C extends Chain>(
44+
xfer: AsyncGenerator<UnsignedTransaction<N, C>>,
45+
signSend: SignSend<N, C>,
46+
): Promise<TxHash[]> {
47+
const txids: TxHash[] = [];
2548
let txbuff: UnsignedTransaction<N, C>[] = [];
2649
for await (const tx of xfer) {
2750
// buffer transactions as long as they are
@@ -33,20 +56,20 @@ export async function signSendWait<N extends Network, C extends Chain>(
3356
// flush the buffer then sign and send the
3457
// current tx
3558
if (txbuff.length > 0) {
36-
txHashes.push(...(await signSend(txbuff)));
59+
txids.push(...(await signSend(txbuff)));
3760
txbuff = [];
3861
}
3962
// Note: it may be possible to group this tx with
4063
// those in the buffer if there are any but
4164
// the parallelizable flag alone is not enough to signal
4265
// if this is safe
43-
txHashes.push(...(await signSend([tx])));
66+
txids.push(...(await signSend([tx])));
4467
}
4568
}
4669

4770
if (txbuff.length > 0) {
48-
txHashes.push(...(await signSend(txbuff)));
71+
txids.push(...(await signSend(txbuff)));
4972
}
5073

51-
return txHashes.map((txid) => ({ chain: chain.chain, txid }));
74+
return txids;
5275
}

0 commit comments

Comments
 (0)