1
1
import { TokenRouter } from "@wormhole-foundation/example-liquidity-layer-definitions" ;
2
- import { Chain , Network } from "@wormhole-foundation/sdk-base" ;
2
+ import { Network , nativeChainIds , toChainId } from "@wormhole-foundation/sdk-base" ;
3
3
import {
4
- AccountAddress ,
5
- UnsignedTransaction ,
6
- VAA ,
7
4
CircleBridge ,
8
5
Contracts ,
6
+ UnsignedTransaction ,
7
+ VAA ,
9
8
} from "@wormhole-foundation/sdk-definitions" ;
10
- import { EvmTokenRouter as _EvmTokenRouter } from "../TokenRouter" ;
9
+ import {
10
+ AnyEvmAddress ,
11
+ EvmAddress ,
12
+ EvmChains ,
13
+ EvmUnsignedTransaction ,
14
+ } from "@wormhole-foundation/sdk-evm" ;
11
15
import { ethers } from "ethers" ;
16
+ import { EvmTokenRouter as _EvmTokenRouter } from "../TokenRouter" ;
12
17
13
- export class EvmTokenRouter < N extends Network , C extends Chain >
18
+ export class EvmTokenRouter < N extends Network , C extends EvmChains >
14
19
extends _EvmTokenRouter
15
20
implements TokenRouter < N , C >
16
21
{
22
+ private _chainId : number ;
17
23
constructor (
18
24
readonly network : N ,
19
25
readonly chain : C ,
20
26
readonly provider : ethers . providers . Provider ,
21
27
readonly contracts : Contracts & TokenRouter . Addresses ,
22
28
) {
23
29
super ( provider , contracts . tokenRouter , contracts . cctp . tokenMessenger ) ;
30
+ this . _chainId = 0 ; //nativeChainIds.networkChainToNativeChainId(network, chain);
24
31
}
25
32
26
33
async * placeMarketOrder (
27
- sender : AccountAddress < C > ,
28
- order : TokenRouter . OrderRequest | TokenRouter . PreparedOrder < C > ,
34
+ sender : AnyEvmAddress ,
35
+ order : TokenRouter . OrderRequest ,
29
36
) : AsyncGenerator < UnsignedTransaction < N , C > , any , unknown > {
30
- throw new Error ( "Method not implemented." ) ;
37
+ const msg = order . redeemerMessage ? order . redeemerMessage : new Uint8Array ( ) ;
38
+
39
+ const refundAddress = order . refundAddress
40
+ ? new EvmAddress ( order . refundAddress ) . unwrap ( )
41
+ : undefined ;
42
+
43
+ const tx = await this . placeMarketOrderTx (
44
+ order . amountIn ,
45
+ toChainId ( order . targetChain ) ,
46
+ order . redeemer . toUint8Array ( ) ,
47
+ msg ,
48
+ order . minAmountOut ,
49
+ refundAddress ,
50
+ ) ;
51
+
52
+ yield this . createUnsignedTx ( tx , "TokenRouter.placeMarketOrder" ) ;
31
53
}
32
54
async * redeemFill (
33
- sender : AccountAddress < C > ,
55
+ sender : AnyEvmAddress ,
34
56
vaa :
35
57
| VAA < "FastTransfer:CctpDeposit" >
36
58
| VAA < "FastTransfer:FastMarketOrder" >
@@ -39,4 +61,21 @@ export class EvmTokenRouter<N extends Network, C extends Chain>
39
61
) : AsyncGenerator < UnsignedTransaction < N , C > , any , unknown > {
40
62
throw new Error ( "Method not implemented." ) ;
41
63
}
64
+
65
+ private createUnsignedTx (
66
+ txReq : ethers . ContractTransaction ,
67
+ description : string ,
68
+ parallelizable : boolean = false ,
69
+ ) : EvmUnsignedTransaction < N , C > {
70
+ txReq . chainId = this . _chainId ;
71
+
72
+ return new EvmUnsignedTransaction (
73
+ // txReq,
74
+ { } ,
75
+ this . network ,
76
+ this . chain ,
77
+ description ,
78
+ parallelizable ,
79
+ ) ;
80
+ }
42
81
}
0 commit comments