Skip to content

Commit

Permalink
Merge branch '402-add-contract-tokens-version' into 'dev'
Browse files Browse the repository at this point in the history
Resolve "add log for version of contract files and tokenMap"

Closes #402

See merge request ergo/rosen-bridge/guard-service!391
  • Loading branch information
vorujack committed Sep 24, 2024
2 parents 67b902c + c50867c commit b57cb08
Show file tree
Hide file tree
Showing 13 changed files with 57 additions and 20 deletions.
5 changes: 5 additions & 0 deletions .changeset/tricky-seals-battle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'guard-service': major
---

support contract and tokensMap version and update info controller for version configs
7 changes: 6 additions & 1 deletion src/api/generalInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import WinstonLogger from '@rosen-bridge/winston-logger';
import { getTokenData } from '../utils/getTokenData';
import GuardsErgoConfigs from '../configs/GuardsErgoConfigs';
import Utils from '../utils/Utils';
import Configs from '../configs/Configs';

const logger = WinstonLogger.getInstance().getLogger(import.meta.url);

Expand Down Expand Up @@ -86,7 +87,11 @@ const infoRoute = (server: FastifySeverInstance) => {
reply.status(200).send({
// TODO: Update dependencies like typescript and vitest
// local:ergo/rosen-bridge/guard-service#364
version: Utils.readJsonFile('./package.json').version,
versions: {
app: Utils.readJsonFile('./package.json').version,
contract: rosenConfig.contractVersion,
tokensMap: Configs.tokensVersion,
},
health: {
status: healthStatus,
trialErrors: trialErrors,
Expand Down
6 changes: 5 additions & 1 deletion src/api/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ export const OutputItemsSchema = <T extends TProperties>(
});

export const InfoResponseSchema = Type.Object({
version: Type.String(),
versions: Type.Object({
app: Type.String(),
contract: Type.String(),
tokensMap: Type.String(),
}),
health: Type.Object({
status: Type.String(),
trialErrors: Type.Array(Type.String()),
Expand Down
5 changes: 4 additions & 1 deletion src/bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ import 'reflect-metadata';
import Configs from './configs/Configs';
import WinstonLogger from '@rosen-bridge/winston-logger';
import Utils from './utils/Utils';
import { rosenConfig } from './configs/RosenConfig';

await WinstonLogger.init(Configs.logs);

const logger = WinstonLogger.getInstance().getLogger(import.meta.url);

const version = Utils.readJsonFile('./package.json').version;

logger.info(`Guard Started with version ${version}`);
logger.info(`Guard version: ${version}`);
logger.info(`Guard contract version: ${rosenConfig.contractVersion}`);
logger.info(`Guard tokens version: ${Configs.tokensVersion}`);
23 changes: 15 additions & 8 deletions src/configs/Configs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,16 +119,23 @@ class Configs {
config.get<string>(`${network}.networkType`).toLowerCase()
);
static addressesBasePath = config.get<string>('contracts.addressesBasePath');
private static tokensConfig: RosenTokens;
static tokensVersion: string;
static tokens = (): RosenTokens => {
const tokensPath = config.get<string>('tokensPath');
if (!fs.existsSync(tokensPath)) {
throw new Error(
`Tokens config file with path ${tokensPath} doesn't exist`
);
} else {
const configJson: string = fs.readFileSync(tokensPath, 'utf8');
return JSON.parse(configJson);
if (!this.tokensConfig) {
const tokensPath = config.get<string>('tokensPath');
if (!fs.existsSync(tokensPath)) {
throw new Error(
`Tokens config file with path ${tokensPath} doesn't exist`
);
} else {
const configJson: string = fs.readFileSync(tokensPath, 'utf8');
const tokensConfig = JSON.parse(configJson);
this.tokensConfig = tokensConfig;
this.tokensVersion = tokensConfig.version;
}
}
return this.tokensConfig;
};
static tokenMap = new TokenMap(this.tokens());
static thresholds = (): ThresholdConfig => {
Expand Down
6 changes: 0 additions & 6 deletions src/configs/GuardsErgoConfigs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,6 @@ class GuardsErgoConfigs {
// the ergo-related contract, addresses and tokens in rosen bridge
static ergoContractConfig = rosenConfig.contractReader(ERGO_CHAIN);

// Ergo rosen extractor required configs
static extractorOptions = {
lockAddress: this.ergoContractConfig.lockAddress,
tokens: Configs.tokens(),
};

// ErgoChain required configs
static chainConfigs: ErgoConfigs = {
fee: this.txFee,
Expand Down
13 changes: 11 additions & 2 deletions src/configs/RosenConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,16 @@ class ContractConfig {
readonly RepoNFT: string;
readonly RWTId: string;

constructor(path: string) {
constructor(path: string, contractVersion: string) {
if (!fs.existsSync(path)) {
throw new Error(`networkConfig file with path ${path} doesn't exist`);
} else {
const configJson: string = fs.readFileSync(path, 'utf8');
const config = JSON.parse(configJson);
if (config.version !== contractVersion)
throw new Error(
`The contract version of the networkConfig file located at ${path} with version ${config.version} is incompatible with the following contract versions: ${contractVersion}.`
);
this.cleanupNFT = config.tokens.CleanupNFT;
this.cleanupConfirm = config.cleanupConfirm;
this.permitAddress = config.addresses.WatcherPermit;
Expand All @@ -39,6 +43,7 @@ class RosenConfig {
readonly RSN: string;
readonly guardNFT: string;
readonly rsnRatioNFT: string;
readonly contractVersion: string;
readonly contracts: Map<string, ContractConfig>;

constructor() {
Expand All @@ -58,10 +63,14 @@ class RosenConfig {
this.RSN = config.tokens.RSN;
this.guardNFT = config.tokens.GuardNFT;
this.rsnRatioNFT = config.tokens.RSNRatioNFT;
this.contractVersion = config.version;
}
supportingNetworks.forEach((network) => {
const networkName = network.split('-')[0].toLowerCase();
const contractConfig = new ContractConfig(this.getAddress(network));
const contractConfig = new ContractConfig(
this.getAddress(network),
this.contractVersion
);
this.contracts.set(networkName, contractConfig);
});
}
Expand Down
7 changes: 6 additions & 1 deletion tests/api/testData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@ import { ADA, CARDANO_CHAIN } from '@rosen-chains/cardano';
import { rosenConfig } from '../../src/configs/RosenConfig';
import GuardsBitcoinConfigs from '../../src/configs/GuardsBitcoinConfigs';
import { BITCOIN_CHAIN } from '@rosen-chains/bitcoin';
import Configs from '../../src/configs/Configs';

export const guardInfo = {
version: expect.any(String),
versions: {
app: expect.any(String),
contract: rosenConfig.contractVersion,
tokensMap: Configs.tokensVersion,
},
health: {
status: HealthStatusLevel.HEALTHY,
trialErrors: [],
Expand Down
1 change: 1 addition & 0 deletions tests/resources/addresses/contracts-bitcoin-testnet.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"version": "testVersion",
"addresses": {
"RWTRepo": "N9nHZxAm7Z476Nbw6yF2X6BQEct7nNCm4SJeCK8DJEkERj6LXMJvKqG49WWSfNDufuuFEtN8msfWDd8UR4QUCmLEwFRWXC5hxEdjTWfFYT8YqPrrYziDrjYzCbyzTjyht6qg4W5KPs6zNirtN7AyeTSMDeT6bRzL66kCSp8UFkmCsn9U4ZteWeFNp1xDtYtaqRE5SkABjwNsP5RioUY7hpbFhpWWQLosND6ys8eJJGkziwxjVV8goEEMzjGrTH5KUM8hDKQBAeNsiaZLLVfrAJBfFTHKggTLzkZQXB7Nhx6GP36E4jgAPPmKkvaKbtd7ANtfqpfjjBroCcK4E9ZVNM34r4BNaMazeBYxPAtcjFCeCTaMR7vRuaAVmX7xwLK3MYoHBH3NPH9usseDDxnz5sm21AqZVdp6t7CUi9xFb3qSnThFFPJk2fZF5FvCUkh2Vy9pYLs1E33kFC2cywrt6yWCc1iJ5Q6niAixG928UwFXvigcx2ZJrUmzHUKPhzJKHLKpi61BjeJiLgnYAiH59ciHH23sSuci9ffWE8G77uY4HX4F6JSuKAxaLbPeAQ4bZce86xmNYKEhjoz1FwQt5yUW4JPNhHCwYK57U1kPTU34UpFRUgvn9Vyktby4Wm9E6AVYGxg4s8PCX2EQkntzhzde1DcTEjd1KcsfXLUwxA9qYQd7XKvvzsb9sKMK6znaHUP18G6xbhBaQJjbuch1NXhLR7nAfyJWEyr2KGM8WvoUsVyzWBvzJTwFEW9GhEzTcbSxvFxWanQ5ezqeiMvBskHQCMdVwaG4N7vH4WJMkitDKAeKyaxcM7eFkZsSa8naW1CKCurAc4t1avXTWPg2d7vavwLFGwh5p63NGYd6DdYduobMVXjjYsr5MyNmTEPVAi8FVeDVi4VBiMdYjdM2K66aCTvT5qyMoa39ab9o",
"WatcherPermit": "9hPoYNQwVDbtAyt5uhYyKttye7ZPzZ7ePcc6d2rgKr9fiZm6DhD",
Expand Down
1 change: 1 addition & 0 deletions tests/resources/addresses/contracts-cardano-testnet.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"version": "testVersion",
"addresses": {
"RWTRepo": "N9nHZxAm7Z476Nbw6yF2X6BQEct7nNCm4SJeCK8DJEkERj6LXMJvKqG49WWSfNDufuuFEtN8msfWDd8UR4QUCmLEwFRWXC5hxEdjTWfFYT8YqPrrYziDrjYzCbyzTjyht6qg4W5KPs6zNirtN7AyeTSMDeT6bRzL66kCSp8UFkmCsn9U4ZteWeFNp1xDtYtaqRE5SkABjwNsP5RioUY7hpbFhpWWQLosND6ys8eJJGkziwxjVV8goEEMzjGrTH5KUM8hDKQBAeNsiaZLLVfrAJBfFTHKggTLzkZQXB7Nhx6GP36E4jgAPPmKkvaKbtd7ANtfqpfjjBroCcK4E9ZVNM34r4BNaMazeBYxPAtcjFCeCTaMR7vRuaAVmX7xwLK3MYoHBH3NPH9usseDDxnz5sm21AqZVdp6t7CUi9xFb3qSnThFFPJk2fZF5FvCUkh2Vy9pYLs1E33kFC2cywrt6yWCc1iJ5Q6niAixG928UwFXvigcx2ZJrUmzHUKPhzJKHLKpi61BjeJiLgnYAiH59ciHH23sSuci9ffWE8G77uY4HX4F6JSuKAxaLbPeAQ4bZce86xmNYKEhjoz1FwQt5yUW4JPNhHCwYK57U1kPTU34UpFRUgvn9Vyktby4Wm9E6AVYGxg4s8PCX2EQkntzhzde1DcTEjd1KcsfXLUwxA9qYQd7XKvvzsb9sKMK6znaHUP18G6xbhBaQJjbuch1NXhLR7nAfyJWEyr2KGM8WvoUsVyzWBvzJTwFEW9GhEzTcbSxvFxWanQ5ezqeiMvBskHQCMdVwaG4N7vH4WJMkitDKAeKyaxcM7eFkZsSa8naW1CKCurAc4t1avXTWPg2d7vavwLFGwh5p63NGYd6DdYduobMVXjjYsr5MyNmTEPVAi8FVeDVi4VBiMdYjdM2K66aCTvT5qyMoa39ab9o",
"WatcherPermit": "9hPoYNQwVDbtAyt5uhYyKttye7ZPzZ7ePcc6d2rgKr9fiZm6DhD",
Expand Down
1 change: 1 addition & 0 deletions tests/resources/addresses/contracts-ergo-testnet.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"version": "testVersion",
"addresses": {
"RWTRepo": "N9nHZxAm7Z476Nbw6yF2X6BQEct7nNCm4SJeCK8DJEkERj6LXMJvKqG49WWSfNDufuuFEtN8msfWDd8UR4QUCmLEwFRWXC5hxEdjTWfFYT8YqPrrYziDrjYzCbyzTjyht6qg4W5KPs6zNirtN7AyeTSMDeT6bRzL66kCSp8UFkmCsn9U4ZteWeFNp1xDtYtaqRE5SkABjwNsP5RioUY7hpbFhpWWQLosND6ys8eJJGkziwxjVV8goEEMzjGrTH5KUM8hDKQBAeNsiaZLLVfrAJBfFTHKggTLzkZQXB7Nhx6GP36E4jgAPPmKkvaKbtd7ANtfqpfjjBroCcK4E9ZVNM34r4BNaMazeBYxPAtcjFCeCTaMR7vRuaAVmX7xwLK3MYoHBH3NPH9usseDDxnz5sm21AqZVdp6t7CUi9xFb3qSnThFFPJk2fZF5FvCUkh2Vy9pYLs1E33kFC2cywrt6yWCc1iJ5Q6niAixG928UwFXvigcx2ZJrUmzHUKPhzJKHLKpi61BjeJiLgnYAiH59ciHH23sSuci9ffWE8G77uY4HX4F6JSuKAxaLbPeAQ4bZce86xmNYKEhjoz1FwQt5yUW4JPNhHCwYK57U1kPTU34UpFRUgvn9Vyktby4Wm9E6AVYGxg4s8PCX2EQkntzhzde1DcTEjd1KcsfXLUwxA9qYQd7XKvvzsb9sKMK6znaHUP18G6xbhBaQJjbuch1NXhLR7nAfyJWEyr2KGM8WvoUsVyzWBvzJTwFEW9GhEzTcbSxvFxWanQ5ezqeiMvBskHQCMdVwaG4N7vH4WJMkitDKAeKyaxcM7eFkZsSa8naW1CKCurAc4t1avXTWPg2d7vavwLFGwh5p63NGYd6DdYduobMVXjjYsr5MyNmTEPVAi8FVeDVi4VBiMdYjdM2K66aCTvT5qyMoa39ab9o",
"WatcherPermit": "9hPoYNQwVDbtAyt5uhYyKttye7ZPzZ7ePcc6d2rgKr9fiZm6DhD",
Expand Down
1 change: 1 addition & 0 deletions tests/resources/addresses/contracts-ethereum-testnet.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"version": "testVersion",
"addresses": {
"RWTRepo": "N9nHZxAm7Z476Nbw6yF2X6BQEct7nNCm4SJeCK8DJEkERj6LXMJvKqG49WWSfNDufuuFEtN8msfWDd8UR4QUCmLEwFRWXC5hxEdjTWfFYT8YqPrrYziDrjYzCbyzTjyht6qg4W5KPs6zNirtN7AyeTSMDeT6bRzL66kCSp8UFkmCsn9U4ZteWeFNp1xDtYtaqRE5SkABjwNsP5RioUY7hpbFhpWWQLosND6ys8eJJGkziwxjVV8goEEMzjGrTH5KUM8hDKQBAeNsiaZLLVfrAJBfFTHKggTLzkZQXB7Nhx6GP36E4jgAPPmKkvaKbtd7ANtfqpfjjBroCcK4E9ZVNM34r4BNaMazeBYxPAtcjFCeCTaMR7vRuaAVmX7xwLK3MYoHBH3NPH9usseDDxnz5sm21AqZVdp6t7CUi9xFb3qSnThFFPJk2fZF5FvCUkh2Vy9pYLs1E33kFC2cywrt6yWCc1iJ5Q6niAixG928UwFXvigcx2ZJrUmzHUKPhzJKHLKpi61BjeJiLgnYAiH59ciHH23sSuci9ffWE8G77uY4HX4F6JSuKAxaLbPeAQ4bZce86xmNYKEhjoz1FwQt5yUW4JPNhHCwYK57U1kPTU34UpFRUgvn9Vyktby4Wm9E6AVYGxg4s8PCX2EQkntzhzde1DcTEjd1KcsfXLUwxA9qYQd7XKvvzsb9sKMK6znaHUP18G6xbhBaQJjbuch1NXhLR7nAfyJWEyr2KGM8WvoUsVyzWBvzJTwFEW9GhEzTcbSxvFxWanQ5ezqeiMvBskHQCMdVwaG4N7vH4WJMkitDKAeKyaxcM7eFkZsSa8naW1CKCurAc4t1avXTWPg2d7vavwLFGwh5p63NGYd6DdYduobMVXjjYsr5MyNmTEPVAi8FVeDVi4VBiMdYjdM2K66aCTvT5qyMoa39ab9o",
"WatcherPermit": "9hPoYNQwVDbtAyt5uhYyKttye7ZPzZ7ePcc6d2rgKr9fiZm6DhD",
Expand Down
1 change: 1 addition & 0 deletions tests/resources/tokens.test.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"version": "testVersion",
"idKeys": {
"ergo": "tokenId",
"cardano": "tokenId",
Expand Down

0 comments on commit b57cb08

Please sign in to comment.