From 071f346e1c9d0c4017b2bbefa1206579c726baa8 Mon Sep 17 00:00:00 2001 From: Aditya Tiwari Date: Sun, 1 Feb 2026 14:36:04 +0530 Subject: [PATCH] fix: remove length check from hash addresses Ticket: COIN-7468 --- modules/sdk-coin-hash/src/lib/constants.ts | 9 +++++---- modules/sdk-coin-hash/test/unit/utils.ts | 5 +++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/sdk-coin-hash/src/lib/constants.ts b/modules/sdk-coin-hash/src/lib/constants.ts index 0cc6531c35..a735d6633e 100644 --- a/modules/sdk-coin-hash/src/lib/constants.ts +++ b/modules/sdk-coin-hash/src/lib/constants.ts @@ -2,12 +2,13 @@ import { CosmosUtils } from '@bitgo/abstract-cosmos'; const cosmosUtils = new CosmosUtils(); export const validDenoms = ['nhash', 'uhash', 'mhash', 'hash', ...cosmosUtils.getTokenDenomsUsingCoinFamily('hash')]; -export const mainnetAccountAddressRegex = /^(pb)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/; -export const mainnetValidatorAddressRegex = /^(pbvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/; +// HASH has seen bech32 addresses that do not conform to a fixed length, so we do not enforce a strict data-part length here. +export const mainnetAccountAddressRegex = /^(pb)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/; +export const mainnetValidatorAddressRegex = /^(pbvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/; export const mainnetContractAddressRegex = /^(pb)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/; export const MAINNET_ADDRESS_PREFIX = 'pb'; -export const testnetAccountAddressRegex = /^(tp)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/; -export const testnetValidatorAddressRegex = /^(tpvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/; +export const testnetAccountAddressRegex = /^(tp)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/; +export const testnetValidatorAddressRegex = /^(tpvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/; export const testnetContractAddressRegex = /^(tp)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/; export const TESTNET_ADDRESS_PREFIX = 'tp'; diff --git a/modules/sdk-coin-hash/test/unit/utils.ts b/modules/sdk-coin-hash/test/unit/utils.ts index 22f1bff59d..0aaf14d6c3 100644 --- a/modules/sdk-coin-hash/test/unit/utils.ts +++ b/modules/sdk-coin-hash/test/unit/utils.ts @@ -13,6 +13,11 @@ describe('utils', () => { should.equal(utils.isValidBlockId(''), false); }); + it('should validate long mainnet account address correctly', () => { + // HASH bech32 addresses can be longer than the standard 20-byte data-part length. + should.equal(utils.isValidAddress('pb1w9ew2yu0w3c72j6j4m85daz7qch5x2w4cfm408js0ku087mq87gq4f9gcj'), true); + }); + it('should validate invalid block hash correctly', () => { should.equal(utils.isValidBlockId(''), false); should.equal(utils.isValidBlockId('0xade35465gfvdcsxsz24300'), false);