@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
36 lines • 1.63 kB
JavaScript
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