UNPKG

@dgpub/prime-sdk

Version:

Etherspot Prime (Account Abstraction) SDK

79 lines (78 loc) 3.39 kB
"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;