@wormhole-foundation/sdk-evm 0.5.0-beta.0

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.
Files changed (116) hide show
  1. package/README.md +10 -0
  2. package/dist/cjs/address.d.ts +26 -0
  3. package/dist/cjs/address.d.ts.map +1 -0
  4. package/dist/cjs/address.js +77 -0
  5. package/dist/cjs/address.js.map +1 -0
  6. package/dist/cjs/chain.d.ts +8 -0
  7. package/dist/cjs/chain.d.ts.map +1 -0
  8. package/dist/cjs/chain.js +11 -0
  9. package/dist/cjs/chain.js.map +1 -0
  10. package/dist/cjs/ethers-contracts/TokenImplementation.d.ts +340 -0
  11. package/dist/cjs/ethers-contracts/TokenImplementation.d.ts.map +1 -0
  12. package/dist/cjs/ethers-contracts/TokenImplementation.js +3 -0
  13. package/dist/cjs/ethers-contracts/TokenImplementation.js.map +1 -0
  14. package/dist/cjs/ethers-contracts/common.d.ts +51 -0
  15. package/dist/cjs/ethers-contracts/common.d.ts.map +1 -0
  16. package/dist/cjs/ethers-contracts/common.js +3 -0
  17. package/dist/cjs/ethers-contracts/common.js.map +1 -0
  18. package/dist/cjs/ethers-contracts/factories/TokenImplementation__factory.d.ts +431 -0
  19. package/dist/cjs/ethers-contracts/factories/TokenImplementation__factory.d.ts.map +1 -0
  20. package/dist/cjs/ethers-contracts/factories/TokenImplementation__factory.js +569 -0
  21. package/dist/cjs/ethers-contracts/factories/TokenImplementation__factory.js.map +1 -0
  22. package/dist/cjs/ethers-contracts/factories/index.d.ts +2 -0
  23. package/dist/cjs/ethers-contracts/factories/index.d.ts.map +1 -0
  24. package/dist/cjs/ethers-contracts/factories/index.js +18 -0
  25. package/dist/cjs/ethers-contracts/factories/index.js.map +1 -0
  26. package/dist/cjs/ethers-contracts/index.d.ts +3 -0
  27. package/dist/cjs/ethers-contracts/index.d.ts.map +1 -0
  28. package/dist/cjs/ethers-contracts/index.js +19 -0
  29. package/dist/cjs/ethers-contracts/index.js.map +1 -0
  30. package/dist/cjs/index.d.ts +7 -0
  31. package/dist/cjs/index.d.ts.map +1 -0
  32. package/dist/cjs/index.js +23 -0
  33. package/dist/cjs/index.js.map +1 -0
  34. package/dist/cjs/platform.d.ts +27 -0
  35. package/dist/cjs/platform.d.ts.map +1 -0
  36. package/dist/cjs/platform.js +131 -0
  37. package/dist/cjs/platform.js.map +1 -0
  38. package/dist/cjs/signer.d.ts +12 -0
  39. package/dist/cjs/signer.d.ts.map +1 -0
  40. package/dist/cjs/signer.js +86 -0
  41. package/dist/cjs/signer.js.map +1 -0
  42. package/dist/cjs/testing/index.d.ts +2 -0
  43. package/dist/cjs/testing/index.d.ts.map +1 -0
  44. package/dist/cjs/testing/index.js +18 -0
  45. package/dist/cjs/testing/index.js.map +1 -0
  46. package/dist/cjs/testing/signer.d.ts +13 -0
  47. package/dist/cjs/testing/signer.d.ts.map +1 -0
  48. package/dist/cjs/testing/signer.js +64 -0
  49. package/dist/cjs/testing/signer.js.map +1 -0
  50. package/dist/cjs/types.d.ts +70 -0
  51. package/dist/cjs/types.d.ts.map +1 -0
  52. package/dist/cjs/types.js +25 -0
  53. package/dist/cjs/types.js.map +1 -0
  54. package/dist/cjs/unsignedTransaction.d.ts +15 -0
  55. package/dist/cjs/unsignedTransaction.d.ts.map +1 -0
  56. package/dist/cjs/unsignedTransaction.js +22 -0
  57. package/dist/cjs/unsignedTransaction.js.map +1 -0
  58. package/dist/esm/address.d.ts +26 -0
  59. package/dist/esm/address.d.ts.map +1 -0
  60. package/dist/esm/address.js +73 -0
  61. package/dist/esm/address.js.map +1 -0
  62. package/dist/esm/chain.d.ts +8 -0
  63. package/dist/esm/chain.d.ts.map +1 -0
  64. package/dist/esm/chain.js +7 -0
  65. package/dist/esm/chain.js.map +1 -0
  66. package/dist/esm/ethers-contracts/TokenImplementation.d.ts +340 -0
  67. package/dist/esm/ethers-contracts/TokenImplementation.d.ts.map +1 -0
  68. package/dist/esm/ethers-contracts/TokenImplementation.js +2 -0
  69. package/dist/esm/ethers-contracts/TokenImplementation.js.map +1 -0
  70. package/dist/esm/ethers-contracts/common.d.ts +51 -0
  71. package/dist/esm/ethers-contracts/common.d.ts.map +1 -0
  72. package/dist/esm/ethers-contracts/common.js +2 -0
  73. package/dist/esm/ethers-contracts/common.js.map +1 -0
  74. package/dist/esm/ethers-contracts/factories/TokenImplementation__factory.d.ts +431 -0
  75. package/dist/esm/ethers-contracts/factories/TokenImplementation__factory.d.ts.map +1 -0
  76. package/dist/esm/ethers-contracts/factories/TokenImplementation__factory.js +565 -0
  77. package/dist/esm/ethers-contracts/factories/TokenImplementation__factory.js.map +1 -0
  78. package/dist/esm/ethers-contracts/factories/index.d.ts +2 -0
  79. package/dist/esm/ethers-contracts/factories/index.d.ts.map +1 -0
  80. package/dist/esm/ethers-contracts/factories/index.js +2 -0
  81. package/dist/esm/ethers-contracts/factories/index.js.map +1 -0
  82. package/dist/esm/ethers-contracts/index.d.ts +3 -0
  83. package/dist/esm/ethers-contracts/index.d.ts.map +1 -0
  84. package/dist/esm/ethers-contracts/index.js +3 -0
  85. package/dist/esm/ethers-contracts/index.js.map +1 -0
  86. package/dist/esm/index.d.ts +7 -0
  87. package/dist/esm/index.d.ts.map +1 -0
  88. package/dist/esm/index.js +7 -0
  89. package/dist/esm/index.js.map +1 -0
  90. package/dist/esm/platform.d.ts +27 -0
  91. package/dist/esm/platform.d.ts.map +1 -0
  92. package/dist/esm/platform.js +104 -0
  93. package/dist/esm/platform.js.map +1 -0
  94. package/dist/esm/signer.d.ts +12 -0
  95. package/dist/esm/signer.d.ts.map +1 -0
  96. package/dist/esm/signer.js +79 -0
  97. package/dist/esm/signer.js.map +1 -0
  98. package/dist/esm/testing/index.d.ts +2 -0
  99. package/dist/esm/testing/index.d.ts.map +1 -0
  100. package/dist/esm/testing/index.js +2 -0
  101. package/dist/esm/testing/index.js.map +1 -0
  102. package/dist/esm/testing/signer.d.ts +13 -0
  103. package/dist/esm/testing/signer.d.ts.map +1 -0
  104. package/dist/esm/testing/signer.js +59 -0
  105. package/dist/esm/testing/signer.js.map +1 -0
  106. package/dist/esm/types.d.ts +70 -0
  107. package/dist/esm/types.d.ts.map +1 -0
  108. package/dist/esm/types.js +19 -0
  109. package/dist/esm/types.js.map +1 -0
  110. package/dist/esm/unsignedTransaction.d.ts +15 -0
  111. package/dist/esm/unsignedTransaction.d.ts.map +1 -0
  112. package/dist/esm/unsignedTransaction.js +18 -0
  113. package/dist/esm/unsignedTransaction.js.map +1 -0
  114. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  115. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  116. package/package.json +61 -0
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./address"), exports);
18
+ __exportStar(require("./unsignedTransaction"), exports);
19
+ __exportStar(require("./platform"), exports);
20
+ __exportStar(require("./types"), exports);
21
+ __exportStar(require("./chain"), exports);
22
+ __exportStar(require("./signer"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,wDAAsC;AACtC,6CAA2B;AAC3B,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB"}
@@ -0,0 +1,27 @@
1
+ import { Balances, Chain, ChainsConfig, Network, PlatformContext, SignedTx, StaticPlatformMethods, TokenId, TxHash } from '@wormhole-foundation/sdk-connect';
2
+ import { Provider } from 'ethers';
3
+ import * as ethers_contracts from './ethers-contracts';
4
+ import { EvmChain } from './chain';
5
+ import { AnyEvmAddress, EvmChains, EvmPlatformType } from './types';
6
+ /**
7
+ * @category EVM
8
+ */
9
+ export declare class EvmPlatform<N extends Network> extends PlatformContext<N, EvmPlatformType> implements StaticPlatformMethods<EvmPlatformType, typeof EvmPlatform> {
10
+ static _platform: "Evm";
11
+ constructor(network: N, _config?: ChainsConfig<N, EvmPlatformType>);
12
+ getRpc<C extends EvmChains>(chain: C): Provider;
13
+ getChain<C extends EvmChains>(chain: C, rpc?: Provider): EvmChain<N, C>;
14
+ static nativeTokenId<N extends Network, C extends EvmChains>(network: N, chain: C): TokenId<C>;
15
+ static isNativeTokenId<N extends Network, C extends EvmChains>(network: N, chain: C, tokenId: TokenId<C>): boolean;
16
+ static isSupportedChain(chain: Chain): boolean;
17
+ static getDecimals(chain: Chain, rpc: Provider, token: AnyEvmAddress): Promise<number>;
18
+ static getBalance(chain: Chain, rpc: Provider, walletAddr: string, token: AnyEvmAddress): Promise<bigint | null>;
19
+ static getBalances(chain: Chain, rpc: Provider, walletAddr: string, tokens: AnyEvmAddress[]): Promise<Balances>;
20
+ static sendWait(chain: Chain, rpc: Provider, stxns: SignedTx[]): Promise<TxHash[]>;
21
+ static getLatestBlock(rpc: Provider): Promise<number>;
22
+ static getLatestFinalizedBlock(rpc: Provider): Promise<number>;
23
+ static chainFromChainId(eip155ChainId: string): [Network, EvmChains];
24
+ static chainFromRpc(rpc: Provider): Promise<[Network, EvmChains]>;
25
+ static getTokenImplementation(connection: Provider, address: string): ethers_contracts.TokenImplementation;
26
+ }
27
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,OAAO,EACP,eAAe,EACf,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,MAAM,EAQP,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAmB,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAa,MAAM,SAAS,CAAC;AAE/E;;GAEG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,OAAO,CACxC,SAAQ,eAAe,CAAC,CAAC,EAAE,eAAe,CAC1C,YAAW,qBAAqB,CAAC,eAAe,EAAE,OAAO,WAAW,CAAC;IAErE,MAAM,CAAC,SAAS,QAAa;gBAEjB,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC;IAOlE,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ;IAM/C,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAKvE,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,EACzD,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,GACP,OAAO,CAAC,CAAC,CAAC;IAMb,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,EAC3D,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO;IAMV,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;WAKjC,WAAW,CACtB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC;WAUL,UAAU,CACrB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;WAUZ,WAAW,CACtB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EAAE,GACtB,OAAO,CAAC,QAAQ,CAAC;WAaP,QAAQ,CACnB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,QAAQ,EAAE,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC;WAkBP,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;WAG9C,uBAAuB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpE,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;WAavD,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAKvE,MAAM,CAAC,sBAAsB,CAC3B,UAAU,EAAE,QAAQ,EACpB,OAAO,EAAE,MAAM,GACd,gBAAgB,CAAC,mBAAmB;CASxC"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.EvmPlatform = void 0;
27
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
28
+ const ethers_1 = require("ethers");
29
+ const ethers_contracts = __importStar(require("./ethers-contracts"));
30
+ const address_1 = require("./address");
31
+ const chain_1 = require("./chain");
32
+ const types_1 = require("./types");
33
+ /**
34
+ * @category EVM
35
+ */
36
+ class EvmPlatform extends sdk_connect_1.PlatformContext {
37
+ static _platform = types_1._platform;
38
+ constructor(network, _config) {
39
+ super(network, _config ?? (0, sdk_connect_1.networkPlatformConfigs)(network, EvmPlatform._platform));
40
+ }
41
+ getRpc(chain) {
42
+ if (chain in this.config && this.config[chain].rpc)
43
+ return new ethers_1.JsonRpcProvider(this.config[chain].rpc);
44
+ throw new Error('No configuration available for chain: ' + chain);
45
+ }
46
+ getChain(chain, rpc) {
47
+ if (chain in this.config)
48
+ return new chain_1.EvmChain(chain, this, rpc);
49
+ throw new Error('No configuration available for chain: ' + chain);
50
+ }
51
+ static nativeTokenId(network, chain) {
52
+ if (!EvmPlatform.isSupportedChain(chain))
53
+ throw new Error(`invalid chain for EVM: ${chain}`);
54
+ return sdk_connect_1.Wormhole.tokenId(chain, address_1.EvmZeroAddress);
55
+ }
56
+ static isNativeTokenId(network, chain, tokenId) {
57
+ if (!EvmPlatform.isSupportedChain(chain))
58
+ return false;
59
+ if (tokenId.chain !== chain)
60
+ return false;
61
+ return tokenId.address.toString() === address_1.EvmZeroAddress;
62
+ }
63
+ static isSupportedChain(chain) {
64
+ const platform = (0, sdk_connect_1.chainToPlatform)(chain);
65
+ return platform === EvmPlatform._platform;
66
+ }
67
+ static async getDecimals(chain, rpc, token) {
68
+ if ((0, sdk_connect_1.isNative)(token))
69
+ return sdk_connect_1.decimals.nativeDecimals(EvmPlatform._platform);
70
+ const tokenContract = EvmPlatform.getTokenImplementation(rpc, new address_1.EvmAddress(token).toString());
71
+ return Number(tokenContract.decimals());
72
+ }
73
+ static async getBalance(chain, rpc, walletAddr, token) {
74
+ if ((0, sdk_connect_1.isNative)(token))
75
+ return rpc.getBalance(walletAddr);
76
+ const tokenImpl = EvmPlatform.getTokenImplementation(rpc, new address_1.EvmAddress(token).toString());
77
+ return tokenImpl.balanceOf(walletAddr);
78
+ }
79
+ static async getBalances(chain, rpc, walletAddr, tokens) {
80
+ const balancesArr = await Promise.all(tokens.map(async (token) => {
81
+ const balance = await this.getBalance(chain, rpc, walletAddr, token);
82
+ const address = (0, sdk_connect_1.isNative)(token)
83
+ ? 'native'
84
+ : new address_1.EvmAddress(token).toString();
85
+ return { [address]: balance };
86
+ }));
87
+ return balancesArr.reduce((obj, item) => Object.assign(obj, item), {});
88
+ }
89
+ static async sendWait(chain, rpc, stxns) {
90
+ const txhashes = [];
91
+ for (const stxn of stxns) {
92
+ const txRes = await rpc.broadcastTransaction(stxn);
93
+ txhashes.push(txRes.hash);
94
+ if (chain === 'Celo') {
95
+ console.error('TODO: override celo block fetching');
96
+ continue;
97
+ }
98
+ // Wait for confirmation
99
+ const txReceipt = await txRes.wait();
100
+ if (txReceipt === null)
101
+ throw new Error('Received null TxReceipt');
102
+ }
103
+ return txhashes;
104
+ }
105
+ static async getLatestBlock(rpc) {
106
+ return await rpc.getBlockNumber();
107
+ }
108
+ static async getLatestFinalizedBlock(rpc) {
109
+ throw new Error('Not implemented');
110
+ }
111
+ // Look up the Wormhole Canonical Network and Chain from the EVM chainId
112
+ static chainFromChainId(eip155ChainId) {
113
+ const networkChainPair = sdk_connect_1.nativeChainIds.platformNativeChainIdToNetworkChain(EvmPlatform._platform, BigInt(eip155ChainId));
114
+ if (networkChainPair === undefined)
115
+ throw new Error(`Unknown EVM chainId ${eip155ChainId}`);
116
+ const [network, chain] = networkChainPair;
117
+ return [network, chain];
118
+ }
119
+ static async chainFromRpc(rpc) {
120
+ const { chainId } = await rpc.getNetwork();
121
+ return EvmPlatform.chainFromChainId(sdk_connect_1.encoding.bignum.encode(chainId, true));
122
+ }
123
+ static getTokenImplementation(connection, address) {
124
+ const ti = ethers_contracts.TokenImplementation__factory.connect(address, connection);
125
+ if (!ti)
126
+ throw new Error(`No token implementation available for: ${address}`);
127
+ return ti;
128
+ }
129
+ }
130
+ exports.EvmPlatform = EvmPlatform;
131
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Network, PlatformNativeSigner, SignOnlySigner, SignedTx, Signer, UnsignedTransaction } from '@wormhole-foundation/sdk-connect';
2
+ import { Provider, Signer as EthersSigner } from 'ethers';
3
+ import { EvmChains } from './types';
4
+ export declare function getEvmSignerForKey(rpc: Provider, privateKey: string): Promise<Signer>;
5
+ export declare function getEvmSignerForSigner(chain: EvmChains, signer: EthersSigner): Promise<Signer>;
6
+ export declare class EvmNativeSigner<N extends Network, C extends EvmChains = EvmChains> extends PlatformNativeSigner<EthersSigner, N, C> implements SignOnlySigner<N, C> {
7
+ chain(): C;
8
+ address(): string;
9
+ sign(tx: UnsignedTransaction<N, C>[]): Promise<SignedTx[]>;
10
+ }
11
+ export declare function isEvmNativeSigner<N extends Network>(signer: Signer<N>): signer is EvmNativeSigner<N>;
12
+ //# sourceMappingURL=signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,MAAM,EACN,mBAAmB,EAGpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,QAAQ,EAER,MAAM,IAAI,YAAY,EAEvB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,SAAS,EAAa,MAAM,SAAS,CAAC;AAG/C,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAIjB;AAGD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,qBAAa,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,CAC7E,SAAQ,oBAAoB,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAC/C,YAAW,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAE/B,KAAK,IAAI,CAAC;IAIV,OAAO,IAAI,MAAM;IAIX,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CA0CjE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EACjD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAChB,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAM9B"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isEvmNativeSigner = exports.EvmNativeSigner = exports.getEvmSignerForSigner = exports.getEvmSignerForKey = void 0;
4
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
5
+ const ethers_1 = require("ethers");
6
+ const platform_1 = require("./platform");
7
+ const types_1 = require("./types");
8
+ // Get a SignOnlySigner for the EVM platform
9
+ async function getEvmSignerForKey(rpc, privateKey) {
10
+ const [_, chain] = await platform_1.EvmPlatform.chainFromRpc(rpc);
11
+ const _signer = new ethers_1.Wallet(privateKey, rpc);
12
+ return getEvmSignerForSigner(chain, _signer);
13
+ }
14
+ exports.getEvmSignerForKey = getEvmSignerForKey;
15
+ // Get a SignOnlySigner for the EVM platform
16
+ async function getEvmSignerForSigner(chain, signer) {
17
+ const address = await signer.getAddress();
18
+ return new EvmNativeSigner(chain, address, signer);
19
+ }
20
+ exports.getEvmSignerForSigner = getEvmSignerForSigner;
21
+ class EvmNativeSigner extends sdk_connect_1.PlatformNativeSigner {
22
+ chain() {
23
+ return this._chain;
24
+ }
25
+ address() {
26
+ return this._address;
27
+ }
28
+ async sign(tx) {
29
+ const signed = [];
30
+ let nonce = await this._signer.getNonce();
31
+ // TODO: Better gas estimation/limits
32
+ let gasLimit = 500000n;
33
+ let maxFeePerGas = 1500000000n; // 1.5gwei
34
+ let maxPriorityFeePerGas = 100000000n; // 0.1gwei
35
+ // Celo does not support this call
36
+ if (this.chain() !== 'Celo') {
37
+ const feeData = await this._signer.provider.getFeeData();
38
+ maxFeePerGas = feeData.maxFeePerGas ?? maxFeePerGas;
39
+ maxPriorityFeePerGas =
40
+ feeData.maxPriorityFeePerGas ?? maxPriorityFeePerGas;
41
+ }
42
+ for (const txn of tx) {
43
+ const { transaction, description } = txn;
44
+ console.log(`Signing: ${description} for ${this.address()}`);
45
+ const t = {
46
+ ...transaction,
47
+ ...{
48
+ gasLimit,
49
+ maxFeePerGas,
50
+ maxPriorityFeePerGas,
51
+ nonce,
52
+ },
53
+ };
54
+ // TODO
55
+ // const estimate = await this.provider.estimateGas(t)
56
+ // t.gasLimit = estimate
57
+ signed.push(await this._signer.signTransaction(t));
58
+ nonce += 1;
59
+ }
60
+ return signed;
61
+ }
62
+ }
63
+ exports.EvmNativeSigner = EvmNativeSigner;
64
+ function isEvmNativeSigner(signer) {
65
+ return ((0, sdk_connect_1.isNativeSigner)(signer) &&
66
+ (0, sdk_connect_1.chainToPlatform)(signer.chain()) === types_1._platform &&
67
+ isEthersSigner(signer.unwrap()));
68
+ }
69
+ exports.isEvmNativeSigner = isEvmNativeSigner;
70
+ // No type guard provided by ethers, instanceof checks will fail on even slightly different versions of ethers
71
+ function isEthersSigner(thing) {
72
+ return ('provider' in thing &&
73
+ typeof thing.connect === 'function' &&
74
+ typeof thing.getAddress === 'function' &&
75
+ typeof thing.getNonce === 'function' &&
76
+ typeof thing.populateCall === 'function' &&
77
+ typeof thing.populateTransaction === 'function' &&
78
+ typeof thing.estimateGas === 'function' &&
79
+ typeof thing.call === 'function' &&
80
+ typeof thing.resolveName === 'function' &&
81
+ typeof thing.signTransaction === 'function' &&
82
+ typeof thing.sendTransaction === 'function' &&
83
+ typeof thing.signMessage === 'function' &&
84
+ typeof thing.signTypedData === 'function');
85
+ }
86
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './signer';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./signer"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB"}
@@ -0,0 +1,13 @@
1
+ import { Chain, SignOnlySigner, SignedTx, Signer, UnsignedTransaction, Network } from '@wormhole-foundation/connect-sdk';
2
+ import { ethers } from 'ethers';
3
+ export declare function getEvmSigner(rpc: ethers.Provider, privateKey: string): Promise<Signer>;
4
+ export declare class EvmSigner<N extends Network, C extends Chain> implements SignOnlySigner<N, C> {
5
+ private _chain;
6
+ private provider;
7
+ _wallet: ethers.Wallet;
8
+ constructor(_chain: C, provider: ethers.Provider, privateKey: string);
9
+ chain(): C;
10
+ address(): string;
11
+ sign(tx: UnsignedTransaction[]): Promise<SignedTx[]>;
12
+ }
13
+ //# sourceMappingURL=signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../../src/testing/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,cAAc,EACd,QAAQ,EACR,MAAM,EACN,mBAAmB,EACnB,OAAO,EACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,CAAC,QAAQ,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAGD,qBAAa,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,KAAK,CACvD,YAAW,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAK7B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAJlB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;gBAGb,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACjC,UAAU,EAAE,MAAM;IAKpB,KAAK,IAAI,CAAC;IAIV,OAAO,IAAI,MAAM;IAIX,IAAI,CAAC,EAAE,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CA0C3D"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EvmSigner = exports.getEvmSigner = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const platform_1 = require("../platform");
6
+ // Get a SignOnlySigner for the EVM platform
7
+ async function getEvmSigner(rpc, privateKey) {
8
+ const [network, chain] = await platform_1.EvmPlatform.chainFromRpc(rpc);
9
+ return new EvmSigner(chain, rpc, privateKey);
10
+ }
11
+ exports.getEvmSigner = getEvmSigner;
12
+ // EvmSigner implements SignOnlySender
13
+ class EvmSigner {
14
+ _chain;
15
+ provider;
16
+ _wallet;
17
+ constructor(_chain, provider, privateKey) {
18
+ this._chain = _chain;
19
+ this.provider = provider;
20
+ this._wallet = new ethers_1.ethers.Wallet(privateKey, provider);
21
+ }
22
+ chain() {
23
+ return this._chain;
24
+ }
25
+ address() {
26
+ return this._wallet.address;
27
+ }
28
+ async sign(tx) {
29
+ const signed = [];
30
+ let nonce = await this.provider.getTransactionCount(this.address());
31
+ // TODO: Better gas estimation/limits
32
+ let gasLimit = 500000n;
33
+ let maxFeePerGas = 1500000000n; // 1.5gwei
34
+ let maxPriorityFeePerGas = 100000000n; // 0.1gwei
35
+ // Celo does not support this call
36
+ if (this._chain !== 'Celo') {
37
+ const feeData = await this.provider.getFeeData();
38
+ maxFeePerGas = feeData.maxFeePerGas ?? maxFeePerGas;
39
+ maxPriorityFeePerGas =
40
+ feeData.maxPriorityFeePerGas ?? maxPriorityFeePerGas;
41
+ }
42
+ for (const txn of tx) {
43
+ const { transaction, description } = txn;
44
+ console.log(`Signing: ${description} for ${this.address()}`);
45
+ const t = {
46
+ ...transaction,
47
+ ...{
48
+ gasLimit,
49
+ maxFeePerGas,
50
+ maxPriorityFeePerGas,
51
+ nonce,
52
+ },
53
+ };
54
+ // TODO
55
+ // const estimate = await this.provider.estimateGas(t)
56
+ // t.gasLimit = estimate
57
+ signed.push(await this._wallet.signTransaction(t));
58
+ nonce += 1;
59
+ }
60
+ return signed;
61
+ }
62
+ }
63
+ exports.EvmSigner = EvmSigner;
64
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../src/testing/signer.ts"],"names":[],"mappings":";;;AAQA,mCAAgC;AAChC,0CAA0C;AAE1C,4CAA4C;AACrC,KAAK,UAAU,YAAY,CAChC,GAAoB,EACpB,UAAkB;IAElB,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,sBAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,IAAI,SAAS,CAA+B,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AAC7E,CAAC;AAND,oCAMC;AAED,sCAAsC;AACtC,MAAa,SAAS;IAMV;IACA;IAJV,OAAO,CAAgB;IAEvB,YACU,MAAS,EACT,QAAyB,EACjC,UAAkB;QAFV,WAAM,GAAN,MAAM,CAAG;QACT,aAAQ,GAAR,QAAQ,CAAiB;QAGjC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAyB;QAClC,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpE,qCAAqC;QACrC,IAAI,QAAQ,GAAG,OAAQ,CAAC;QACxB,IAAI,YAAY,GAAG,WAAc,CAAC,CAAC,UAAU;QAC7C,IAAI,oBAAoB,GAAG,UAAY,CAAC,CAAC,UAAU;QAEnD,kCAAkC;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACjD,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC;YACpD,oBAAoB;gBAClB,OAAO,CAAC,oBAAoB,IAAI,oBAAoB,CAAC;SACxD;QAED,KAAK,MAAM,GAAG,IAAI,EAAE,EAAE;YACpB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,QAAQ,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAE7D,MAAM,CAAC,GAA8B;gBACnC,GAAG,WAAW;gBACd,GAAG;oBACD,QAAQ;oBACR,YAAY;oBACZ,oBAAoB;oBACpB,KAAK;iBACN;aACF,CAAC;YAEF,OAAO;YACP,sDAAsD;YACtD,wBAAwB;YAExB,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAEnD,KAAK,IAAI,CAAC,CAAC;SACZ;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA/DD,8BA+DC"}
@@ -0,0 +1,70 @@
1
+ import { PlatformToChains, UniversalOrNative } from '@wormhole-foundation/sdk-connect';
2
+ import { TransactionRequest } from 'ethers';
3
+ export declare const unusedNonce = 0;
4
+ export declare const unusedArbiterFee = 0n;
5
+ /**
6
+ * Runtime value for the EVM Platform
7
+ * */
8
+ export declare const _platform: 'Evm';
9
+ /**
10
+ * Type for the EVM Platform
11
+ */
12
+ export type EvmPlatformType = typeof _platform;
13
+ /**
14
+ * Type representing a union of the EVM Chains
15
+ */
16
+ export type EvmChains = PlatformToChains<EvmPlatformType>;
17
+ export type UniversalOrEvm = UniversalOrNative<EvmChains>;
18
+ export type AnyEvmAddress = UniversalOrEvm | string | Uint8Array;
19
+ export declare const addFrom: (txReq: TransactionRequest, from: string) => {
20
+ from: string;
21
+ type?: number | null | undefined;
22
+ to?: import("ethers").AddressLike | null | undefined;
23
+ nonce?: number | null | undefined;
24
+ gasLimit?: import("ethers").BigNumberish | null | undefined;
25
+ gasPrice?: import("ethers").BigNumberish | null | undefined;
26
+ maxPriorityFeePerGas?: import("ethers").BigNumberish | null | undefined;
27
+ maxFeePerGas?: import("ethers").BigNumberish | null | undefined;
28
+ data?: string | null | undefined;
29
+ value?: import("ethers").BigNumberish | null | undefined;
30
+ chainId?: import("ethers").BigNumberish | null | undefined;
31
+ accessList?: import("ethers").AccessListish | null | undefined;
32
+ customData?: any;
33
+ blockTag?: import("ethers").BlockTag | undefined;
34
+ enableCcipRead?: boolean | undefined;
35
+ };
36
+ export declare const addChainId: (txReq: TransactionRequest, chainId: bigint) => {
37
+ chainId: bigint;
38
+ type?: number | null | undefined;
39
+ to?: import("ethers").AddressLike | null | undefined;
40
+ from?: import("ethers").AddressLike | null | undefined;
41
+ nonce?: number | null | undefined;
42
+ gasLimit?: import("ethers").BigNumberish | null | undefined;
43
+ gasPrice?: import("ethers").BigNumberish | null | undefined;
44
+ maxPriorityFeePerGas?: import("ethers").BigNumberish | null | undefined;
45
+ maxFeePerGas?: import("ethers").BigNumberish | null | undefined;
46
+ data?: string | null | undefined;
47
+ value?: import("ethers").BigNumberish | null | undefined;
48
+ accessList?: import("ethers").AccessListish | null | undefined;
49
+ customData?: any;
50
+ blockTag?: import("ethers").BlockTag | undefined;
51
+ enableCcipRead?: boolean | undefined;
52
+ };
53
+ export declare const addValue: (txReq: TransactionRequest, value: bigint) => {
54
+ value: bigint;
55
+ type?: number | null | undefined;
56
+ to?: import("ethers").AddressLike | null | undefined;
57
+ from?: import("ethers").AddressLike | null | undefined;
58
+ nonce?: number | null | undefined;
59
+ gasLimit?: import("ethers").BigNumberish | null | undefined;
60
+ gasPrice?: import("ethers").BigNumberish | null | undefined;
61
+ maxPriorityFeePerGas?: import("ethers").BigNumberish | null | undefined;
62
+ maxFeePerGas?: import("ethers").BigNumberish | null | undefined;
63
+ data?: string | null | undefined;
64
+ chainId?: import("ethers").BigNumberish | null | undefined;
65
+ accessList?: import("ethers").AccessListish | null | undefined;
66
+ customData?: any;
67
+ blockTag?: import("ethers").BlockTag | undefined;
68
+ enableCcipRead?: boolean | undefined;
69
+ };
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;KAEK;AACL,eAAO,MAAM,SAAS,EAAE,KAAa,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;AAEjE,eAAO,MAAM,OAAO,UAAW,kBAAkB,QAAQ,MAAM;;;;;;;;;;;;;;;;CAG7D,CAAC;AACH,eAAO,MAAM,UAAU,UAAW,kBAAkB,WAAW,MAAM;;;;;;;;;;;;;;;;CAGnE,CAAC;AACH,eAAO,MAAM,QAAQ,UAAW,kBAAkB,SAAS,MAAM;;;;;;;;;;;;;;;;CAG/D,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addValue = exports.addChainId = exports.addFrom = exports._platform = exports.unusedArbiterFee = exports.unusedNonce = void 0;
4
+ exports.unusedNonce = 0;
5
+ exports.unusedArbiterFee = 0n;
6
+ /**
7
+ * Runtime value for the EVM Platform
8
+ * */
9
+ exports._platform = 'Evm';
10
+ const addFrom = (txReq, from) => ({
11
+ ...txReq,
12
+ from,
13
+ });
14
+ exports.addFrom = addFrom;
15
+ const addChainId = (txReq, chainId) => ({
16
+ ...txReq,
17
+ chainId,
18
+ });
19
+ exports.addChainId = addChainId;
20
+ const addValue = (txReq, value) => ({
21
+ ...txReq,
22
+ value,
23
+ });
24
+ exports.addValue = addValue;
25
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAMa,QAAA,WAAW,GAAG,CAAC,CAAC;AAChB,QAAA,gBAAgB,GAAG,EAAE,CAAC;AAEnC;;KAEK;AACQ,QAAA,SAAS,GAAU,KAAK,CAAC;AAc/B,MAAM,OAAO,GAAG,CAAC,KAAyB,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;IACnE,GAAG,KAAK;IACR,IAAI;CACL,CAAC,CAAC;AAHU,QAAA,OAAO,WAGjB;AACI,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAE,OAAe,EAAE,EAAE,CAAC,CAAC;IACzE,GAAG,KAAK;IACR,OAAO;CACR,CAAC,CAAC;AAHU,QAAA,UAAU,cAGpB;AACI,MAAM,QAAQ,GAAG,CAAC,KAAyB,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC;IACrE,GAAG,KAAK;IACR,KAAK;CACN,CAAC,CAAC;AAHU,QAAA,QAAQ,YAGlB"}
@@ -0,0 +1,15 @@
1
+ import { Network, UnsignedTransaction } from '@wormhole-foundation/sdk-connect';
2
+ import { TransactionRequest } from 'ethers';
3
+ import { EvmChains } from './types';
4
+ /**
5
+ * An unsigned transaction for the EVM platform
6
+ */
7
+ export declare class EvmUnsignedTransaction<N extends Network, C extends EvmChains> implements UnsignedTransaction<N, C> {
8
+ readonly transaction: TransactionRequest;
9
+ readonly network: N;
10
+ readonly chain: C;
11
+ readonly description: string;
12
+ readonly parallelizable: boolean;
13
+ constructor(transaction: TransactionRequest, network: N, chain: C, description: string, parallelizable?: boolean);
14
+ }
15
+ //# sourceMappingURL=unsignedTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsignedTransaction.d.ts","sourceRoot":"","sources":["../../src/unsignedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC;;GAEG;AACH,qBAAa,sBAAsB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CACxE,YAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAGlC,QAAQ,CAAC,WAAW,EAAE,kBAAkB;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO;gBAJvB,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,OAAe;CAE3C"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EvmUnsignedTransaction = void 0;
4
+ /**
5
+ * An unsigned transaction for the EVM platform
6
+ */
7
+ class EvmUnsignedTransaction {
8
+ transaction;
9
+ network;
10
+ chain;
11
+ description;
12
+ parallelizable;
13
+ constructor(transaction, network, chain, description, parallelizable = false) {
14
+ this.transaction = transaction;
15
+ this.network = network;
16
+ this.chain = chain;
17
+ this.description = description;
18
+ this.parallelizable = parallelizable;
19
+ }
20
+ }
21
+ exports.EvmUnsignedTransaction = EvmUnsignedTransaction;
22
+ //# sourceMappingURL=unsignedTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsignedTransaction.js","sourceRoot":"","sources":["../../src/unsignedTransaction.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,MAAa,sBAAsB;IAItB;IACA;IACA;IACA;IACA;IALX,YACW,WAA+B,EAC/B,OAAU,EACV,KAAQ,EACR,WAAmB,EACnB,iBAA0B,KAAK;QAJ/B,gBAAW,GAAX,WAAW,CAAoB;QAC/B,YAAO,GAAP,OAAO,CAAG;QACV,UAAK,GAAL,KAAK,CAAG;QACR,gBAAW,GAAX,WAAW,CAAQ;QACnB,mBAAc,GAAd,cAAc,CAAiB;IACvC,CAAC;CACL;AAVD,wDAUC"}
@@ -0,0 +1,26 @@
1
+ import { Address, UniversalAddress } from '@wormhole-foundation/sdk-connect';
2
+ import { AnyEvmAddress } from './types';
3
+ export declare const EvmZeroAddress: string;
4
+ export declare class EvmAddress implements Address {
5
+ static readonly byteSize = 20;
6
+ static readonly platform: "Evm";
7
+ readonly type: string;
8
+ readonly address: string;
9
+ constructor(address: AnyEvmAddress);
10
+ unwrap(): string;
11
+ toString(): string;
12
+ toNative(): this;
13
+ toUint8Array(): Uint8Array;
14
+ toUniversalAddress(): UniversalAddress;
15
+ static isValidAddress(address: string): boolean;
16
+ static instanceof(address: any): address is EvmAddress;
17
+ equals(other: EvmAddress | UniversalAddress): boolean;
18
+ }
19
+ declare global {
20
+ namespace Wormhole {
21
+ interface PlatformToNativeAddressMapping {
22
+ Evm: EvmAddress;
23
+ }
24
+ }
25
+ }
26
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/address.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,gBAAgB,EAGjB,MAAM,kCAAkC,CAAC;AAU1C,OAAO,EAAE,aAAa,EAAa,MAAM,SAAS,CAAC;AAEnD,eAAO,MAAM,cAAc,QAAc,CAAC;AAE1C,qBAAa,UAAW,YAAW,OAAO;IACxC,MAAM,CAAC,QAAQ,CAAC,QAAQ,MAAM;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,QAAa;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IAGjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,OAAO,EAAE,aAAa;IAsClC,MAAM,IAAI,MAAM;IAGhB,QAAQ;IAGR,QAAQ;IAGR,YAAY;IAGZ,kBAAkB;IAKlB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM;IAGrC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,UAAU;IAGtD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,GAAG,OAAO;CAOtD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,QAAQ,CAAC;QACjB,UAAU,8BAA8B;YACtC,GAAG,EAAE,UAAU,CAAC;SACjB;KACF;CACF"}