UNPKG

@hyperlane-xyz/sdk

Version:

The official SDK for the Hyperlane Network

36 lines 1.63 kB
import { Wallet, ethers } from 'ethers'; import { Wallet as ZkSyncWallet } from 'zksync-ethers'; import { TronWallet } from '@hyperlane-xyz/tron-sdk/runtime'; import { ProtocolType, assert } from '@hyperlane-xyz/utils'; import { ChainTechnicalStack } from '../../metadata/chainMetadataTypes.js'; export class EvmMultiProtocolSignerAdapter { chainName; multiProvider; constructor(chainName, privateKey, multiProtocolProvider) { this.chainName = chainName; const multiProvider = multiProtocolProvider.toMultiProvider(); const { protocol, technicalStack, rpcUrls } = multiProvider.getChainMetadata(chainName); assert(ethers.utils.isHexString(privateKey), `Private key for chain ${chainName} should be a hex string`); let wallet; if (technicalStack === ChainTechnicalStack.ZkSync) { wallet = new ZkSyncWallet(privateKey); } else if (protocol === ProtocolType.Tron) { assert(rpcUrls.length > 0, `No RPC URLs configured for Tron chain ${chainName}`); wallet = new TronWallet(privateKey, rpcUrls[0].http); } else { wallet = new Wallet(privateKey); } multiProvider.setSigner(this.chainName, wallet); this.multiProvider = multiProvider; } async address() { return this.multiProvider.getSignerAddress(this.chainName); } async sendAndConfirmTransaction(tx, options) { const res = await this.multiProvider.sendTransaction(this.chainName, tx.transaction, options); return res.transactionHash; } } //# sourceMappingURL=ethersv5.js.map