@etherspot/remote-signer
Version:
Etherspot Permissioned Signer SDK - signs the UserOp with SessionKey and sends it to the Bundler
1 lines • 5.5 kB
Source Map (JSON)
{"version":3,"sources":["../../src/sdk/base/VerifyingPaymasterAPI.ts"],"sourcesContent":["import fetch from 'cross-fetch';\nimport { UserOperation } from '../common';\nimport { resolveProperties } from '../common/utils';\nimport { BigNumber } from '../types/bignumber';\nimport { toJSON } from '../common/OperationUtils';\nimport { PaymasterAPI } from './PaymasterAPI';\nimport { calcPreVerificationGas } from './calcPreVerificationGas';\n\nconst DUMMY_SIGNATURE =\n '0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c';\n\n// Expected EntryPoint v0.7 Paymaster Response\nexport interface PaymasterResponse {\n result: {\n paymaster: string;\n paymasterData: string;\n preVerificationGas: string;\n verificationGasLimit: string;\n callGasLimit: string;\n paymasterVerificationGasLimit: string;\n paymasterPostOpGasLimit: string;\n }\n}\n\nexport class VerifyingPaymasterAPI extends PaymasterAPI {\n private paymasterUrl: string;\n private entryPoint: string;\n private context: any;\n constructor(paymasterUrl: string, entryPoint: string, context: any) {\n super();\n this.paymasterUrl = paymasterUrl;\n this.entryPoint = entryPoint;\n this.context = context;\n }\n\n async getPaymasterData(userOp: Partial<UserOperation>): Promise<PaymasterResponse> {\n // Hack: userOp includes empty paymasterData which calcPreVerificationGas requires.\n try {\n // userOp.preVerificationGas contains a promise that will resolve to an error.\n await resolveProperties(userOp);\n // eslint-disable-next-line no-empty\n } catch (_) { }\n let pmOp: Partial<UserOperation>;\n if (userOp.factoryData !== \"0x\") {\n pmOp = {\n sender: userOp.sender,\n nonce: userOp.nonce,\n factory: userOp.factory,\n factoryData: userOp.factoryData,\n callData: userOp.callData,\n callGasLimit: userOp.callGasLimit,\n verificationGasLimit: userOp.verificationGasLimit,\n maxFeePerGas: userOp.maxFeePerGas,\n maxPriorityFeePerGas: userOp.maxPriorityFeePerGas,\n signature: DUMMY_SIGNATURE,\n };\n } else {\n pmOp = {\n sender: userOp.sender,\n nonce: userOp.nonce,\n factoryData: userOp.factoryData,\n callData: userOp.callData,\n callGasLimit: userOp.callGasLimit,\n verificationGasLimit: userOp.verificationGasLimit,\n maxFeePerGas: userOp.maxFeePerGas,\n maxPriorityFeePerGas: userOp.maxPriorityFeePerGas,\n signature: DUMMY_SIGNATURE,\n }\n }\n const op = await resolveProperties(pmOp);\n op.preVerificationGas = calcPreVerificationGas(op);\n\n // Ask the paymaster to sign the transaction and return a valid paymasterData value.\n const paymasterData = await fetch(this.paymasterUrl, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ method: 'pm_sponsorUserOperation', params: [await toJSON(op), this.entryPoint, this.context], jsonrpc: '2', id: 2 }),\n })\n .then(async (res) => {\n const response = await await res.json();\n if (response.error) {\n throw new Error(response.error);\n }\n // Since the value of paymasterVerificationGasLimit is defined by the paymaster provider itself, it could be number in string\n if (response.result && response.result.paymasterVerificationGasLimit) \n response.result.paymasterVerificationGasLimit = BigNumber.from(response.result.paymasterVerificationGasLimit).toHexString()\n return response\n })\n .catch((err) => {\n throw new Error(err.message);\n })\n\n return paymasterData;\n }\n}\n\nexport const getVerifyingPaymaster = (paymasterUrl: string, entryPoint: string, context: any) =>\n new VerifyingPaymasterAPI(paymasterUrl, entryPoint, context);\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAQlB,IAAM,kBACJ;AAeK,IAAM,wBAAN,cAAoC,aAAa;AAAA,EAItD,YAAY,cAAsB,YAAoB,SAAc;AAClE,UAAM;AACN,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,iBAAiB,QAA4D;AAEjF,QAAI;AAEF,YAAM,kBAAkB,MAAM;AAAA,IAEhC,SAAS,GAAG;AAAA,IAAE;AACd,QAAI;AACJ,QAAI,OAAO,gBAAgB,MAAM;AAC/B,aAAO;AAAA,QACL,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,QACd,SAAS,OAAO;AAAA,QAChB,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO;AAAA,QACjB,cAAc,OAAO;AAAA,QACrB,sBAAsB,OAAO;AAAA,QAC7B,cAAc,OAAO;AAAA,QACrB,sBAAsB,OAAO;AAAA,QAC7B,WAAW;AAAA,MACb;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,QACd,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO;AAAA,QACjB,cAAc,OAAO;AAAA,QACrB,sBAAsB,OAAO;AAAA,QAC7B,cAAc,OAAO;AAAA,QACrB,sBAAsB,OAAO;AAAA,QAC7B,WAAW;AAAA,MACb;AAAA,IACF;AACA,UAAM,KAAK,MAAM,kBAAkB,IAAI;AACvC,OAAG,qBAAqB,uBAAuB,EAAE;AAGjD,UAAM,gBAAgB,MAAM,MAAM,KAAK,cAAc;AAAA,MACnD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,UAAU;AAAA,QACV,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,QAAQ,2BAA2B,QAAQ,CAAC,MAAM,OAAO,EAAE,GAAG,KAAK,YAAY,KAAK,OAAO,GAAG,SAAS,KAAK,IAAI,EAAE,CAAC;AAAA,IAC5I,CAAC,EACE,KAAK,OAAO,QAAQ;AACnB,YAAM,WAAW,MAAM,MAAM,IAAI,KAAK;AACtC,UAAI,SAAS,OAAO;AAClB,cAAM,IAAI,MAAM,SAAS,KAAK;AAAA,MAChC;AAEA,UAAI,SAAS,UAAU,SAAS,OAAO;AACrC,iBAAS,OAAO,gCAAgC,UAAU,KAAK,SAAS,OAAO,6BAA6B,EAAE,YAAY;AAC5H,aAAO;AAAA,IACT,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,YAAM,IAAI,MAAM,IAAI,OAAO;AAAA,IAC7B,CAAC;AAEH,WAAO;AAAA,EACT;AACF;AAEO,IAAM,wBAAwB,CAAC,cAAsB,YAAoB,YAC9E,IAAI,sBAAsB,cAAc,YAAY,OAAO;","names":[]}