Skip to content

Commit

Permalink
Add validation for paymaster sign accountOp
Browse files Browse the repository at this point in the history
  • Loading branch information
JIOjosBG committed Nov 30, 2023
1 parent b3ba14c commit 4d5ec7e
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 3 deletions.
10 changes: 10 additions & 0 deletions src/controllers/signAccountOp/signAccountOp.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { ethers, JsonRpcProvider } from 'ethers'

import { schemas } from '../../libs/schemaValidation/validateScehmas'
import AmbireAccount from '../../../contracts/compiled/AmbireAccount.json'
import EntryPointAbi from '../../../contracts/compiled/EntryPoint.json'
import ERC20 from '../../../contracts/compiled/IERC20.json'
Expand Down Expand Up @@ -651,6 +652,15 @@ export class SignAccountOpController extends EventEmitter {
}
)
if (response.success) {
const isValid = schemas.RelayerResponsePaymasterSign(response.data)
if (!isValid) {
this.emitError({
level: 'minor',
message: 'Error submit signature to paymaster/sign. Please contact support.',
error: new Error(schemas.RelayerResponsePaymasterSign.errors)
})
return null
}
userOperation.paymasterAndData = response.data.paymasterAndData

// after getting the paymaster data, if we're in the edge case,
Expand Down
4 changes: 4 additions & 0 deletions src/interfaces/accountOp.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export interface RelayerResponsePaymasterSign {
data: { paymasterAndData: any }
errorState: any[]
}
6 changes: 4 additions & 2 deletions src/libs/schemaValidation/generateSchemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ const source = TJS.getProgramFromFiles(
[
resolve('src', 'interfaces', 'emailVault.ts'),
resolve('src', 'interfaces', 'account.ts'),
resolve('src', 'interfaces', 'portfolio.ts')
resolve('src', 'interfaces', 'portfolio.ts'),
resolve('src', 'interfaces', 'accountOp.ts')
],
COMPILER_OPTIONS,
__dirname
Expand All @@ -30,7 +31,8 @@ const allInterfaces = [
'RecoveryKey',
'EmailVaultData',
'RelayerResponseLinkedAccount',
'RelayerReponsePortfolioAdditional'
'RelayerReponsePortfolioAdditional',
'RelayerResponsePaymasterSign'
]

allInterfaces.forEach((interfaceName) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"paymasterAndData": {}
},
"required": [
"paymasterAndData"
]
},
"errorState": {
"type": "array",
"items": {}
}
},
"required": [
"data",
"errorState"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}
3 changes: 2 additions & 1 deletion src/libs/schemaValidation/validateScehmas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ export const schemas: any = {
RelayerResponseLinkedAccount: ajv.compile(require('./schemas/RelayerResponseLinkedAccount.json')),
RelayerReponsePortfolioAdditional: ajv.compile(
require('./schemas/RelayerReponsePortfolioAdditional.json')
)
),
RelayerResponsePaymasterSign: ajv.compile(require('./schemas/RelayerResponsePaymasterSign.json'))
}
8 changes: 8 additions & 0 deletions src/libs/schemaValidation/validation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ const data = {
errors: [new Error('asd')]
}
]
},
RelayerResponsePaymasterSign: {
correct: [{ data: { paymasterAndData: 'paymasterAndData' }, errorState: [] }]
}
}

Expand All @@ -42,4 +45,9 @@ describe('Describe', () => {
expect(res).toBeTruthy()
expect(schemas.EmailVaultData.errors).toBeNull()
})
test('RelayerResponsePaymasterSign', () => {
const res = schemas.RelayerResponsePaymasterSign(data.RelayerResponsePaymasterSign.correct[0])
expect(res).toBeTruthy()
expect(schemas.RelayerResponsePaymasterSign.errors).toBeNull()
})
})

0 comments on commit 4d5ec7e

Please sign in to comment.