diff --git a/modules/sdk-coin-sol/src/solToken.ts b/modules/sdk-coin-sol/src/solToken.ts index 2e01dc009f..e883030e96 100644 --- a/modules/sdk-coin-sol/src/solToken.ts +++ b/modules/sdk-coin-sol/src/solToken.ts @@ -75,6 +75,14 @@ export class SolToken extends Sol { return Math.pow(10, this.tokenConfig.decimalPlaces); } + /** + * Token standard for consolidation intents (wallet-platform). + * @returns {string} SPL token type identifier + */ + getTokenType(): string { + return 'SPL'; + } + /** * Flag for sending value of 0 * @returns {boolean} True if okay to send 0 value, false otherwise diff --git a/modules/sdk-coin-sol/test/unit/solToken.ts b/modules/sdk-coin-sol/test/unit/solToken.ts index 5484ad3f6a..70cea08b3c 100644 --- a/modules/sdk-coin-sol/test/unit/solToken.ts +++ b/modules/sdk-coin-sol/test/unit/solToken.ts @@ -28,4 +28,12 @@ describe('SOL Token:', function () { solTokenCoin.tokenAddress.should.equal('J3NKxxXZcnNiMjKw9hYb2K4LUxgwB6t1FtPtQVsv3KFr'); solTokenCoin.contractAddress.should.equal('J3NKxxXZcnNiMjKw9hYb2K4LUxgwB6t1FtPtQVsv3KFr'); }); + + it('should return SPL token type for mainnet token', function () { + solTokenCoin.getTokenType().should.equal('SPL'); + }); + + it('should return SPL token type for testnet token', function () { + (bitgo.coin('tsol:usdc') as SolToken).getTokenType().should.equal('SPL'); + }); }); diff --git a/modules/statics/test/unit/coins.ts b/modules/statics/test/unit/coins.ts index 57bb1bcb71..8ebbda4fa1 100644 --- a/modules/statics/test/unit/coins.ts +++ b/modules/statics/test/unit/coins.ts @@ -41,6 +41,7 @@ import { trimmedDynamicBaseChainConfig, } from './resources/amsTokenConfig'; import { EthLikeErc20Token } from '../../../sdk-coin-evm/src'; +import { ProgramID } from '../../src/account'; import { allCoinsAndTokens } from '../../src/allCoinsAndTokens'; interface DuplicateCoinObject { @@ -1012,6 +1013,15 @@ describe('Token contract address field defaults', () => { solToken.contractAddress.should.eql(solToken.tokenAddress); }); }); + + it('have valid programId (SPL or Token-2022)', () => { + const validProgramIds = [ProgramID.TokenProgramId, ProgramID.Token2022ProgramId]; + coins + .filter((coin) => coin.family === CoinFamily.SOL && coin instanceof SolCoin) + .forEach((coin) => { + validProgramIds.should.containEql((coin as SolCoin).programId); + }); + }); }); describe('XRP tokens', function () { it('have `contractAddress` === `issuerAddress::currencyCode`', () => {