@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.
- package/README.md +10 -0
- package/dist/cjs/address.d.ts +26 -0
- package/dist/cjs/address.d.ts.map +1 -0
- package/dist/cjs/address.js +77 -0
- package/dist/cjs/address.js.map +1 -0
- package/dist/cjs/chain.d.ts +8 -0
- package/dist/cjs/chain.d.ts.map +1 -0
- package/dist/cjs/chain.js +11 -0
- package/dist/cjs/chain.js.map +1 -0
- package/dist/cjs/ethers-contracts/TokenImplementation.d.ts +340 -0
- package/dist/cjs/ethers-contracts/TokenImplementation.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/TokenImplementation.js +3 -0
- package/dist/cjs/ethers-contracts/TokenImplementation.js.map +1 -0
- package/dist/cjs/ethers-contracts/common.d.ts +51 -0
- package/dist/cjs/ethers-contracts/common.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/common.js +3 -0
- package/dist/cjs/ethers-contracts/common.js.map +1 -0
- package/dist/cjs/ethers-contracts/factories/TokenImplementation__factory.d.ts +431 -0
- package/dist/cjs/ethers-contracts/factories/TokenImplementation__factory.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/factories/TokenImplementation__factory.js +569 -0
- package/dist/cjs/ethers-contracts/factories/TokenImplementation__factory.js.map +1 -0
- package/dist/cjs/ethers-contracts/factories/index.d.ts +2 -0
- package/dist/cjs/ethers-contracts/factories/index.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/factories/index.js +18 -0
- package/dist/cjs/ethers-contracts/factories/index.js.map +1 -0
- package/dist/cjs/ethers-contracts/index.d.ts +3 -0
- package/dist/cjs/ethers-contracts/index.d.ts.map +1 -0
- package/dist/cjs/ethers-contracts/index.js +19 -0
- package/dist/cjs/ethers-contracts/index.js.map +1 -0
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +23 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/platform.d.ts +27 -0
- package/dist/cjs/platform.d.ts.map +1 -0
- package/dist/cjs/platform.js +131 -0
- package/dist/cjs/platform.js.map +1 -0
- package/dist/cjs/signer.d.ts +12 -0
- package/dist/cjs/signer.d.ts.map +1 -0
- package/dist/cjs/signer.js +86 -0
- package/dist/cjs/signer.js.map +1 -0
- package/dist/cjs/testing/index.d.ts +2 -0
- package/dist/cjs/testing/index.d.ts.map +1 -0
- package/dist/cjs/testing/index.js +18 -0
- package/dist/cjs/testing/index.js.map +1 -0
- package/dist/cjs/testing/signer.d.ts +13 -0
- package/dist/cjs/testing/signer.d.ts.map +1 -0
- package/dist/cjs/testing/signer.js +64 -0
- package/dist/cjs/testing/signer.js.map +1 -0
- package/dist/cjs/types.d.ts +70 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +25 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/unsignedTransaction.d.ts +15 -0
- package/dist/cjs/unsignedTransaction.d.ts.map +1 -0
- package/dist/cjs/unsignedTransaction.js +22 -0
- package/dist/cjs/unsignedTransaction.js.map +1 -0
- package/dist/esm/address.d.ts +26 -0
- package/dist/esm/address.d.ts.map +1 -0
- package/dist/esm/address.js +73 -0
- package/dist/esm/address.js.map +1 -0
- package/dist/esm/chain.d.ts +8 -0
- package/dist/esm/chain.d.ts.map +1 -0
- package/dist/esm/chain.js +7 -0
- package/dist/esm/chain.js.map +1 -0
- package/dist/esm/ethers-contracts/TokenImplementation.d.ts +340 -0
- package/dist/esm/ethers-contracts/TokenImplementation.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/TokenImplementation.js +2 -0
- package/dist/esm/ethers-contracts/TokenImplementation.js.map +1 -0
- package/dist/esm/ethers-contracts/common.d.ts +51 -0
- package/dist/esm/ethers-contracts/common.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/common.js +2 -0
- package/dist/esm/ethers-contracts/common.js.map +1 -0
- package/dist/esm/ethers-contracts/factories/TokenImplementation__factory.d.ts +431 -0
- package/dist/esm/ethers-contracts/factories/TokenImplementation__factory.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/factories/TokenImplementation__factory.js +565 -0
- package/dist/esm/ethers-contracts/factories/TokenImplementation__factory.js.map +1 -0
- package/dist/esm/ethers-contracts/factories/index.d.ts +2 -0
- package/dist/esm/ethers-contracts/factories/index.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/factories/index.js +2 -0
- package/dist/esm/ethers-contracts/factories/index.js.map +1 -0
- package/dist/esm/ethers-contracts/index.d.ts +3 -0
- package/dist/esm/ethers-contracts/index.d.ts.map +1 -0
- package/dist/esm/ethers-contracts/index.js +3 -0
- package/dist/esm/ethers-contracts/index.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/platform.d.ts +27 -0
- package/dist/esm/platform.d.ts.map +1 -0
- package/dist/esm/platform.js +104 -0
- package/dist/esm/platform.js.map +1 -0
- package/dist/esm/signer.d.ts +12 -0
- package/dist/esm/signer.d.ts.map +1 -0
- package/dist/esm/signer.js +79 -0
- package/dist/esm/signer.js.map +1 -0
- package/dist/esm/testing/index.d.ts +2 -0
- package/dist/esm/testing/index.d.ts.map +1 -0
- package/dist/esm/testing/index.js +2 -0
- package/dist/esm/testing/index.js.map +1 -0
- package/dist/esm/testing/signer.d.ts +13 -0
- package/dist/esm/testing/signer.d.ts.map +1 -0
- package/dist/esm/testing/signer.js +59 -0
- package/dist/esm/testing/signer.js.map +1 -0
- package/dist/esm/types.d.ts +70 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +19 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/unsignedTransaction.d.ts +15 -0
- package/dist/esm/unsignedTransaction.d.ts.map +1 -0
- package/dist/esm/unsignedTransaction.js +18 -0
- package/dist/esm/unsignedTransaction.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +61 -0
|
@@ -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,104 @@
|
|
|
1
|
+
import { PlatformContext, Wormhole, chainToPlatform, decimals, encoding, isNative, nativeChainIds, networkPlatformConfigs, } from '@wormhole-foundation/sdk-connect';
|
|
2
|
+
import { JsonRpcProvider } from 'ethers';
|
|
3
|
+
import * as ethers_contracts from './ethers-contracts';
|
|
4
|
+
import { EvmAddress, EvmZeroAddress } from './address';
|
|
5
|
+
import { EvmChain } from './chain';
|
|
6
|
+
import { _platform } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* @category EVM
|
|
9
|
+
*/
|
|
10
|
+
export class EvmPlatform extends PlatformContext {
|
|
11
|
+
static _platform = _platform;
|
|
12
|
+
constructor(network, _config) {
|
|
13
|
+
super(network, _config ?? networkPlatformConfigs(network, EvmPlatform._platform));
|
|
14
|
+
}
|
|
15
|
+
getRpc(chain) {
|
|
16
|
+
if (chain in this.config && this.config[chain].rpc)
|
|
17
|
+
return new JsonRpcProvider(this.config[chain].rpc);
|
|
18
|
+
throw new Error('No configuration available for chain: ' + chain);
|
|
19
|
+
}
|
|
20
|
+
getChain(chain, rpc) {
|
|
21
|
+
if (chain in this.config)
|
|
22
|
+
return new EvmChain(chain, this, rpc);
|
|
23
|
+
throw new Error('No configuration available for chain: ' + chain);
|
|
24
|
+
}
|
|
25
|
+
static nativeTokenId(network, chain) {
|
|
26
|
+
if (!EvmPlatform.isSupportedChain(chain))
|
|
27
|
+
throw new Error(`invalid chain for EVM: ${chain}`);
|
|
28
|
+
return Wormhole.tokenId(chain, EvmZeroAddress);
|
|
29
|
+
}
|
|
30
|
+
static isNativeTokenId(network, chain, tokenId) {
|
|
31
|
+
if (!EvmPlatform.isSupportedChain(chain))
|
|
32
|
+
return false;
|
|
33
|
+
if (tokenId.chain !== chain)
|
|
34
|
+
return false;
|
|
35
|
+
return tokenId.address.toString() === EvmZeroAddress;
|
|
36
|
+
}
|
|
37
|
+
static isSupportedChain(chain) {
|
|
38
|
+
const platform = chainToPlatform(chain);
|
|
39
|
+
return platform === EvmPlatform._platform;
|
|
40
|
+
}
|
|
41
|
+
static async getDecimals(chain, rpc, token) {
|
|
42
|
+
if (isNative(token))
|
|
43
|
+
return decimals.nativeDecimals(EvmPlatform._platform);
|
|
44
|
+
const tokenContract = EvmPlatform.getTokenImplementation(rpc, new EvmAddress(token).toString());
|
|
45
|
+
return Number(tokenContract.decimals());
|
|
46
|
+
}
|
|
47
|
+
static async getBalance(chain, rpc, walletAddr, token) {
|
|
48
|
+
if (isNative(token))
|
|
49
|
+
return rpc.getBalance(walletAddr);
|
|
50
|
+
const tokenImpl = EvmPlatform.getTokenImplementation(rpc, new EvmAddress(token).toString());
|
|
51
|
+
return tokenImpl.balanceOf(walletAddr);
|
|
52
|
+
}
|
|
53
|
+
static async getBalances(chain, rpc, walletAddr, tokens) {
|
|
54
|
+
const balancesArr = await Promise.all(tokens.map(async (token) => {
|
|
55
|
+
const balance = await this.getBalance(chain, rpc, walletAddr, token);
|
|
56
|
+
const address = isNative(token)
|
|
57
|
+
? 'native'
|
|
58
|
+
: new EvmAddress(token).toString();
|
|
59
|
+
return { [address]: balance };
|
|
60
|
+
}));
|
|
61
|
+
return balancesArr.reduce((obj, item) => Object.assign(obj, item), {});
|
|
62
|
+
}
|
|
63
|
+
static async sendWait(chain, rpc, stxns) {
|
|
64
|
+
const txhashes = [];
|
|
65
|
+
for (const stxn of stxns) {
|
|
66
|
+
const txRes = await rpc.broadcastTransaction(stxn);
|
|
67
|
+
txhashes.push(txRes.hash);
|
|
68
|
+
if (chain === 'Celo') {
|
|
69
|
+
console.error('TODO: override celo block fetching');
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// Wait for confirmation
|
|
73
|
+
const txReceipt = await txRes.wait();
|
|
74
|
+
if (txReceipt === null)
|
|
75
|
+
throw new Error('Received null TxReceipt');
|
|
76
|
+
}
|
|
77
|
+
return txhashes;
|
|
78
|
+
}
|
|
79
|
+
static async getLatestBlock(rpc) {
|
|
80
|
+
return await rpc.getBlockNumber();
|
|
81
|
+
}
|
|
82
|
+
static async getLatestFinalizedBlock(rpc) {
|
|
83
|
+
throw new Error('Not implemented');
|
|
84
|
+
}
|
|
85
|
+
// Look up the Wormhole Canonical Network and Chain from the EVM chainId
|
|
86
|
+
static chainFromChainId(eip155ChainId) {
|
|
87
|
+
const networkChainPair = nativeChainIds.platformNativeChainIdToNetworkChain(EvmPlatform._platform, BigInt(eip155ChainId));
|
|
88
|
+
if (networkChainPair === undefined)
|
|
89
|
+
throw new Error(`Unknown EVM chainId ${eip155ChainId}`);
|
|
90
|
+
const [network, chain] = networkChainPair;
|
|
91
|
+
return [network, chain];
|
|
92
|
+
}
|
|
93
|
+
static async chainFromRpc(rpc) {
|
|
94
|
+
const { chainId } = await rpc.getNetwork();
|
|
95
|
+
return EvmPlatform.chainFromChainId(encoding.bignum.encode(chainId, true));
|
|
96
|
+
}
|
|
97
|
+
static getTokenImplementation(connection, address) {
|
|
98
|
+
const ti = ethers_contracts.TokenImplementation__factory.connect(address, connection);
|
|
99
|
+
if (!ti)
|
|
100
|
+
throw new Error(`No token implementation available for: ${address}`);
|
|
101
|
+
return ti;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# 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,79 @@
|
|
|
1
|
+
import { PlatformNativeSigner, chainToPlatform, isNativeSigner, } from '@wormhole-foundation/sdk-connect';
|
|
2
|
+
import { Wallet, } from 'ethers';
|
|
3
|
+
import { EvmPlatform } from './platform';
|
|
4
|
+
import { _platform } from './types';
|
|
5
|
+
// Get a SignOnlySigner for the EVM platform
|
|
6
|
+
export async function getEvmSignerForKey(rpc, privateKey) {
|
|
7
|
+
const [_, chain] = await EvmPlatform.chainFromRpc(rpc);
|
|
8
|
+
const _signer = new Wallet(privateKey, rpc);
|
|
9
|
+
return getEvmSignerForSigner(chain, _signer);
|
|
10
|
+
}
|
|
11
|
+
// Get a SignOnlySigner for the EVM platform
|
|
12
|
+
export async function getEvmSignerForSigner(chain, signer) {
|
|
13
|
+
const address = await signer.getAddress();
|
|
14
|
+
return new EvmNativeSigner(chain, address, signer);
|
|
15
|
+
}
|
|
16
|
+
export class EvmNativeSigner extends PlatformNativeSigner {
|
|
17
|
+
chain() {
|
|
18
|
+
return this._chain;
|
|
19
|
+
}
|
|
20
|
+
address() {
|
|
21
|
+
return this._address;
|
|
22
|
+
}
|
|
23
|
+
async sign(tx) {
|
|
24
|
+
const signed = [];
|
|
25
|
+
let nonce = await this._signer.getNonce();
|
|
26
|
+
// TODO: Better gas estimation/limits
|
|
27
|
+
let gasLimit = 500000n;
|
|
28
|
+
let maxFeePerGas = 1500000000n; // 1.5gwei
|
|
29
|
+
let maxPriorityFeePerGas = 100000000n; // 0.1gwei
|
|
30
|
+
// Celo does not support this call
|
|
31
|
+
if (this.chain() !== 'Celo') {
|
|
32
|
+
const feeData = await this._signer.provider.getFeeData();
|
|
33
|
+
maxFeePerGas = feeData.maxFeePerGas ?? maxFeePerGas;
|
|
34
|
+
maxPriorityFeePerGas =
|
|
35
|
+
feeData.maxPriorityFeePerGas ?? maxPriorityFeePerGas;
|
|
36
|
+
}
|
|
37
|
+
for (const txn of tx) {
|
|
38
|
+
const { transaction, description } = txn;
|
|
39
|
+
console.log(`Signing: ${description} for ${this.address()}`);
|
|
40
|
+
const t = {
|
|
41
|
+
...transaction,
|
|
42
|
+
...{
|
|
43
|
+
gasLimit,
|
|
44
|
+
maxFeePerGas,
|
|
45
|
+
maxPriorityFeePerGas,
|
|
46
|
+
nonce,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
// TODO
|
|
50
|
+
// const estimate = await this.provider.estimateGas(t)
|
|
51
|
+
// t.gasLimit = estimate
|
|
52
|
+
signed.push(await this._signer.signTransaction(t));
|
|
53
|
+
nonce += 1;
|
|
54
|
+
}
|
|
55
|
+
return signed;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function isEvmNativeSigner(signer) {
|
|
59
|
+
return (isNativeSigner(signer) &&
|
|
60
|
+
chainToPlatform(signer.chain()) === _platform &&
|
|
61
|
+
isEthersSigner(signer.unwrap()));
|
|
62
|
+
}
|
|
63
|
+
// No type guard provided by ethers, instanceof checks will fail on even slightly different versions of ethers
|
|
64
|
+
function isEthersSigner(thing) {
|
|
65
|
+
return ('provider' in thing &&
|
|
66
|
+
typeof thing.connect === 'function' &&
|
|
67
|
+
typeof thing.getAddress === 'function' &&
|
|
68
|
+
typeof thing.getNonce === 'function' &&
|
|
69
|
+
typeof thing.populateCall === 'function' &&
|
|
70
|
+
typeof thing.populateTransaction === 'function' &&
|
|
71
|
+
typeof thing.estimateGas === 'function' &&
|
|
72
|
+
typeof thing.call === 'function' &&
|
|
73
|
+
typeof thing.resolveName === 'function' &&
|
|
74
|
+
typeof thing.signTransaction === 'function' &&
|
|
75
|
+
typeof thing.sendTransaction === 'function' &&
|
|
76
|
+
typeof thing.signMessage === 'function' &&
|
|
77
|
+
typeof thing.signTypedData === 'function');
|
|
78
|
+
}
|
|
79
|
+
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
|
@@ -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,59 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { EvmPlatform } from '../platform';
|
|
3
|
+
// Get a SignOnlySigner for the EVM platform
|
|
4
|
+
export async function getEvmSigner(rpc, privateKey) {
|
|
5
|
+
const [network, chain] = await EvmPlatform.chainFromRpc(rpc);
|
|
6
|
+
return new EvmSigner(chain, rpc, privateKey);
|
|
7
|
+
}
|
|
8
|
+
// EvmSigner implements SignOnlySender
|
|
9
|
+
export class EvmSigner {
|
|
10
|
+
_chain;
|
|
11
|
+
provider;
|
|
12
|
+
_wallet;
|
|
13
|
+
constructor(_chain, provider, privateKey) {
|
|
14
|
+
this._chain = _chain;
|
|
15
|
+
this.provider = provider;
|
|
16
|
+
this._wallet = new ethers.Wallet(privateKey, provider);
|
|
17
|
+
}
|
|
18
|
+
chain() {
|
|
19
|
+
return this._chain;
|
|
20
|
+
}
|
|
21
|
+
address() {
|
|
22
|
+
return this._wallet.address;
|
|
23
|
+
}
|
|
24
|
+
async sign(tx) {
|
|
25
|
+
const signed = [];
|
|
26
|
+
let nonce = await this.provider.getTransactionCount(this.address());
|
|
27
|
+
// TODO: Better gas estimation/limits
|
|
28
|
+
let gasLimit = 500000n;
|
|
29
|
+
let maxFeePerGas = 1500000000n; // 1.5gwei
|
|
30
|
+
let maxPriorityFeePerGas = 100000000n; // 0.1gwei
|
|
31
|
+
// Celo does not support this call
|
|
32
|
+
if (this._chain !== 'Celo') {
|
|
33
|
+
const feeData = await this.provider.getFeeData();
|
|
34
|
+
maxFeePerGas = feeData.maxFeePerGas ?? maxFeePerGas;
|
|
35
|
+
maxPriorityFeePerGas =
|
|
36
|
+
feeData.maxPriorityFeePerGas ?? maxPriorityFeePerGas;
|
|
37
|
+
}
|
|
38
|
+
for (const txn of tx) {
|
|
39
|
+
const { transaction, description } = txn;
|
|
40
|
+
console.log(`Signing: ${description} for ${this.address()}`);
|
|
41
|
+
const t = {
|
|
42
|
+
...transaction,
|
|
43
|
+
...{
|
|
44
|
+
gasLimit,
|
|
45
|
+
maxFeePerGas,
|
|
46
|
+
maxPriorityFeePerGas,
|
|
47
|
+
nonce,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
// TODO
|
|
51
|
+
// const estimate = await this.provider.estimateGas(t)
|
|
52
|
+
// t.gasLimit = estimate
|
|
53
|
+
signed.push(await this._wallet.signTransaction(t));
|
|
54
|
+
nonce += 1;
|
|
55
|
+
}
|
|
56
|
+
return signed;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../src/testing/signer.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAoB,EACpB,UAAkB;IAElB,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,IAAI,SAAS,CAA+B,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AAC7E,CAAC;AAED,sCAAsC;AACtC,MAAM,OAAO,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,MAAM,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"}
|
|
@@ -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,19 @@
|
|
|
1
|
+
export const unusedNonce = 0;
|
|
2
|
+
export const unusedArbiterFee = 0n;
|
|
3
|
+
/**
|
|
4
|
+
* Runtime value for the EVM Platform
|
|
5
|
+
* */
|
|
6
|
+
export const _platform = 'Evm';
|
|
7
|
+
export const addFrom = (txReq, from) => ({
|
|
8
|
+
...txReq,
|
|
9
|
+
from,
|
|
10
|
+
});
|
|
11
|
+
export const addChainId = (txReq, chainId) => ({
|
|
12
|
+
...txReq,
|
|
13
|
+
chainId,
|
|
14
|
+
});
|
|
15
|
+
export const addValue = (txReq, value) => ({
|
|
16
|
+
...txReq,
|
|
17
|
+
value,
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC;;KAEK;AACL,MAAM,CAAC,MAAM,SAAS,GAAU,KAAK,CAAC;AActC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAyB,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;IACnE,GAAG,KAAK;IACR,IAAI;CACL,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAE,OAAe,EAAE,EAAE,CAAC,CAAC;IACzE,GAAG,KAAK;IACR,OAAO;CACR,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAyB,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC;IACrE,GAAG,KAAK;IACR,KAAK;CACN,CAAC,CAAC"}
|
|
@@ -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,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An unsigned transaction for the EVM platform
|
|
3
|
+
*/
|
|
4
|
+
export class EvmUnsignedTransaction {
|
|
5
|
+
transaction;
|
|
6
|
+
network;
|
|
7
|
+
chain;
|
|
8
|
+
description;
|
|
9
|
+
parallelizable;
|
|
10
|
+
constructor(transaction, network, chain, description, parallelizable = false) {
|
|
11
|
+
this.transaction = transaction;
|
|
12
|
+
this.network = network;
|
|
13
|
+
this.chain = chain;
|
|
14
|
+
this.description = description;
|
|
15
|
+
this.parallelizable = parallelizable;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=unsignedTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsignedTransaction.js","sourceRoot":"","sources":["../../src/unsignedTransaction.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,OAAO,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"}
|