@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
51 lines • 1.74 kB
JavaScript
import { assert } from '@hyperlane-xyz/utils';
import { verifyScale } from '../utils/decimals.js';
export class TokenMetadataMap {
tokenMetadataMap;
constructor() {
this.tokenMetadataMap = new Map();
}
set(chain, metadata) {
this.tokenMetadataMap.set(chain, metadata);
}
getDecimals(chain) {
const config = this.tokenMetadataMap.get(chain);
if (config)
return config.decimals;
return [...this.tokenMetadataMap.values()].find((config) => config?.decimals)?.decimals;
}
getMetadataForChain(chain) {
return this.tokenMetadataMap.get(chain);
}
getName(chain) {
const config = this.tokenMetadataMap.get(chain);
if (config?.name)
return config.name;
for (const [, meta] of this.tokenMetadataMap) {
if (meta.name)
return meta.name;
}
return undefined;
}
getScale(chain) {
return this.tokenMetadataMap.get(chain)?.scale;
}
getSymbol(chain) {
const symbol = this.tokenMetadataMap.get(chain)?.symbol;
if (symbol)
return symbol;
return this.getDefaultSymbol();
}
getDefaultSymbol() {
for (const [, metadata] of this.tokenMetadataMap) {
if (metadata.symbol)
return metadata.symbol;
}
throw new Error('No symbol found in token metadata map.');
}
finalize() {
assert([...this.tokenMetadataMap.values()].every((config) => !!config.decimals), 'All decimals must be defined');
assert(verifyScale(this.tokenMetadataMap), `Found invalid or missing scale for inconsistent decimals`);
}
}
//# sourceMappingURL=TokenMetadataMap.js.map