Skip to content

Commit 1abf91f

Browse files
committed
feat: replace in verifyMessage : response by Error
1 parent ae49d2c commit 1abf91f

File tree

5 files changed

+24
-76
lines changed

5 files changed

+24
-76
lines changed

__tests__/account.test.ts

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {
44
Contract,
55
DeclareDeployUDCResponse,
66
Provider,
7-
SignatureVerifResult,
87
TransactionType,
98
cairo,
109
constants,
@@ -411,32 +410,17 @@ describe('deploy and test Wallet', () => {
411410

412411
if (!signature2) return;
413412

414-
const verifMessageResponse: SignatureVerifResult = await account.verifyMessage(
415-
typedDataExample,
416-
signature2
417-
);
418-
expect(verifMessageResponse.isVerificationProcessed).toBe(true);
419-
expect(verifMessageResponse.isSignatureValid).toBe(false);
413+
const verifMessageResponse: boolean = await account.verifyMessage(typedDataExample, signature2);
414+
expect(verifMessageResponse).toBe(false);
420415

421416
const wrongAccount = new Account(provider, '0x037891', '0x026789', undefined, TEST_TX_VERSION); // non existing account
422-
const verifMessageResponse2: SignatureVerifResult = await wrongAccount.verifyMessage(
423-
typedDataExample,
424-
signature2
425-
);
426-
expect(verifMessageResponse2.isVerificationProcessed).toBe(false);
427-
expect(verifMessageResponse2.error?.message).toContain(
428-
'Signature verification request is rejected by the network.'
429-
);
417+
await expect(wrongAccount.verifyMessage(typedDataExample, signature2)).rejects.toThrow();
430418
});
431419

432420
test('sign and verify message', async () => {
433421
const signature = await account.signMessage(typedDataExample);
434-
const verifMessageResponse: SignatureVerifResult = await account.verifyMessage(
435-
typedDataExample,
436-
signature
437-
);
438-
expect(verifMessageResponse.isVerificationProcessed).toBe(true);
439-
expect(verifMessageResponse.isSignatureValid).toBe(true);
422+
const verifMessageResponse: boolean = await account.verifyMessage(typedDataExample, signature);
423+
expect(verifMessageResponse).toBe(true);
440424
});
441425

442426
describe('Contract interaction with Account', () => {

src/account/default.ts

Lines changed: 13 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import {
3131
Nonce,
3232
ProviderOptions,
3333
Signature,
34-
SignatureVerifResult,
3534
SimulateTransactionDetails,
3635
SimulateTransactionResponse,
3736
TransactionType,
@@ -549,10 +548,7 @@ export class Account extends Provider implements AccountInterface {
549548
return getMessageHash(typedData, this.address);
550549
}
551550

552-
public async verifyMessageHash(
553-
hash: BigNumberish,
554-
signature: Signature
555-
): Promise<SignatureVerifResult> {
551+
public async verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean> {
556552
try {
557553
const resp = await this.callContract({
558554
contractAddress: this.address,
@@ -562,46 +558,26 @@ export class Account extends Provider implements AccountInterface {
562558
signature: formatSignature(signature),
563559
}),
564560
});
565-
// console.log('verifySign=', resp);
566-
if (BigInt(resp.result[0]) === 0n) {
561+
if (BigInt(resp[0]) === 0n) {
567562
// OpenZeppelin 0.8.0 invalid signature
568-
return {
569-
isVerificationProcessed: true,
570-
isSignatureValid: false,
571-
} as SignatureVerifResult;
563+
return false;
572564
}
573565
// OpenZeppelin 0.8.0, ArgentX 0.3.0 & Braavos Cairo 0 valid signature
574-
return {
575-
isVerificationProcessed: true,
576-
isSignatureValid: true,
577-
} as SignatureVerifResult;
566+
return true;
578567
} catch (err) {
579-
// console.log('verifySign error=', err);
580-
if ((err as Error).message.includes('argent/invalid-signature')) {
581-
// ArgentX 0.3.0 invalid signature
582-
return {
583-
isVerificationProcessed: true,
584-
isSignatureValid: false,
585-
} as SignatureVerifResult;
586-
}
587-
if ((err as Error).message.includes('is invalid, with respect to the public key')) {
588-
// Braavos Cairo 0 invalid signature
589-
return {
590-
isVerificationProcessed: true,
591-
isSignatureValid: false,
592-
} as SignatureVerifResult;
568+
if (
569+
['argent/invalid-signature', 'is invalid, with respect to the public key'].some(
570+
(errMessage) => (err as Error).message.includes(errMessage)
571+
)
572+
) {
573+
// ArgentX 0.3.0 invalid signature, Braavos Cairo 0 invalid signature
574+
return false;
593575
}
594-
return {
595-
isVerificationProcessed: false,
596-
error: new Error('Signature verification request is rejected by the network.'),
597-
} as SignatureVerifResult;
576+
throw Error(`Signature verification request is rejected by the network: ${err}`);
598577
}
599578
}
600579

601-
public async verifyMessage(
602-
typedData: TypedData,
603-
signature: Signature
604-
): Promise<SignatureVerifResult> {
580+
public async verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean> {
605581
const hash = await this.hashMessage(typedData);
606582
return this.verifyMessageHash(hash, signature);
607583
}

src/account/interface.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import {
2525
MultiDeployContractResponse,
2626
Nonce,
2727
Signature,
28-
SignatureVerifResult,
2928
SimulateTransactionDetails,
3029
SimulateTransactionResponse,
3130
TypedData,
@@ -357,10 +356,7 @@ export abstract class AccountInterface extends ProviderInterface {
357356
* @returns true if the signature is valid, false otherwise
358357
* @throws {Error} if the JSON object is not a valid JSON or the signature is not a valid signature
359358
*/
360-
public abstract verifyMessage(
361-
typedData: TypedData,
362-
signature: Signature
363-
): Promise<SignatureVerifResult>;
359+
public abstract verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean>;
364360

365361
/**
366362
* Verify a signature of a given hash
@@ -371,10 +367,7 @@ export abstract class AccountInterface extends ProviderInterface {
371367
* @returns true if the signature is valid, false otherwise
372368
* @throws {Error} if the signature is not a valid signature
373369
*/
374-
public abstract verifyMessageHash(
375-
hash: BigNumberish,
376-
signature: Signature
377-
): Promise<SignatureVerifResult>;
370+
public abstract verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean>;
378371

379372
/**
380373
* Gets the nonce of the account with respect to a specific block

src/types/lib/index.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@ import { CompiledContract, CompiledSierraCasm, ContractClass } from './contract'
77
export type WeierstrassSignatureType = weierstrass.SignatureType;
88
export type ArraySignatureType = string[];
99
export type Signature = ArraySignatureType | WeierstrassSignatureType;
10-
export type SignatureVerifResult = {
11-
isVerificationProcessed: boolean;
12-
isSignatureValid?: boolean;
13-
error?: Error;
14-
};
1510

1611
export type BigNumberish = string | number | bigint;
1712

www/docs/guides/signature.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,10 @@ On the receiver side, you receive the JSON, the signature, and the account addre
175175

176176
```typescript
177177
const myAccount = new Account(provider, accountAddress, "0x0123"); // fake private key
178-
const result = await myAccount.verifyMessage(typedMessage, signature);
179-
if (result.isVerificationProcessed) {
180-
console.log("Result (boolean) =", result.isSignatureValid);
181-
} else {
178+
try {
179+
const result = await myAccount.verifyMessage(typedMessage, signature);
180+
console.log("Result (boolean) =", result);
181+
} catch {
182182
console.log("verification failed :", result.error);
183183
}
184184
```

0 commit comments

Comments
 (0)