Skip to content

Commit 718c1b1

Browse files
fix(sdk-coin-sol): blind signing for sol token enablements check multiple tokens
TICKET: WP-5744
1 parent c694864 commit 718c1b1

File tree

1 file changed

+50
-48
lines changed
  • modules/sdk-coin-sol/src

1 file changed

+50
-48
lines changed

modules/sdk-coin-sol/src/sol.ts

Lines changed: 50 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -252,63 +252,65 @@ export class Sol extends BaseCoin {
252252
return explanation.tokenEnablements;
253253
}
254254

255-
throwIfMissingEnableTokenConfigOrReturn(txParams: TransactionParams): TokenEnablement {
255+
throwIfMissingEnableTokenConfigOrReturn(txParams: TransactionParams): TokenEnablement[] {
256256
if (!txParams.enableTokens || txParams.enableTokens.length === 0) throw new Error('Missing enable token config');
257-
if (txParams.enableTokens.length > 1)
258-
throw new Error('Multiple token enablement not supported in a single transaction');
259-
return txParams.enableTokens[0];
257+
return txParams.enableTokens;
260258
}
261259

262-
verifyTokenName(tokenEnablementsPrebuild: ITokenEnablement[], enableTokensConfig: TokenEnablement): void {
263-
const expectedTokenName = enableTokensConfig.name;
264-
tokenEnablementsPrebuild.forEach((tokenEnablement) => {
265-
if (!tokenEnablement.tokenName) throw new Error('Missing token name on token enablement tx');
266-
if (tokenEnablement.tokenName !== expectedTokenName)
267-
throw new Error(
268-
`Invalid token name: expected ${expectedTokenName}, got ${tokenEnablement.tokenName} on token enablement tx`
269-
);
260+
verifyTokenName(tokenEnablementsPrebuild: ITokenEnablement[], enableTokensConfig: TokenEnablement[]): void {
261+
enableTokensConfig.forEach((enableTokenConfig) => {
262+
const expectedTokenName = enableTokenConfig.name;
263+
tokenEnablementsPrebuild.forEach((tokenEnablement) => {
264+
if (!tokenEnablement.tokenName) throw new Error('Missing token name on token enablement tx');
265+
if (tokenEnablement.tokenName !== expectedTokenName)
266+
throw new Error(
267+
`Invalid token name: expected ${expectedTokenName}, got ${tokenEnablement.tokenName} on token enablement tx`
268+
);
269+
});
270270
});
271271
}
272272

273273
async verifyTokenAddress(
274274
tokenEnablementsPrebuild: ITokenEnablement[],
275-
enableTokensConfig: TokenEnablement
275+
enableTokensConfig: TokenEnablement[]
276276
): Promise<void> {
277-
const expectedTokenAddress = enableTokensConfig.address;
278-
const expectedTokenName = enableTokensConfig.name;
279-
280-
if (!expectedTokenAddress) throw new Error('Missing token address on token enablement tx');
281-
if (!expectedTokenName) throw new Error('Missing token name on token enablement tx');
282-
283-
for (const tokenEnablement of tokenEnablementsPrebuild) {
284-
let tokenMintAddress: Readonly<SolCoin> | undefined;
285-
try {
286-
tokenMintAddress = getSolTokenFromTokenName(expectedTokenName);
287-
} catch {
288-
throw new Error(`Unable to derive ATA for token address: ${expectedTokenAddress}`);
289-
}
290-
if (
291-
!tokenMintAddress ||
292-
tokenMintAddress.tokenAddress === undefined ||
293-
tokenMintAddress.programId === undefined
294-
) {
295-
throw new Error(`Unable to get token mint address for ${expectedTokenName}`);
296-
}
297-
let ata: string;
298-
try {
299-
ata = await getAssociatedTokenAccountAddress(
300-
tokenMintAddress.tokenAddress,
301-
expectedTokenAddress,
302-
true,
303-
tokenMintAddress.programId
304-
);
305-
} catch {
306-
throw new Error(`Unable to derive ATA for token address: ${expectedTokenAddress}`);
307-
}
308-
if (ata !== tokenEnablement.address) {
309-
throw new Error(
310-
`Invalid token address: expected ${ata}, got ${tokenEnablement.address} on token enablement tx`
311-
);
277+
for (const enableTokenConfig of enableTokensConfig) {
278+
const expectedTokenAddress = enableTokenConfig.address;
279+
const expectedTokenName = enableTokenConfig.name;
280+
281+
if (!expectedTokenAddress) throw new Error('Missing token address on token enablement tx');
282+
if (!expectedTokenName) throw new Error('Missing token name on token enablement tx');
283+
284+
for (const tokenEnablement of tokenEnablementsPrebuild) {
285+
let tokenMintAddress: Readonly<SolCoin> | undefined;
286+
try {
287+
tokenMintAddress = getSolTokenFromTokenName(expectedTokenName);
288+
} catch {
289+
throw new Error(`Unable to derive ATA for token address: ${expectedTokenAddress}`);
290+
}
291+
if (
292+
!tokenMintAddress ||
293+
tokenMintAddress.tokenAddress === undefined ||
294+
tokenMintAddress.programId === undefined
295+
) {
296+
throw new Error(`Unable to get token mint address for ${expectedTokenName}`);
297+
}
298+
let ata: string;
299+
try {
300+
ata = await getAssociatedTokenAccountAddress(
301+
tokenMintAddress.tokenAddress,
302+
expectedTokenAddress,
303+
true,
304+
tokenMintAddress.programId
305+
);
306+
} catch {
307+
throw new Error(`Unable to derive ATA for token address: ${expectedTokenAddress}`);
308+
}
309+
if (ata !== tokenEnablement.address) {
310+
throw new Error(
311+
`Invalid token address: expected ${ata}, got ${tokenEnablement.address} on token enablement tx`
312+
);
313+
}
312314
}
313315
}
314316
}

0 commit comments

Comments
 (0)