Skip to content

Commit 61c7bb6

Browse files
authored
Merge pull request #6773 from BitGo/coin-5348
feat: add vetNFTCollection skeleton
2 parents 603ab36 + e84334c commit 61c7bb6

File tree

5 files changed

+104
-0
lines changed

5 files changed

+104
-0
lines changed

modules/sdk-coin-vet/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from './vet';
33
export * from './tvet';
44
export * from './register';
55
export * from './vetToken';
6+
export * from './vetNFTCollection';

modules/sdk-coin-vet/src/register.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ import { BitGoBase } from '@bitgo/sdk-core';
22
import { Vet } from './vet';
33
import { Tvet } from './tvet';
44
import { VetToken } from './vetToken';
5+
import { VetNFTCollection } from './vetNFTCollection';
56

67
export const register = (sdk: BitGoBase): void => {
78
sdk.register('vet', Vet.createInstance);
89
sdk.register('tvet', Tvet.createInstance);
910
VetToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
1011
sdk.register(name, coinConstructor);
1112
});
13+
VetNFTCollection.createNFTCollectionConstructors().forEach(({ name, coinConstructor }) => {
14+
sdk.register(name, coinConstructor);
15+
});
1216
};
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { Vet } from './vet';
2+
import { coins, tokens, VetNFTCollectionConfig } from '@bitgo/statics';
3+
import { BitGoBase, CoinConstructor, NamedCoinConstructor } from '@bitgo/sdk-core';
4+
5+
export class VetNFTCollection extends Vet {
6+
public readonly nftCollectionConfig: VetNFTCollectionConfig;
7+
8+
constructor(bitgo: BitGoBase, nftCollectionConfig: VetNFTCollectionConfig) {
9+
const staticsCoin = nftCollectionConfig.network === 'Mainnet' ? coins.get('vet') : coins.get('tvet');
10+
super(bitgo, staticsCoin);
11+
this.nftCollectionConfig = nftCollectionConfig;
12+
}
13+
14+
static createNFTCollectionConstructor(config: VetNFTCollectionConfig): CoinConstructor {
15+
return (bitgo: BitGoBase) => new VetNFTCollection(bitgo, config);
16+
}
17+
static createNFTCollectionConstructors(
18+
nftCollectionConfigs: VetNFTCollectionConfig[] = [
19+
...tokens.bitcoin.vet.nftCollections,
20+
...tokens.testnet.vet.nftCollections,
21+
]
22+
): NamedCoinConstructor[] {
23+
const nftCollectionCtors: NamedCoinConstructor[] = [];
24+
for (const config of nftCollectionConfigs) {
25+
const nftCollectionConstructor = VetNFTCollection.createNFTCollectionConstructor(config);
26+
nftCollectionCtors.push({ name: config.type, coinConstructor: nftCollectionConstructor });
27+
}
28+
return nftCollectionCtors;
29+
}
30+
31+
get name(): string {
32+
return this.nftCollectionConfig.name;
33+
}
34+
35+
get coin(): string {
36+
return this.nftCollectionConfig.coin;
37+
}
38+
39+
get network(): string {
40+
return this.nftCollectionConfig.network;
41+
}
42+
43+
get nftCollectionId(): string {
44+
return this.nftCollectionConfig.nftCollectionId;
45+
}
46+
47+
getChain(): string {
48+
return this.nftCollectionConfig.type;
49+
}
50+
51+
getBaseChain(): string {
52+
return this.coin;
53+
}
54+
55+
getFullName(): string {
56+
return 'Vet NFT Collection';
57+
}
58+
59+
getBaseFactor(): number {
60+
return Math.pow(10, this.nftCollectionConfig.decimalPlaces);
61+
}
62+
}

modules/statics/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export {
2929
Sip10Token,
3030
Nep141Token,
3131
VetToken,
32+
VetNFTCollection,
3233
CosmosChainToken,
3334
} from './account';
3435
export { CoinMap } from './map';

modules/statics/src/tokenConfig.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
WorldERC20Token,
3030
XrpCoin,
3131
ZkethERC20Token,
32+
VetNFTCollection,
3233
} from './account';
3334
import { CoinFamily, CoinKind, BaseCoin } from './base';
3435
import { coins } from './coins';
@@ -130,6 +131,10 @@ export type VetTokenConfig = BaseNetworkConfig & {
130131
contractAddress: string;
131132
};
132133

134+
export type VetNFTCollectionConfig = BaseNetworkConfig & {
135+
nftCollectionId: string;
136+
};
137+
133138
export type CosmosTokenConfig = BaseNetworkConfig & {
134139
denom: string;
135140
};
@@ -155,6 +160,7 @@ export type TokenConfig =
155160
| Nep141TokenConfig
156161
| CosmosTokenConfig
157162
| VetTokenConfig
163+
| VetNFTCollectionConfig
158164
| TaoTokenConfig
159165
| PolyxTokenConfig;
160166

@@ -245,6 +251,7 @@ export interface Tokens {
245251
};
246252
vet: {
247253
tokens: VetTokenConfig[];
254+
nftCollections: VetNFTCollectionConfig[];
248255
};
249256
cosmos: {
250257
tokens: CosmosTokenConfig[];
@@ -336,6 +343,7 @@ export interface Tokens {
336343
};
337344
vet: {
338345
tokens: VetTokenConfig[];
346+
nftCollections: VetNFTCollectionConfig[];
339347
};
340348
cosmos: {
341349
tokens: CosmosTokenConfig[];
@@ -912,6 +920,17 @@ function getAptNFTCollectionConfig(coin: AptNFTCollection): AptNFTCollectionConf
912920
decimalPlaces: coin.decimalPlaces,
913921
};
914922
}
923+
924+
function getVetNFTCollectionConfig(coin: VetNFTCollection): VetNFTCollectionConfig {
925+
return {
926+
type: coin.name,
927+
coin: coin.network.type === NetworkType.MAINNET ? 'vet' : 'tvet',
928+
network: coin.network.type === NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
929+
name: coin.fullName,
930+
nftCollectionId: coin.nftCollectionId,
931+
decimalPlaces: coin.decimalPlaces,
932+
};
933+
}
915934
const getFormattedAptNFTCollections = (customCoinMap = coins) =>
916935
customCoinMap.reduce((acc: AptNFTCollectionConfig[], coin) => {
917936
if (coin instanceof AptNFTCollection) {
@@ -920,6 +939,14 @@ const getFormattedAptNFTCollections = (customCoinMap = coins) =>
920939
return acc;
921940
}, []);
922941

942+
const getFormattedVetNFTCollections = (customCoinMap = coins) =>
943+
customCoinMap.reduce((acc: VetNFTCollectionConfig[], coin) => {
944+
if (coin instanceof VetNFTCollection) {
945+
acc.push(getVetNFTCollectionConfig(coin));
946+
}
947+
return acc;
948+
}, []);
949+
923950
function getSip10TokenConfig(coin: Sip10Token): Sip10TokenConfig {
924951
return {
925952
type: coin.name,
@@ -997,6 +1024,7 @@ function getCosmosTokenConfig(coin: CosmosChainToken): CosmosTokenConfig {
9971024

9981025
export const getFormattedTokens = (coinMap = coins): Tokens => {
9991026
const formattedAptNFTCollections = getFormattedAptNFTCollections(coinMap);
1027+
const formattedVetNFTCollections = getFormattedVetNFTCollections(coinMap);
10001028
return {
10011029
bitcoin: {
10021030
eth: {
@@ -1088,6 +1116,9 @@ export const getFormattedTokens = (coinMap = coins): Tokens => {
10881116
},
10891117
vet: {
10901118
tokens: getFormattedVetTokens(coinMap).filter((token) => token.network === 'Mainnet'),
1119+
nftCollections: formattedVetNFTCollections.filter(
1120+
(nftCollection: VetNFTCollectionConfig) => nftCollection.network === 'Mainnet'
1121+
),
10911122
},
10921123
cosmos: {
10931124
tokens: getFormattedCosmosChainTokens(coinMap).filter((token) => token.network === 'Mainnet'),
@@ -1183,6 +1214,9 @@ export const getFormattedTokens = (coinMap = coins): Tokens => {
11831214
},
11841215
vet: {
11851216
tokens: getFormattedVetTokens(coinMap).filter((token) => token.network === 'Testnet'),
1217+
nftCollections: formattedVetNFTCollections.filter(
1218+
(nftCollection: VetNFTCollectionConfig) => nftCollection.network === 'Testnet'
1219+
),
11861220
},
11871221
cosmos: {
11881222
tokens: getFormattedCosmosChainTokens(coinMap).filter((token) => token.network === 'Testnet'),
@@ -1294,6 +1328,8 @@ export function getFormattedTokenConfigForCoin(coin: Readonly<BaseCoin>): TokenC
12941328
return getCosmosTokenConfig(coin);
12951329
} else if (coin instanceof VetToken) {
12961330
return getVetTokenConfig(coin);
1331+
} else if (coin instanceof VetNFTCollection) {
1332+
return getVetNFTCollectionConfig(coin);
12971333
}
12981334
return undefined;
12991335
}

0 commit comments

Comments
 (0)