@etherspot/modular-sdk
Version:
Etherspot Modular SDK - build with ERC-7579 smart accounts modules
94 lines • 3.64 kB
JavaScript
import { concat, encodeAbiParameters, hashMessage, parseAbiParameters, toBytes, toHex } from 'viem';
import { DynamicWalletProvider } from './dynamic.wallet-provider.js';
export class WalletConnectWalletProvider extends DynamicWalletProvider {
static connect(connector) {
return new WalletConnectWalletProvider(connector);
}
constructor(connector) {
super('WalletConnect');
this.connector = connector;
try {
const { accounts: [address], chainId, } = connector;
this.setAddress(address);
this.setNetworkName(chainId);
}
catch (err) {
//
}
this.updateSessionHandler = this.updateSessionHandler.bind(this);
connector.on('connect', this.updateSessionHandler);
connector.on('session_update', this.updateSessionHandler);
connector.on('disconnect', () => {
this.setAddress(null);
this.setNetworkName(null);
});
}
async signMessage(message, validatorAddress, factoryAddress, initCode) {
const msg = toBytes(hashMessage({ raw: toBytes(message) }));
const response = await this.connector.signPersonalMessage([
msg, //
this.address,
]);
if (initCode !== '0x') {
const abiCoderResult = encodeAbiParameters(parseAbiParameters('address, bytes, bytes'), [factoryAddress, initCode, concat([validatorAddress, response])]);
return abiCoderResult + '6492649264926492649264926492649264926492649264926492649264926492'; //magicBytes
}
return typeof response === 'string' ? validatorAddress + response.slice(2) : null;
}
async signUserOp(message) {
return this.connector.signPersonalMessage([
toHex(message), //
this.address,
]);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async signTypedData(msg, validatorAddress, factoryAddress, initCode) {
const signature = await this.connector.request({
method: 'eth_signTypedData_v4',
params: [
this.address,
msg
]
});
if (initCode !== '0x') {
const abiCoderResult = encodeAbiParameters(parseAbiParameters('address, bytes, bytes'), [factoryAddress, initCode, concat([validatorAddress, signature])]);
return abiCoderResult + '6492649264926492649264926492649264926492649264926492649264926492'; //magicBytes
}
return typeof signature === 'string' ? validatorAddress + signature.slice(2) : null;
}
async eth_requestAccounts() {
return [this.address];
}
async eth_accounts() {
return [this.address];
}
async eth_sendTransaction(transaction) {
return this.connector.request({ method: 'eth_sendTransaction', params: [
transaction
] });
}
async eth_signTransaction(transaction) {
return this.connector.request({ method: 'eth_signTransaction', params: [
transaction
] });
}
updateSessionHandler(error, payload) {
let address = null;
let chainId = null;
if (!error) {
try {
({
accounts: [address],
chainId,
} = payload.params[0]);
}
catch (err) {
address = null;
chainId = null;
}
}
this.setAddress(address);
this.setNetworkName(chainId);
}
}
//# sourceMappingURL=wallet-connect.wallet-provider.js.map