From 579c17f2d3fa50c4d8c684be9f7518a356b5b173 Mon Sep 17 00:00:00 2001 From: Bhavi Dhingra Date: Sat, 9 Aug 2025 15:46:39 +0530 Subject: [PATCH] feat: whitelisted message templates per builder TICKET: COIN-4592 --- .../messages/eip191/eip191MessageBuilder.ts | 6 +++++ .../baseCoin/messages/baseMessageBuilder.ts | 22 +++++++++++++++++++ .../account-lib/baseCoin/messages/iface.ts | 9 ++++++++ 3 files changed, 37 insertions(+) diff --git a/modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts b/modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts index 858836127c..ccccf0937f 100644 --- a/modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts +++ b/modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts @@ -22,4 +22,10 @@ export class Eip191MessageBuilder extends BaseMessageBuilder { async buildMessage(options: MessageOptions): Promise { return new EIP191Message(options); } + + protected getWhitelistedMessageTemplates(): Record { + // EIP-191 does not have whitelisted message templates + // This means all messages are allowed + return {}; + } } diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts index 032ab09643..80b2c5e0bf 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts @@ -12,6 +12,7 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { protected type: MessageStandardType; protected signatures: Signature[] = []; protected signers: string[] = []; + protected whitelistedMessageTemplates: Record = {}; protected metadata?: Record = {}; protected digest?: string; @@ -26,6 +27,7 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { ) { this.coinConfig = coinConfig; this.type = messageType; + this.whitelistedMessageTemplates = this.getWhitelistedMessageTemplates(); } /** @@ -167,4 +169,24 @@ export abstract class BaseMessageBuilder implements IMessageBuilder { }; return this.build(); } + + public isMessageWhitelisted(messageRaw: string): boolean { + if (!this.whitelistedMessageTemplates || Object.keys(this.whitelistedMessageTemplates).length === 0) { + return true; + } + // Check if the message matches any of the whitelisted templates + return Object.values(this.whitelistedMessageTemplates).some((template) => { + const regex = new RegExp(`^${template}$`, 's'); // 's' flag to match newlines + return regex.test(messageRaw); + }); + } + + protected getWhitelistedMessageTemplates(): Record { + const midnightTNCHash = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b'; + const midnightGlacierDropClaimMessageTemplate = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${midnightTNCHash}`; + return { + midnightGDClaimMsgTemplate: midnightGlacierDropClaimMessageTemplate, + // Add more whitelisted templates as needed + }; + } } diff --git a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts index 43303d77b2..362452868d 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts @@ -160,6 +160,15 @@ export interface IMessageBuilder { * @returns The parsed message and signature */ fromBroadcastFormat(message: BroadcastableMessage): Promise; + + /** + * Checks if the message string is whitelisted. + * Some message standards like EIP-191 allow any message, + * + * @param messageRaw The raw message string to check + * @return True if the message is whitelisted, false otherwise + */ + isMessageWhitelisted(messageRaw: string): boolean; } /**