Skip to content

Commit

Permalink
setters for validation modules + refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
livingrockrises committed Aug 23, 2023
1 parent 1b148d5 commit 25e5d9d
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 42 deletions.
69 changes: 28 additions & 41 deletions packages/account/src/BiconomySmartAccountV2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import NodeClient from '@biconomy/node-client'
import INodeClient from '@biconomy/node-client'
import { IHybridPaymaster, BiconomyPaymaster, SponsorUserOperationDto } from '@biconomy/paymaster'
import {
ISmartAccount,
SupportedChainsResponse,
BalancesResponse,
BalancesDto,
Expand All @@ -45,8 +44,9 @@ type UserOperationKey = keyof UserOperation
export class BiconomySmartAccountV2 extends BaseSmartAccount {
private nodeClient: INodeClient

// Review: Marked for deletion
// private smartAccountInfo!: ISmartAccount
private _isInitialised!: boolean
// private _isInitialised!: boolean

factoryAddress?: string

Expand All @@ -60,8 +60,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount {

factory?: SmartAccountFactory_v200

// Validation module responsible for account deployment initCode. This acts as a default authorization module.
defaultValidationModule: BaseValidationModule
// Review: if it must be provided. default can be used as active
// Deployed Smart Account can have more than one module enabled. When sending a transaction activeValidationModule is used to prepare and validate userOp signature.
activeValidationModule: BaseValidationModule

constructor(readonly biconomySmartAccountConfig: BiconomySmartAccountV2Config) {
Expand All @@ -70,9 +71,9 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount {
this.factoryAddress =
biconomySmartAccountConfig.factoryAddress ?? DEFAULT_BICONOMY_FACTORY_ADDRESS // This would be fetched from V2
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule!
this.defaultValidationModule = biconomySmartAccountConfig.defaultValidationModule
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule!
this.activeValidationModule = biconomySmartAccountConfig.activeValidationModule ?? this.defaultValidationModule

const { rpcUrl, nodeClientUrl } = biconomySmartAccountConfig

Expand All @@ -93,50 +94,30 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount {
return this.accountContract
}

/**
* @description This function will initialise BiconomyAccount class state
* @returns Promise<BiconomyAccountV2>
*/
/*async init(initilizationData?: InitializeV2Data): Promise<this> {
try {
let _accountIndex
if (initilizationData) {
_accountIndex = initilizationData.accountIndex
}
if (!_accountIndex) _accountIndex = 0
this.isProviderDefined()
isActiveValidationModuleDefined(): boolean {
if (!this.activeValidationModule) throw new Error('Must provide an instance of active validation module.')
return true
}

await this._getAccountContract()
isDefaultValidationModuleDefined(): boolean {
if (!this.defaultValidationModule) throw new Error('Must provide an instance of default validation module.')
return true
}

this.chainId = await this.provider.getNetwork().then((net) => net.chainId)
await this.initializeAccountAtIndex(_accountIndex)
this._isInitialised = true
} catch (error) {
Logger.error(`Failed to call init: ${error}`)
throw error
setActiveValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 {
if(validationModule instanceof BaseValidationModule) {
this.activeValidationModule = validationModule
}
return this
}

async initializeAccountAtIndex(accountIndex: number): Promise<void> {
this.index = accountIndex
// TODO // Review should use index
this.accountAddress = await this.getAccountAddress()
// May not need at all
// await this.setContractsState()
setDefaultValidationModule(validationModule: BaseValidationModule): BiconomySmartAccountV2 {
if(validationModule instanceof BaseValidationModule) {
this.defaultValidationModule = validationModule
}
return this
}

private isInitialized(): boolean {
if (!this._isInitialised)
throw new Error(
'BiconomySmartAccountV2 is not initialized. Please call init() on BiconomySmartAccountV2 instance before interacting with any other functions'
)
return true
}*/

// TODO
async getNonce(): Promise<BigNumber> {
if (await this.isAccountDeployed(await this.getAccountAddress())) {
const accountContract = await this._getAccountContract()
Expand Down Expand Up @@ -188,6 +169,8 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount {
}
}

this.isDefaultValidationModuleDefined()

const populatedTransaction = await this.factory.populateTransaction.deployCounterFactualAccount(
await this.defaultValidationModule.getAddress(),
await this.defaultValidationModule.getInitData(),
Expand Down Expand Up @@ -262,6 +245,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount {

// dummy signature depends on the validation module supplied.
getDummySignature(): string {
this.isActiveValidationModuleDefined()
return this.activeValidationModule.getDummySignature()
}

Expand All @@ -272,6 +256,7 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount {
}

async signUserOp(userOp: Partial<UserOperation>): Promise<UserOperation> {
this.isActiveValidationModuleDefined()
const requiredFields: UserOperationKey[] = [
'sender',
'nonce',
Expand Down Expand Up @@ -497,10 +482,12 @@ export class BiconomySmartAccountV2 extends BaseSmartAccount {
}

async signUserOpHash(userOpHash: string): Promise<string> {
this.isActiveValidationModuleDefined()
return await this.activeValidationModule.signMessage(arrayify(userOpHash))
}

async signMessage(message: Bytes | string): Promise<string> {
this.isActiveValidationModuleDefined()
const dataHash = ethers.utils.arrayify(ethers.utils.hashMessage(message))
let signature = await this.activeValidationModule.signMessage(dataHash)

Expand Down
2 changes: 1 addition & 1 deletion packages/account/src/utils/Types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export interface BiconomySmartAccountV2Config extends BaseSmartAccountConfig {
rpcUrl?: string // as good as Provider
nodeClientUrl?: string // very specific to Biconomy
defaultValidationModule: BaseValidationModule
activeValidationModule: BaseValidationModule
activeValidationModule?: BaseValidationModule
}

export type Overrides = {
Expand Down
1 change: 1 addition & 0 deletions rebuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ rm -rf packages/signers/dist
rm -rf packages/common/node_modules
rm -rf packages/common/package-lock.json
rm -rf packages/common/dist
rm -rf packages/common/src/typechain

rm -rf packages/core-types/node_modules
rm -rf packages/core-types/package-lock.json
Expand Down

0 comments on commit 25e5d9d

Please sign in to comment.