@dgpub/prime-sdk
Version:
Etherspot Prime (Account Abstraction) SDK
79 lines (78 loc) • 3.39 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.EtherspotWalletAPI = void 0;
const ethers_1 = require("ethers");
const contracts_1 = require("../contracts");
const utils_1 = require("ethers/lib/utils");
const BaseAccountAPI_1 = require("./BaseAccountAPI");
class EtherspotWalletAPI extends BaseAccountAPI_1.BaseAccountAPI {
constructor(params) {
var _a, _b;
super(params);
this.factoryAddress = params.factoryAddress;
this.index = (_a = params.index) !== null && _a !== void 0 ? _a : 0;
this.predefinedAccountAddress = (_b = params.predefinedAccountAddress) !== null && _b !== void 0 ? _b : null;
}
async checkAccountAddress(address) {
const accountContract = contracts_1.EtherspotWallet__factory.connect(address, this.provider);
if (!(await accountContract.isOwner(this.services.walletService.EOAAddress))) {
throw new Error('the specified accountAddress does not belong to the given EOA provider');
}
else {
this.accountAddress = address;
}
}
async _getAccountContract() {
if (this.accountContract == null) {
this.accountContract = contracts_1.EtherspotWallet__factory.connect(await this.getAccountAddress(), this.provider);
}
return this.accountContract;
}
async getAccountInitCode() {
if (this.factoryAddress != null && this.factoryAddress !== '') {
this.factory = contracts_1.EtherspotWalletFactory__factory.connect(this.factoryAddress, this.provider);
}
else {
throw new Error('no factory to get initCode');
}
return (0, utils_1.hexConcat)([
this.factoryAddress,
this.factory.interface.encodeFunctionData('createAccount', [
this.services.walletService.EOAAddress,
this.index,
]),
]);
}
async getCounterFactualAddress() {
if (this.predefinedAccountAddress) {
await this.checkAccountAddress(this.predefinedAccountAddress);
}
if (!this.accountAddress) {
this.factory = contracts_1.EtherspotWalletFactory__factory.connect(this.factoryAddress, this.provider);
this.accountAddress = await this.factory.getAddress(this.services.walletService.EOAAddress, this.index);
}
return this.accountAddress;
}
async getNonce(key = 0) {
if (await this.checkAccountPhantom()) {
return ethers_1.BigNumber.from(0);
}
return await this.nonceManager.getNonce(await this.getAccountAddress(), key);
}
async encodeExecute(target, value, data) {
const accountContract = await this._getAccountContract();
return accountContract.interface.encodeFunctionData('execute', [target, value, data]);
}
async signUserOpHash(userOpHash) {
const signature = await this.services.walletService.signMessage((0, utils_1.arrayify)(userOpHash));
return signature;
}
get epView() {
return this.entryPointView;
}
async encodeBatch(targets, values, datas) {
const accountContract = await this._getAccountContract();
return accountContract.interface.encodeFunctionData('executeBatch', [targets, values, datas]);
}
}
exports.EtherspotWalletAPI = EtherspotWalletAPI;