Skip to content

Commit 92c999a

Browse files
feat: use statics to get denom of tokens
2 parents 5bf5237 + e89d793 commit 92c999a

File tree

19 files changed

+86
-28
lines changed

19 files changed

+86
-28
lines changed

modules/abstract-cosmos/src/lib/utils.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
Registry,
2020
} from '@cosmjs/proto-signing';
2121
import { Coin, defaultRegistryTypes } from '@cosmjs/stargate';
22+
import { coins } from '@bitgo/statics';
2223
import BigNumber from 'bignumber.js';
2324
import { SignDoc, TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx';
2425
import { Any } from 'cosmjs-types/google/protobuf/any';
@@ -933,6 +934,19 @@ export class CosmosUtils<CustomMessage = never> implements BaseUtils {
933934
getHashFunction(): Hash {
934935
return createHash('sha256');
935936
}
937+
938+
getTokenDenomsUsingCoinFamily(coinFamily: string): string[] {
939+
// using set to remove duplicates as denom can be same on testnet and mainnet for a few tokens
940+
return [
941+
...new Set(
942+
coins
943+
.filter(
944+
(coin) => coin.family.toLowerCase() === coinFamily.toLowerCase() && coin.isToken && coin.denom !== undefined
945+
)
946+
.map((coin) => coin.denom as string)
947+
),
948+
];
949+
}
936950
}
937951

938952
const utils = new CosmosUtils();

modules/abstract-cosmos/test/unit/cosmosToken.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'should';
33
import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test';
44
import { BitGoAPI } from '@bitgo/sdk-api';
55
import { CosmosToken } from '../../src';
6+
import CosmosUtils from '../../src/lib/utils';
67

78
describe('Cosmos Tokens', function () {
89
let bitgo: TestBitGoAPI;
@@ -46,4 +47,8 @@ describe('Cosmos Tokens', function () {
4647
mainnetCosmosToken.denom.should.equal('uylds.fcc');
4748
mainnetCosmosToken.decimalPlaces.should.equal(6);
4849
});
50+
51+
it('should return denomination for YLDS token on hash using hash as coinFamily', function () {
52+
CosmosUtils.getTokenDenomsUsingCoinFamily('hash').should.deepEqual(['uylds.fcc']);
53+
});
4954
});

modules/sdk-coin-asi/src/lib/constants.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
export const validDenoms = ['fet', 'tfet', 'afet', 'atestfet'];
1+
import { CosmosUtils } from '@bitgo/abstract-cosmos';
2+
3+
const cosmosUtils = new CosmosUtils();
4+
export const validDenoms = ['fet', 'tfet', 'afet', 'atestfet', ...cosmosUtils.getTokenDenomsUsingCoinFamily('asi')];
25
export const accountAddressRegex = /^(fetch)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
36
export const validatorAddressRegex = /^(fetchvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
47
export const contractAddressRegex = /^(fetch)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/;

modules/sdk-coin-atom/src/lib/constants.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
export const validDenoms = ['natom', 'uatom', 'matom', 'atom'];
1+
import { CosmosUtils } from '@bitgo/abstract-cosmos';
2+
3+
const cosmosUtils = new CosmosUtils();
4+
export const validDenoms = ['natom', 'uatom', 'matom', 'atom', ...cosmosUtils.getTokenDenomsUsingCoinFamily('atom')];
25
export const accountAddressRegex = /^(cosmos)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
36
export const validatorAddressRegex = /^(cosmosvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
47
export const contractAddressRegex = /^(cosmos)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/;

modules/sdk-coin-baby/src/lib/constants.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
export const validDenoms = ['baby', 'tbaby', 'ubbn'];
1+
import { CosmosUtils } from '@bitgo/abstract-cosmos';
2+
3+
const cosmosUtils = new CosmosUtils();
4+
export const validDenoms = ['baby', 'tbaby', 'ubbn', ...cosmosUtils.getTokenDenomsUsingCoinFamily('baby')];
25
export const accountAddressRegex = /^(bbn)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
36
export const validatorAddressRegex = /^(bbnvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
47
export const contractAddressRegex = /^(bbn)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/;
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
export const validDenoms = ['nbld', 'ubld', 'mbld', 'bld'];
1+
import { CosmosUtils } from '@bitgo/abstract-cosmos';
2+
3+
const cosmosUtils = new CosmosUtils();
4+
export const validDenoms = ['nbld', 'ubld', 'mbld', 'bld', ...cosmosUtils.getTokenDenomsUsingCoinFamily('bld')];
25
export const accountAddressRegex = /^(agoric)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
36
export const validatorAddressRegex = /^(agoricvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
47
export const contractAddressRegex = /^(agoric)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/;

modules/sdk-coin-coreum/src/lib/constants.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
export const mainnetValidDenoms = ['ucore'];
1+
import { CosmosUtils } from '@bitgo/abstract-cosmos';
2+
3+
const cosmosUtils = new CosmosUtils();
4+
export const validDenoms = ['ucore', 'utestcore', ...cosmosUtils.getTokenDenomsUsingCoinFamily('coreum')];
25
export const mainnetAccountAddressRegex = /^(core)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
36
export const mainnetValidatorAddressRegex = /^(corevaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
47
export const MAINNET_ADDRESS_PREFIX = 'core';
5-
6-
export const testnetValidDenoms = ['utestcore'];
78
export const testnetAccountAddressRegex = /^(testcore)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
89
export const testnetValidatorAddressRegex = /^(testcorevaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
910
export const TESTNET_ADDRESS_PREFIX = 'testcore';

modules/sdk-coin-coreum/src/lib/utils.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,7 @@ export class CoreumUtils extends CosmosUtils {
3535
if (amountBig.isLessThanOrEqualTo(0)) {
3636
throw new InvalidTransactionError('transactionBuilder: validateAmount: Invalid amount: ' + amount.amount);
3737
}
38-
if (
39-
(this.networkType === NetworkType.TESTNET &&
40-
!constants.testnetValidDenoms.find((denom) => denom === amount.denom)) ||
41-
(this.networkType === NetworkType.MAINNET &&
42-
!constants.mainnetValidDenoms.find((denom) => denom === amount.denom))
43-
) {
38+
if (!constants.validDenoms.find((denom) => denom === amount.denom)) {
4439
throw new InvalidTransactionError('transactionBuilder: validateAmount: Invalid denom: ' + amount.denom);
4540
}
4641
}

modules/sdk-coin-cronos/src/lib/constants.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1-
export const validDenoms = ['cro', 'tcro', 'basecro', 'basetcro'];
1+
import { CosmosUtils } from '@bitgo/abstract-cosmos';
2+
3+
const cosmosUtils = new CosmosUtils();
4+
export const validDenoms = [
5+
'cro',
6+
'tcro',
7+
'basecro',
8+
'basetcro',
9+
...cosmosUtils.getTokenDenomsUsingCoinFamily('cronos'),
10+
];
211

312
export const mainnetAccountAddressRegex = /^(cro)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
413
export const mainnetValidatorAddressRegex = /^(crocncl)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;

modules/sdk-coin-hash/src/lib/constants.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
export const validDenoms = ['nhash', 'uhash', 'mhash', 'hash', 'uylds.fcc'];
1+
import { CosmosUtils } from '@bitgo/abstract-cosmos';
2+
3+
const cosmosUtils = new CosmosUtils();
4+
export const validDenoms = ['nhash', 'uhash', 'mhash', 'hash', ...cosmosUtils.getTokenDenomsUsingCoinFamily('hash')];
25
export const mainnetAccountAddressRegex = /^(pb)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
36
export const mainnetValidatorAddressRegex = /^(pbvaloper)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38})$/;
47
export const mainnetContractAddressRegex = /^(pb)1(['qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)$/;

0 commit comments

Comments
 (0)