Skip to content

Commit 579c17f

Browse files
committed
feat: whitelisted message templates per builder
TICKET: COIN-4592
1 parent 2b3634d commit 579c17f

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@ export class Eip191MessageBuilder extends BaseMessageBuilder {
2222
async buildMessage(options: MessageOptions): Promise<IMessage> {
2323
return new EIP191Message(options);
2424
}
25+
26+
protected getWhitelistedMessageTemplates(): Record<string, string> {
27+
// EIP-191 does not have whitelisted message templates
28+
// This means all messages are allowed
29+
return {};
30+
}
2531
}

modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export abstract class BaseMessageBuilder implements IMessageBuilder {
1212
protected type: MessageStandardType;
1313
protected signatures: Signature[] = [];
1414
protected signers: string[] = [];
15+
protected whitelistedMessageTemplates: Record<string, string> = {};
1516
protected metadata?: Record<string, unknown> = {};
1617
protected digest?: string;
1718

@@ -26,6 +27,7 @@ export abstract class BaseMessageBuilder implements IMessageBuilder {
2627
) {
2728
this.coinConfig = coinConfig;
2829
this.type = messageType;
30+
this.whitelistedMessageTemplates = this.getWhitelistedMessageTemplates();
2931
}
3032

3133
/**
@@ -167,4 +169,24 @@ export abstract class BaseMessageBuilder implements IMessageBuilder {
167169
};
168170
return this.build();
169171
}
172+
173+
public isMessageWhitelisted(messageRaw: string): boolean {
174+
if (!this.whitelistedMessageTemplates || Object.keys(this.whitelistedMessageTemplates).length === 0) {
175+
return true;
176+
}
177+
// Check if the message matches any of the whitelisted templates
178+
return Object.values(this.whitelistedMessageTemplates).some((template) => {
179+
const regex = new RegExp(`^${template}$`, 's'); // 's' flag to match newlines
180+
return regex.test(messageRaw);
181+
});
182+
}
183+
184+
protected getWhitelistedMessageTemplates(): Record<string, string> {
185+
const midnightTNCHash = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b';
186+
const midnightGlacierDropClaimMessageTemplate = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${midnightTNCHash}`;
187+
return {
188+
midnightGDClaimMsgTemplate: midnightGlacierDropClaimMessageTemplate,
189+
// Add more whitelisted templates as needed
190+
};
191+
}
170192
}

modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,15 @@ export interface IMessageBuilder {
160160
* @returns The parsed message and signature
161161
*/
162162
fromBroadcastFormat(message: BroadcastableMessage): Promise<IMessage>;
163+
164+
/**
165+
* Checks if the message string is whitelisted.
166+
* Some message standards like EIP-191 allow any message,
167+
*
168+
* @param messageRaw The raw message string to check
169+
* @return True if the message is whitelisted, false otherwise
170+
*/
171+
isMessageWhitelisted(messageRaw: string): boolean;
163172
}
164173

165174
/**

0 commit comments

Comments
 (0)