Skip to content

Commit 199f940

Browse files
fix(sdk-coin-hash): add utils based on network type
TICKET: COIN-5235
1 parent 154883f commit 199f940

File tree

2 files changed

+88
-1
lines changed

2 files changed

+88
-1
lines changed

modules/sdk-coin-hash/src/hashToken.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import { BitGoBase, CoinConstructor, NamedCoinConstructor } from '@bitgo/sdk-core';
22
import { CosmosTokenConfig, coins, tokens } from '@bitgo/statics';
33
import { Hash } from './hash';
4+
import { HashUtils } from './lib/utils';
45

56
export class HashToken extends Hash {
67
public readonly tokenConfig: CosmosTokenConfig;
8+
protected readonly _utils: HashUtils;
79

810
constructor(bitgo: BitGoBase, tokenConfig: CosmosTokenConfig) {
911
const staticsCoin = coins.get(tokenConfig.coin);
1012
super(bitgo, staticsCoin);
1113
this.tokenConfig = tokenConfig;
14+
this._utils = new HashUtils(staticsCoin.network.type);
1215
}
1316

1417
static createTokenConstructor(config: CosmosTokenConfig): CoinConstructor {

modules/sdk-coin-hash/test/unit/hashToken.ts

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import 'should';
1+
import should = require('should');
22

33
import { TestBitGo, TestBitGoAPI } from '@bitgo/sdk-test';
44
import { BitGoAPI } from '@bitgo/sdk-api';
55
import { HashToken } from '../../src';
66
import HashUtils from '../../src/lib/utils';
7+
import { mainnetAddress, testnetAddress } from '../resources/hash';
78

89
describe('Hash Tokens', function () {
910
let bitgo: TestBitGoAPI;
@@ -51,4 +52,87 @@ describe('Hash Tokens', function () {
5152
it('should return denomination for YLDS token on hash using hash as coinFamily', function () {
5253
HashUtils.getTokenDenomsUsingCoinFamily('hash').should.deepEqual(['uylds.fcc']);
5354
});
55+
56+
describe('Address Validation', () => {
57+
it('should get address details without memoId', function () {
58+
const mainnetAddressDetails = mainnetHashToken.getAddressDetails(mainnetAddress.noMemoIdAddress);
59+
mainnetAddressDetails.address.should.equal(mainnetAddress.noMemoIdAddress);
60+
should.not.exist(mainnetAddressDetails.memoId);
61+
62+
const testnetAddressDetails = testnetHashToken.getAddressDetails(testnetAddress.noMemoIdAddress);
63+
testnetAddressDetails.address.should.equal(testnetAddress.noMemoIdAddress);
64+
should.not.exist(testnetAddressDetails.memoId);
65+
});
66+
67+
it('should get address details with memoId', function () {
68+
const mainnetAddressDetails = mainnetHashToken.getAddressDetails(mainnetAddress.validMemoIdAddress);
69+
mainnetAddressDetails.address.should.equal(mainnetAddress.validMemoIdAddress.split('?')[0]);
70+
mainnetAddressDetails.memoId.should.equal('2');
71+
72+
const testnetAddressDetails = testnetHashToken.getAddressDetails(testnetAddress.validMemoIdAddress);
73+
testnetAddressDetails.address.should.equal(testnetAddress.validMemoIdAddress.split('?')[0]);
74+
testnetAddressDetails.memoId.should.equal('2');
75+
});
76+
77+
it('should throw on multiple memo id address', () => {
78+
(() => {
79+
mainnetHashToken.getAddressDetails(mainnetAddress.multipleMemoIdAddress);
80+
}).should.throw();
81+
(() => {
82+
testnetHashToken.getAddressDetails(testnetAddress.multipleMemoIdAddress);
83+
}).should.throw();
84+
});
85+
86+
it('should validate wallet receive address', async function () {
87+
const receiveAddress = {
88+
address: 'tp1496r8u4a48k6khknrhzd6c8cm3c64ewxy5p2rj?memoId=7',
89+
coinSpecific: {
90+
rootAddress: 'tp1496r8u4a48k6khknrhzd6c8cm3c64ewxy5p2rj',
91+
memoID: '7',
92+
},
93+
};
94+
const isValid = await testnetHashToken.isWalletAddress(receiveAddress);
95+
isValid.should.equal(true);
96+
});
97+
98+
it('should validate account addresses correctly', () => {
99+
should.equal(mainnetHashToken._utils.isValidAddress(mainnetAddress.address1), true);
100+
should.equal(mainnetHashToken._utils.isValidAddress(mainnetAddress.address2), true);
101+
should.equal(mainnetHashToken._utils.isValidAddress(mainnetAddress.address3), false);
102+
should.equal(mainnetHashToken._utils.isValidAddress(mainnetAddress.address4), false);
103+
should.equal(mainnetHashToken._utils.isValidAddress('dfjk35y'), false);
104+
should.equal(mainnetHashToken._utils.isValidAddress(undefined as unknown as string), false);
105+
should.equal(mainnetHashToken._utils.isValidAddress(''), false);
106+
should.equal(mainnetHashToken._utils.isValidAddress(mainnetAddress.validMemoIdAddress), true);
107+
should.equal(mainnetHashToken._utils.isValidAddress(mainnetAddress.multipleMemoIdAddress), false);
108+
109+
should.equal(testnetHashToken._utils.isValidAddress(testnetAddress.address1), true);
110+
should.equal(testnetHashToken._utils.isValidAddress(testnetAddress.address2), true);
111+
should.equal(testnetHashToken._utils.isValidAddress(testnetAddress.address3), false);
112+
should.equal(testnetHashToken._utils.isValidAddress(testnetAddress.address4), false);
113+
should.equal(testnetHashToken._utils.isValidAddress('dfjk35y'), false);
114+
should.equal(testnetHashToken._utils.isValidAddress(undefined as unknown as string), false);
115+
should.equal(testnetHashToken._utils.isValidAddress(''), false);
116+
should.equal(testnetHashToken._utils.isValidAddress(testnetAddress.validMemoIdAddress), true);
117+
should.equal(testnetHashToken._utils.isValidAddress(testnetAddress.multipleMemoIdAddress), false);
118+
});
119+
120+
it('should validate validator addresses correctly', () => {
121+
should.equal(mainnetHashToken._utils.isValidValidatorAddress(mainnetAddress.validatorAddress1), true);
122+
should.equal(mainnetHashToken._utils.isValidValidatorAddress(mainnetAddress.validatorAddress2), true);
123+
should.equal(mainnetHashToken._utils.isValidValidatorAddress(mainnetAddress.validatorAddress3), false);
124+
should.equal(mainnetHashToken._utils.isValidValidatorAddress(mainnetAddress.validatorAddress4), false);
125+
should.equal(mainnetHashToken._utils.isValidValidatorAddress('dfjk35y'), false);
126+
should.equal(mainnetHashToken._utils.isValidValidatorAddress(undefined as unknown as string), false);
127+
should.equal(mainnetHashToken._utils.isValidValidatorAddress(''), false);
128+
129+
should.equal(testnetHashToken._utils.isValidValidatorAddress(testnetAddress.validatorAddress1), true);
130+
should.equal(testnetHashToken._utils.isValidValidatorAddress(testnetAddress.validatorAddress2), true);
131+
should.equal(testnetHashToken._utils.isValidValidatorAddress(testnetAddress.validatorAddress3), false);
132+
should.equal(testnetHashToken._utils.isValidValidatorAddress(testnetAddress.validatorAddress4), false);
133+
should.equal(testnetHashToken._utils.isValidValidatorAddress('dfjk35y'), false);
134+
should.equal(testnetHashToken._utils.isValidValidatorAddress(undefined as unknown as string), false);
135+
should.equal(testnetHashToken._utils.isValidValidatorAddress(''), false);
136+
});
137+
});
54138
});

0 commit comments

Comments
 (0)