From 5b2f5d079f04951375d66ebc8fdcb303c5c4f006 Mon Sep 17 00:00:00 2001 From: Akshay Date: Mon, 29 Apr 2024 11:59:17 +0200 Subject: [PATCH] [#397] Emit event on signer deployment --- .../contracts/SafeWebAuthnSignerFactory.sol | 1 + .../contracts/interfaces/ISafeSignerFactory.sol | 9 +++++++++ .../test/SafeWebAuthnSignerProxyFactory.spec.ts | 14 ++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/modules/passkey/contracts/SafeWebAuthnSignerFactory.sol b/modules/passkey/contracts/SafeWebAuthnSignerFactory.sol index 4f2b38da5..0daa689c7 100644 --- a/modules/passkey/contracts/SafeWebAuthnSignerFactory.sol +++ b/modules/passkey/contracts/SafeWebAuthnSignerFactory.sol @@ -42,6 +42,7 @@ contract SafeWebAuthnSignerFactory is ISafeSignerFactory { if (_hasNoCode(signer)) { SafeWebAuthnSignerProxy created = new SafeWebAuthnSignerProxy{salt: bytes32(0)}(address(SINGLETON), x, y, verifiers); require(address(created) == signer); + emit Created(signer, x, y, verifiers); } } diff --git a/modules/passkey/contracts/interfaces/ISafeSignerFactory.sol b/modules/passkey/contracts/interfaces/ISafeSignerFactory.sol index 84bdb88f3..ce3d85e95 100644 --- a/modules/passkey/contracts/interfaces/ISafeSignerFactory.sol +++ b/modules/passkey/contracts/interfaces/ISafeSignerFactory.sol @@ -10,6 +10,15 @@ import {P256} from "../libraries/P256.sol"; * @custom:security-contact bounty@safe.global */ interface ISafeSignerFactory { + /** + * @notice Emitted when a new signer is created. + * @param signer The signer address. + * @param x The x-coordinate of the public key. + * @param y The y-coordinate of the public key. + * @param verifiers The P-256 verifiers to use. + */ + event Created(address signer, uint256 x, uint256 y, P256.Verifiers verifiers); + /** * @notice Gets the unique signer address for the specified data. * @dev The unique signer address must be unique for some given data. The signer is not diff --git a/modules/passkey/test/SafeWebAuthnSignerProxyFactory.spec.ts b/modules/passkey/test/SafeWebAuthnSignerProxyFactory.spec.ts index a53db5361..a7d81ffa1 100644 --- a/modules/passkey/test/SafeWebAuthnSignerProxyFactory.spec.ts +++ b/modules/passkey/test/SafeWebAuthnSignerProxyFactory.spec.ts @@ -90,6 +90,20 @@ describe('SafeWebAuthnSignerFactory', () => { expect(await factory.createSigner.staticCall(x, y, verifiers)).to.eq(signer) await expect(factory.createSigner(x, y, verifiers)).to.not.be.reverted }) + + it('Should emit event only once', async () => { + const { factory, verifiers } = await setupTests() + + const x = ethers.id('publicKey.x') + const y = ethers.id('publicKey.y') + + const signer = await factory.createSigner.staticCall(x, y, verifiers) + + await expect(factory.createSigner(x, y, verifiers)) + .to.emit(factory, 'Created') + .withArgs(signer, x, y, verifiers) + await expect(factory.createSigner(x, y, verifiers)).not.to.emit(factory, 'Created') + }) }) describe('isValidSignatureForSigner', function () {