Skip to content

Commit 67ee387

Browse files
authored
Manual resume (#629)
* wip * resume for tb * circle resume * inline "ben" variable aha * fix error msg * use same approach for tokenbridge as for cctp * use from() * allow toChain to be passed in
1 parent f67b569 commit 67ee387

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

connect/src/protocols/tokenBridge/tokenTransfer.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,6 @@ export namespace TokenTransfer {
349349
const leftover = (start: number, max: number) => Math.max(max - (Date.now() - start), 0);
350350

351351
fromChain = fromChain ?? wh.getChain(receipt.from);
352-
toChain = toChain ?? wh.getChain(receipt.to);
353352

354353
// Check the source chain for initiation transaction
355354
// and capture the message id
@@ -403,8 +402,12 @@ export namespace TokenTransfer {
403402
if (isAttested(receipt) || isRedeemed(receipt)) {
404403
if (!receipt.attestation.attestation) throw "Signed Attestation required to check for redeem";
405404

405+
if (receipt.attestation.attestation.payloadName === 'AttestMeta') {
406+
throw new Error('Unable to track an AttestMeta receipt');
407+
}
408+
406409
let isComplete = await TokenTransfer.isTransferComplete(
407-
toChain,
410+
toChain ?? wh.getChain(receipt.attestation.attestation.payload.to.chain),
408411
receipt.attestation.attestation as TokenTransfer.VAA,
409412
);
410413

connect/src/routes/cctp/manual.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type {
66
CircleTransferDetails,
77
Signer,
88
TokenId,
9+
TransactionId,
910
} from "@wormhole-foundation/sdk-definitions";
1011
import { CircleBridge, isSameToken } from "@wormhole-foundation/sdk-definitions";
1112
import { signSendWait } from "../../common.js";
@@ -170,7 +171,7 @@ export class CCTPRoute<N extends Network>
170171
const { message, attestation } = att;
171172
if (!attestation) throw new Error(`No Circle attestation for ${id}`);
172173

173-
const toChain = await this.wh.getChain(receipt.to);
174+
const toChain = this.wh.getChain(receipt.to);
174175
const cb = await toChain.getCircleBridge();
175176
const xfer = cb.redeem(message.payload.mintRecipient, message, attestation);
176177
const dstTxids = await signSendWait<N, Chain>(toChain, xfer, signer);
@@ -185,6 +186,11 @@ export class CCTPRoute<N extends Network>
185186
}
186187
}
187188

189+
async resume(txid: TransactionId): Promise<R> {
190+
const xfer = await CircleTransfer.from(this.wh, txid, 10 * 1000);
191+
return CircleTransfer.getReceipt(xfer);
192+
}
193+
188194
public override async *track(receipt: R, timeout?: number) {
189195
yield* CircleTransfer.track(this.wh, receipt, timeout);
190196
}

connect/src/routes/route.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Chain, Network } from "@wormhole-foundation/sdk-base";
2-
import type { ChainContext, Signer, TokenId } from "@wormhole-foundation/sdk-definitions";
2+
import type { ChainContext, Signer, TokenId, TransactionId } from "@wormhole-foundation/sdk-definitions";
33
import type { Wormhole } from "../wormhole.js";
44
import type { RouteTransferRequest } from "./request.js";
55
import type {
@@ -130,6 +130,7 @@ export abstract class ManualRoute<
130130
NATIVE_GAS_DROPOFF_SUPPORTED = false;
131131
IS_AUTOMATIC = false;
132132
public abstract complete(sender: Signer, receipt: R): Promise<R>;
133+
public abstract resume(tx: TransactionId): Promise<R>;
133134
}
134135

135136
export function isManual<N extends Network>(route: Route<N>): route is ManualRoute<N> {

connect/src/routes/tokenBridge/manual.ts

+6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type {
66
Signer,
77
TokenId,
88
TokenTransferDetails,
9+
TransactionId,
910
} from "@wormhole-foundation/sdk-definitions";
1011
import { TokenTransfer } from "../../protocols/tokenBridge/tokenTransfer.js";
1112
import type {
@@ -168,6 +169,11 @@ export class TokenBridgeRoute<N extends Network>
168169
destinationTxs: dstTxIds,
169170
};
170171
}
172+
173+
async resume(txid: TransactionId): Promise<R> {
174+
const xfer = await TokenTransfer.from(this.wh, txid, 10 * 1000);
175+
return TokenTransfer.getReceipt(xfer);
176+
}
171177

172178
public override async *track(receipt: R, timeout?: number) {
173179
yield* TokenTransfer.track(this.wh, receipt, timeout);

0 commit comments

Comments
 (0)