diff --git a/common/src/hedera-modules/environment.ts b/common/src/hedera-modules/environment.ts
index f4c3df49c4..4edafcc891 100644
--- a/common/src/hedera-modules/environment.ts
+++ b/common/src/hedera-modules/environment.ts
@@ -8,35 +8,35 @@ export class Environment {
/**
* Mainnet API
*/
- public static readonly HEDERA_MAINNET_API: string = 'https://mainnet.mirrornode.hedera.com/api/v1';
+ public static HEDERA_MAINNET_API: string = 'https://mainnet.mirrornode.hedera.com/api/v1';
/**
* Mainnet message API
*/
- public static readonly HEDERA_MAINNET_MESSAGE_API: string = Environment.HEDERA_MAINNET_API + '/topics/messages';
+ public static HEDERA_MAINNET_MESSAGE_API: string = Environment.HEDERA_MAINNET_API + '/topics/messages';
/**
* Mainnet topic API
*/
- public static readonly HEDERA_MAINNET_TOPIC_API: string = Environment.HEDERA_MAINNET_API + '/topics/';
+ public static HEDERA_MAINNET_TOPIC_API: string = Environment.HEDERA_MAINNET_API + '/topics';
/**
* Mainnet account API
*/
- public static readonly HEDERA_MAINNET_ACCOUNT_API: string = Environment.HEDERA_MAINNET_API + '/accounts/';
+ public static HEDERA_MAINNET_ACCOUNT_API: string = Environment.HEDERA_MAINNET_API + '/accounts';
/**
* Mainnet balances API
*/
- public static readonly HEDERA_MAINNET_BALANCES_API: string = Environment.HEDERA_MAINNET_API + '/balances';
+ public static HEDERA_MAINNET_BALANCES_API: string = Environment.HEDERA_MAINNET_API + '/balances';
/**
* Mainnet contract API
*/
- public static readonly HEDERA_MAINNET_CONTRACT_API: string = Environment.HEDERA_MAINNET_API + '/contracts/';
+ public static HEDERA_MAINNET_CONTRACT_API: string = Environment.HEDERA_MAINNET_API + '/contracts';
/**
* Mainnet tokens API
*/
- public static readonly HEDERA_MAINNET_TOKENS_API: string = Environment.HEDERA_MAINNET_API + '/tokens';
+ public static HEDERA_MAINNET_TOKENS_API: string = Environment.HEDERA_MAINNET_API + '/tokens';
/**
* Mainnet tokens API
*/
- public static readonly HEDERA_MAINNET_TRANSACTIONS_API: string = Environment.HEDERA_MAINNET_API + '/transactions';
+ public static HEDERA_MAINNET_TRANSACTIONS_API: string = Environment.HEDERA_MAINNET_API + '/transactions';
/**
* Testnet API
@@ -49,11 +49,11 @@ export class Environment {
/**
* Testnet topic API
*/
- public static readonly HEDERA_TESTNET_TOPIC_API: string = Environment.HEDERA_TESTNET_API + '/topics/';
+ public static readonly HEDERA_TESTNET_TOPIC_API: string = Environment.HEDERA_TESTNET_API + '/topics';
/**
* Testnet account API
*/
- public static readonly HEDERA_TESTNET_ACCOUNT_API: string = Environment.HEDERA_TESTNET_API + '/accounts/';
+ public static readonly HEDERA_TESTNET_ACCOUNT_API: string = Environment.HEDERA_TESTNET_API + '/accounts';
/**
* Testnet balances API
*/
@@ -61,7 +61,7 @@ export class Environment {
/**
* Testnet contract API
*/
- public static readonly HEDERA_TESTNET_CONTRACT_API: string = Environment.HEDERA_TESTNET_API + '/contracts/';
+ public static readonly HEDERA_TESTNET_CONTRACT_API: string = Environment.HEDERA_TESTNET_API + '/contracts';
/**
* Testnet tokens API
*/
@@ -82,11 +82,11 @@ export class Environment {
/**
* Preview topic API
*/
- public static readonly HEDERA_PREVIEW_TOPIC_API: string = Environment.HEDERA_PREVIEW_API + '/topics/';
+ public static readonly HEDERA_PREVIEW_TOPIC_API: string = Environment.HEDERA_PREVIEW_API + '/topics';
/**
* Preview account API
*/
- public static readonly HEDERA_PREVIEW_ACCOUNT_API: string = Environment.HEDERA_PREVIEW_API + '/accounts/';
+ public static readonly HEDERA_PREVIEW_ACCOUNT_API: string = Environment.HEDERA_PREVIEW_API + '/accounts';
/**
* Preview balances API
*/
@@ -94,7 +94,7 @@ export class Environment {
/**
* Preview contract API
*/
- public static readonly HEDERA_PREVIEW_CONTRACT_API: string = Environment.HEDERA_PREVIEW_API + '/contracts/';
+ public static readonly HEDERA_PREVIEW_CONTRACT_API: string = Environment.HEDERA_PREVIEW_API + '/contracts';
/**
* Preview tokens API
*/
@@ -115,11 +115,11 @@ export class Environment {
/**
* Localnode topic API
*/
- public static HEDERA_LOCALNODE_TOPIC_API: string = Environment.HEDERA_LOCALNODE_API + `/topics/`;
+ public static HEDERA_LOCALNODE_TOPIC_API: string = Environment.HEDERA_LOCALNODE_API + `/topics`;
/**
* Localnode account API
*/
- public static HEDERA_LOCALNODE_ACCOUNT_API: string = Environment.HEDERA_LOCALNODE_API + `/accounts/`;
+ public static HEDERA_LOCALNODE_ACCOUNT_API: string = Environment.HEDERA_LOCALNODE_API + `/accounts`;
/**
* Localnode balances API
*/
@@ -127,11 +127,11 @@ export class Environment {
/**
* Localnode contract API
*/
- public static HEDERA_LOCALNODE_CONTRACT_API: string = Environment.HEDERA_LOCALNODE_API + `/contracts/`;
+ public static HEDERA_LOCALNODE_CONTRACT_API: string = Environment.HEDERA_LOCALNODE_API + `/contracts`;
/**
* Localnode tokens API
*/
- public static HEDERA_LOCALNODE_TOKENS_API: string = Environment.HEDERA_LOCALNODE_API + `/tokens/`;
+ public static HEDERA_LOCALNODE_TOKENS_API: string = Environment.HEDERA_LOCALNODE_API + `/tokens`;
/**
* Localnode tokens API
*/
@@ -198,6 +198,11 @@ export class Environment {
* @private
*/
private static _mirrorNodes: string[] = [];
+ /**
+ * Hedera mirror nodes
+ * @private
+ */
+ private static _mirrorNodesBaseApi: string = '/api/v1';
/**
* Set network
@@ -255,15 +260,29 @@ export class Environment {
if (Environment._mirrorNodes && Environment._mirrorNodes.length > 0) {
const mirrornodeUrl = ensurePrefix(Environment._mirrorNodes[0], ['http://', 'https://'], 'https://');
- Environment._messagesApi = `${mirrornodeUrl}/api/v1/topics/messages`;
- Environment._topicsApi = `${mirrornodeUrl}/api/v1/topics/`;
- Environment._accountsApi = `${mirrornodeUrl}/api/v1/accounts/`;
- Environment._balancesApi = `${mirrornodeUrl}/api/v1/balances/`;
- Environment._contractsApi = `${mirrornodeUrl}/api/v1/contracts/`;
- Environment._tokensApi = `${mirrornodeUrl}/api/v1/tokens/`;
+ Environment._messagesApi = `${mirrornodeUrl}${Environment._mirrorNodesBaseApi}/topics/messages`;
+ Environment._topicsApi = `${mirrornodeUrl}${Environment._mirrorNodesBaseApi}/topics`;
+ Environment._accountsApi = `${mirrornodeUrl}${Environment._mirrorNodesBaseApi}/accounts`;
+ Environment._balancesApi = `${mirrornodeUrl}${Environment._mirrorNodesBaseApi}/balances`;
+ Environment._contractsApi = `${mirrornodeUrl}${Environment._mirrorNodesBaseApi}/contracts`;
+ Environment._tokensApi = `${mirrornodeUrl}${Environment._mirrorNodesBaseApi}/tokens`;
}
}
+ /**
+ * Set mainnet address
+ */
+ public static setMainnetApiUrl(apiUrl) {
+ Environment.HEDERA_MAINNET_API = apiUrl;
+ Environment.HEDERA_MAINNET_MESSAGE_API = Environment.HEDERA_MAINNET_API + '/topics/messages';
+ Environment.HEDERA_MAINNET_TOPIC_API = Environment.HEDERA_MAINNET_API + '/topics';
+ Environment.HEDERA_MAINNET_ACCOUNT_API = Environment.HEDERA_MAINNET_API + '/accounts';
+ Environment.HEDERA_MAINNET_BALANCES_API = Environment.HEDERA_MAINNET_API + '/balances';
+ Environment.HEDERA_MAINNET_CONTRACT_API = Environment.HEDERA_MAINNET_API + '/contracts';
+ Environment.HEDERA_MAINNET_TOKENS_API = Environment.HEDERA_MAINNET_API + '/tokens';
+ Environment.HEDERA_MAINNET_TRANSACTIONS_API = Environment.HEDERA_MAINNET_API + '/transactions';
+ }
+
/**
* Set localnode address
*/
@@ -271,11 +290,11 @@ export class Environment {
Environment._localnodeaddress = address || 'localhost';
Environment.HEDERA_LOCALNODE_API = `${Environment._localnodeprotocol}://${Environment._localnodeaddress}:5551/api/v1`;
Environment.HEDERA_LOCALNODE_MESSAGE_API = Environment.HEDERA_LOCALNODE_API + `/topics/messages`;
- Environment.HEDERA_LOCALNODE_TOPIC_API = Environment.HEDERA_LOCALNODE_API + `/topics/`;
- Environment.HEDERA_LOCALNODE_ACCOUNT_API = Environment.HEDERA_LOCALNODE_API + `/accounts/`;
+ Environment.HEDERA_LOCALNODE_TOPIC_API = Environment.HEDERA_LOCALNODE_API + `/topics`;
+ Environment.HEDERA_LOCALNODE_ACCOUNT_API = Environment.HEDERA_LOCALNODE_API + `/accounts`;
Environment.HEDERA_LOCALNODE_BALANCES_API = Environment.HEDERA_LOCALNODE_API + `/balances`;
- Environment.HEDERA_LOCALNODE_CONTRACT_API = Environment.HEDERA_LOCALNODE_API + `/contracts/`;
- Environment.HEDERA_LOCALNODE_TOKENS_API = Environment.HEDERA_LOCALNODE_API + `/tokens/`;
+ Environment.HEDERA_LOCALNODE_CONTRACT_API = Environment.HEDERA_LOCALNODE_API + `/contracts`;
+ Environment.HEDERA_LOCALNODE_TOKENS_API = Environment.HEDERA_LOCALNODE_API + `/tokens`;
}
/**
@@ -301,6 +320,24 @@ export class Environment {
Environment._mirrorNodes = mirrorNodes;
}
+ /**
+ * Set hedera mirror nodes base api
+ * @param baseApi Base api
+ */
+ public static setMirrorNodesBaseApi(baseApi: string = '') {
+ let api = baseApi;
+
+ if (api.length > 0 && !api.startsWith('/')) {
+ api = '/' + api;
+ }
+
+ if (api.endsWith('/') && api.length > 1) {
+ api = api.slice(0, -1);
+ }
+
+ Environment._mirrorNodesBaseApi = api;
+ }
+
/**
* Create client
*/
@@ -427,4 +464,11 @@ export class Environment {
public static get mirrorNodes(): string[] {
return Environment._mirrorNodes;
}
-}
+
+ /**
+ * Mirror nodes
+ */
+ public static get mirrorNodesBaseApi(): string {
+ return Environment._mirrorNodesBaseApi;
+ }
+}
\ No newline at end of file
diff --git a/common/src/helpers/workers.ts b/common/src/helpers/workers.ts
index dc1187ccad..480889c503 100644
--- a/common/src/helpers/workers.ts
+++ b/common/src/helpers/workers.ts
@@ -158,6 +158,9 @@ export class Workers extends NatsService {
if (!task.data.mirrorNodes) {
task.data.mirrorNodes = Environment.mirrorNodes;
}
+ if (!task.data.mirrorNodesBaseApi) {
+ task.data.mirrorNodesBaseApi = Environment.mirrorNodesBaseApi;
+ }
if (!task.data.localNodeAddress) {
task.data.localNodeAddress = Environment.localNodeAddress;
}
@@ -194,6 +197,9 @@ export class Workers extends NatsService {
if (!task.data.mirrorNodes) {
task.data.mirrorNodes = Environment.mirrorNodes;
}
+ if (!task.data.mirrorNodesBaseApi) {
+ task.data.mirrorNodesBaseApi = Environment.mirrorNodesBaseApi;
+ }
if (!task.data.localNodeAddress) {
task.data.localNodeAddress = Environment.localNodeAddress;
}
@@ -476,6 +482,9 @@ export class Workers extends NatsService {
if (!task.data.mirrorNodes) {
task.data.mirrorNodes = Environment.mirrorNodes;
}
+ if (!task.data.mirrorNodesBaseApi) {
+ task.data.mirrorNodesBaseApi = Environment.mirrorNodesBaseApi;
+ }
if (!task.data.localNodeAddress) {
task.data.localNodeAddress = Environment.localNodeAddress;
}
diff --git a/configs/.env..guardian.system b/configs/.env..guardian.system
index 4e532b04c2..d57d7abb66 100644
--- a/configs/.env..guardian.system
+++ b/configs/.env..guardian.system
@@ -36,15 +36,18 @@ RETIRE_SINGLE_FILE_ID="0.0.6371651"
RETIRE_DOUBLE_FILE_ID="0.0.6371652"
MAX_HEDERA_TIMEOUT="600"
+# OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
# Mainnet
-# HEDERA_CUSTOM_NODES={"35.237.200.180:50211":"0.0.3"}
-# HEDERA_CUSTOM_NODES={"35.237.200.180:50211":"0.0.3","35.186.191.247:50211":"0.0.4","35.192.2.25:50211":"0.0.5","35.199.161.108:50211":"0.0.6","35.203.82.240:50211":"0.0.7","35.236.5.219:50211":"0.0.8","35.197.192.225:50211":"0.0.9","35.242.233.154:50211":"0.0.10","35.240.118.96:50211":"0.0.11","35.204.86.32:50211":"0.0.12","35.234.132.107:50211":"0.0.13","35.236.2.27:50211":"0.0.14","35.228.11.53:50211":"0.0.15","34.91.181.183:50211":"0.0.16","34.86.212.247:50211":"0.0.17","172.105.247.67:50211":"0.0.18","34.89.87.138:50211":"0.0.19","34.82.78.255:50211":"0.0.20","34.76.140.109:50211":"0.0.21","34.64.141.166:50211":"0.0.22","35.232.244.145:50211":"0.0.23","34.89.103.38:50211":"0.0.24","34.93.112.7:50211":"0.0.25","34.87.150.174:50211":"0.0.26","34.125.200.96:50211":"0.0.27","35.198.220.75:50211":"0.0.28","34.142.71.129:50211":"0.0.29","35.234.249.150:50211":"0.0.30","34.107.78.179:50211":"0.0.31"}
-# HEDERA_CUSTOM_MIRROR_NODES=["mainnet-public.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"35.237.200.180:50211":"0.0.3"}
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"35.237.200.180:50211":"0.0.3","35.186.191.247:50211":"0.0.4","35.192.2.25:50211":"0.0.5","35.199.161.108:50211":"0.0.6","35.203.82.240:50211":"0.0.7","35.236.5.219:50211":"0.0.8","35.197.192.225:50211":"0.0.9","35.242.233.154:50211":"0.0.10","35.240.118.96:50211":"0.0.11","35.204.86.32:50211":"0.0.12","35.234.132.107:50211":"0.0.13","35.236.2.27:50211":"0.0.14","35.228.11.53:50211":"0.0.15","34.91.181.183:50211":"0.0.16","34.86.212.247:50211":"0.0.17","172.105.247.67:50211":"0.0.18","34.89.87.138:50211":"0.0.19","34.82.78.255:50211":"0.0.20","34.76.140.109:50211":"0.0.21","34.64.141.166:50211":"0.0.22","35.232.244.145:50211":"0.0.23","34.89.103.38:50211":"0.0.24","34.93.112.7:50211":"0.0.25","34.87.150.174:50211":"0.0.26","34.125.200.96:50211":"0.0.27","35.198.220.75:50211":"0.0.28","34.142.71.129:50211":"0.0.29","35.234.249.150:50211":"0.0.30","34.107.78.179:50211":"0.0.31"}
+# OVERRIDE_HEDERA_MIRROR_NODES=["mainnet-public.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
# Testnet
-# HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-# HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3", "1.testnet.hedera.com:50211":"0.0.4", "2.testnet.hedera.com:50211":"0.0.5", "3.testnet.hedera.com:50211":"0.0.6", "4.testnet.hedera.com:50211":"0.0.7", "5.testnet.hedera.com:50211":"0.0.8", "6.testnet.hedera.com:50211":"0.0.9"}
-# HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3", "1.testnet.hedera.com:50211":"0.0.4", "2.testnet.hedera.com:50211":"0.0.5", "3.testnet.hedera.com:50211":"0.0.6", "4.testnet.hedera.com:50211":"0.0.7", "5.testnet.hedera.com:50211":"0.0.8", "6.testnet.hedera.com:50211":"0.0.9"}
+# OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
# MAX_TRANSACTION_FEE="10"
diff --git a/configs/.env.develop.guardian.system b/configs/.env.develop.guardian.system
index 6d2dd6c073..003b40df50 100644
--- a/configs/.env.develop.guardian.system
+++ b/configs/.env.develop.guardian.system
@@ -36,15 +36,19 @@ RETIRE_SINGLE_FILE_ID="0.0.6371651"
RETIRE_DOUBLE_FILE_ID="0.0.6371652"
MAX_HEDERA_TIMEOUT="600"
+# OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
# Mainnet
-# HEDERA_CUSTOM_NODES={"35.237.200.180:50211":"0.0.3"}
-# HEDERA_CUSTOM_NODES={"35.237.200.180:50211":"0.0.3","35.186.191.247:50211":"0.0.4","35.192.2.25:50211":"0.0.5","35.199.161.108:50211":"0.0.6","35.203.82.240:50211":"0.0.7","35.236.5.219:50211":"0.0.8","35.197.192.225:50211":"0.0.9","35.242.233.154:50211":"0.0.10","35.240.118.96:50211":"0.0.11","35.204.86.32:50211":"0.0.12","35.234.132.107:50211":"0.0.13","35.236.2.27:50211":"0.0.14","35.228.11.53:50211":"0.0.15","34.91.181.183:50211":"0.0.16","34.86.212.247:50211":"0.0.17","172.105.247.67:50211":"0.0.18","34.89.87.138:50211":"0.0.19","34.82.78.255:50211":"0.0.20","34.76.140.109:50211":"0.0.21","34.64.141.166:50211":"0.0.22","35.232.244.145:50211":"0.0.23","34.89.103.38:50211":"0.0.24","34.93.112.7:50211":"0.0.25","34.87.150.174:50211":"0.0.26","34.125.200.96:50211":"0.0.27","35.198.220.75:50211":"0.0.28","34.142.71.129:50211":"0.0.29","35.234.249.150:50211":"0.0.30","34.107.78.179:50211":"0.0.31"}
-# HEDERA_CUSTOM_MIRROR_NODES=["mainnet-public.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"35.237.200.180:50211":"0.0.3"}
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"35.237.200.180:50211":"0.0.3","35.186.191.247:50211":"0.0.4","35.192.2.25:50211":"0.0.5","35.199.161.108:50211":"0.0.6","35.203.82.240:50211":"0.0.7","35.236.5.219:50211":"0.0.8","35.197.192.225:50211":"0.0.9","35.242.233.154:50211":"0.0.10","35.240.118.96:50211":"0.0.11","35.204.86.32:50211":"0.0.12","35.234.132.107:50211":"0.0.13","35.236.2.27:50211":"0.0.14","35.228.11.53:50211":"0.0.15","34.91.181.183:50211":"0.0.16","34.86.212.247:50211":"0.0.17","172.105.247.67:50211":"0.0.18","34.89.87.138:50211":"0.0.19","34.82.78.255:50211":"0.0.20","34.76.140.109:50211":"0.0.21","34.64.141.166:50211":"0.0.22","35.232.244.145:50211":"0.0.23","34.89.103.38:50211":"0.0.24","34.93.112.7:50211":"0.0.25","34.87.150.174:50211":"0.0.26","34.125.200.96:50211":"0.0.27","35.198.220.75:50211":"0.0.28","34.142.71.129:50211":"0.0.29","35.234.249.150:50211":"0.0.30","34.107.78.179:50211":"0.0.31"}
+# OVERRIDE_HEDERA_MIRROR_NODES=["mainnet-public.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
# Testnet
-# HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-# HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3", "1.testnet.hedera.com:50211":"0.0.4", "2.testnet.hedera.com:50211":"0.0.5", "3.testnet.hedera.com:50211":"0.0.6", "4.testnet.hedera.com:50211":"0.0.7", "5.testnet.hedera.com:50211":"0.0.8", "6.testnet.hedera.com:50211":"0.0.9"}
-# HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3", "1.testnet.hedera.com:50211":"0.0.4", "2.testnet.hedera.com:50211":"0.0.5", "3.testnet.hedera.com:50211":"0.0.6", "4.testnet.hedera.com:50211":"0.0.7", "5.testnet.hedera.com:50211":"0.0.8", "6.testnet.hedera.com:50211":"0.0.9"}
+# OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
+
# MAX_TRANSACTION_FEE="10"
diff --git a/configs/.env.quickstart.guardian.system b/configs/.env.quickstart.guardian.system
index 046ddc68b7..da910c1294 100644
--- a/configs/.env.quickstart.guardian.system
+++ b/configs/.env.quickstart.guardian.system
@@ -36,15 +36,18 @@ RETIRE_SINGLE_FILE_ID="0.0.6371651"
RETIRE_DOUBLE_FILE_ID="0.0.6371652"
MAX_HEDERA_TIMEOUT="600"
+# OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
# Mainnet
-# HEDERA_CUSTOM_NODES={"35.237.200.180:50211":"0.0.3"}
-# HEDERA_CUSTOM_NODES={"35.237.200.180:50211":"0.0.3","35.186.191.247:50211":"0.0.4","35.192.2.25:50211":"0.0.5","35.199.161.108:50211":"0.0.6","35.203.82.240:50211":"0.0.7","35.236.5.219:50211":"0.0.8","35.197.192.225:50211":"0.0.9","35.242.233.154:50211":"0.0.10","35.240.118.96:50211":"0.0.11","35.204.86.32:50211":"0.0.12","35.234.132.107:50211":"0.0.13","35.236.2.27:50211":"0.0.14","35.228.11.53:50211":"0.0.15","34.91.181.183:50211":"0.0.16","34.86.212.247:50211":"0.0.17","172.105.247.67:50211":"0.0.18","34.89.87.138:50211":"0.0.19","34.82.78.255:50211":"0.0.20","34.76.140.109:50211":"0.0.21","34.64.141.166:50211":"0.0.22","35.232.244.145:50211":"0.0.23","34.89.103.38:50211":"0.0.24","34.93.112.7:50211":"0.0.25","34.87.150.174:50211":"0.0.26","34.125.200.96:50211":"0.0.27","35.198.220.75:50211":"0.0.28","34.142.71.129:50211":"0.0.29","35.234.249.150:50211":"0.0.30","34.107.78.179:50211":"0.0.31"}
-# HEDERA_CUSTOM_MIRROR_NODES=["mainnet-public.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"35.237.200.180:50211":"0.0.3"}
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"35.237.200.180:50211":"0.0.3","35.186.191.247:50211":"0.0.4","35.192.2.25:50211":"0.0.5","35.199.161.108:50211":"0.0.6","35.203.82.240:50211":"0.0.7","35.236.5.219:50211":"0.0.8","35.197.192.225:50211":"0.0.9","35.242.233.154:50211":"0.0.10","35.240.118.96:50211":"0.0.11","35.204.86.32:50211":"0.0.12","35.234.132.107:50211":"0.0.13","35.236.2.27:50211":"0.0.14","35.228.11.53:50211":"0.0.15","34.91.181.183:50211":"0.0.16","34.86.212.247:50211":"0.0.17","172.105.247.67:50211":"0.0.18","34.89.87.138:50211":"0.0.19","34.82.78.255:50211":"0.0.20","34.76.140.109:50211":"0.0.21","34.64.141.166:50211":"0.0.22","35.232.244.145:50211":"0.0.23","34.89.103.38:50211":"0.0.24","34.93.112.7:50211":"0.0.25","34.87.150.174:50211":"0.0.26","34.125.200.96:50211":"0.0.27","35.198.220.75:50211":"0.0.28","34.142.71.129:50211":"0.0.29","35.234.249.150:50211":"0.0.30","34.107.78.179:50211":"0.0.31"}
+# OVERRIDE_HEDERA_MIRROR_NODES=["mainnet-public.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
# Testnet
-# HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-# HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3", "1.testnet.hedera.com:50211":"0.0.4", "2.testnet.hedera.com:50211":"0.0.5", "3.testnet.hedera.com:50211":"0.0.6", "4.testnet.hedera.com:50211":"0.0.7", "5.testnet.hedera.com:50211":"0.0.8", "6.testnet.hedera.com:50211":"0.0.9"}
-# HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3", "1.testnet.hedera.com:50211":"0.0.4", "2.testnet.hedera.com:50211":"0.0.5", "3.testnet.hedera.com:50211":"0.0.6", "4.testnet.hedera.com:50211":"0.0.7", "5.testnet.hedera.com:50211":"0.0.8", "6.testnet.hedera.com:50211":"0.0.9"}
+# OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
# MAX_TRANSACTION_FEE="10"
diff --git a/configs/.env.template.guardian.system b/configs/.env.template.guardian.system
index 374b08d281..6d74b7157b 100644
--- a/configs/.env.template.guardian.system
+++ b/configs/.env.template.guardian.system
@@ -49,15 +49,18 @@ SR_INITIAL_PASSWORD="..."
MAX_HEDERA_TIMEOUT="600"
+# OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
# Mainnet
-# HEDERA_CUSTOM_NODES={"35.237.200.180:50211":"0.0.3"}
-# HEDERA_CUSTOM_NODES={"35.237.200.180:50211":"0.0.3","35.186.191.247:50211":"0.0.4","35.192.2.25:50211":"0.0.5","35.199.161.108:50211":"0.0.6","35.203.82.240:50211":"0.0.7","35.236.5.219:50211":"0.0.8","35.197.192.225:50211":"0.0.9","35.242.233.154:50211":"0.0.10","35.240.118.96:50211":"0.0.11","35.204.86.32:50211":"0.0.12","35.234.132.107:50211":"0.0.13","35.236.2.27:50211":"0.0.14","35.228.11.53:50211":"0.0.15","34.91.181.183:50211":"0.0.16","34.86.212.247:50211":"0.0.17","172.105.247.67:50211":"0.0.18","34.89.87.138:50211":"0.0.19","34.82.78.255:50211":"0.0.20","34.76.140.109:50211":"0.0.21","34.64.141.166:50211":"0.0.22","35.232.244.145:50211":"0.0.23","34.89.103.38:50211":"0.0.24","34.93.112.7:50211":"0.0.25","34.87.150.174:50211":"0.0.26","34.125.200.96:50211":"0.0.27","35.198.220.75:50211":"0.0.28","34.142.71.129:50211":"0.0.29","35.234.249.150:50211":"0.0.30","34.107.78.179:50211":"0.0.31"}
-# HEDERA_CUSTOM_MIRROR_NODES=["mainnet-public.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"35.237.200.180:50211":"0.0.3"}
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"35.237.200.180:50211":"0.0.3","35.186.191.247:50211":"0.0.4","35.192.2.25:50211":"0.0.5","35.199.161.108:50211":"0.0.6","35.203.82.240:50211":"0.0.7","35.236.5.219:50211":"0.0.8","35.197.192.225:50211":"0.0.9","35.242.233.154:50211":"0.0.10","35.240.118.96:50211":"0.0.11","35.204.86.32:50211":"0.0.12","35.234.132.107:50211":"0.0.13","35.236.2.27:50211":"0.0.14","35.228.11.53:50211":"0.0.15","34.91.181.183:50211":"0.0.16","34.86.212.247:50211":"0.0.17","172.105.247.67:50211":"0.0.18","34.89.87.138:50211":"0.0.19","34.82.78.255:50211":"0.0.20","34.76.140.109:50211":"0.0.21","34.64.141.166:50211":"0.0.22","35.232.244.145:50211":"0.0.23","34.89.103.38:50211":"0.0.24","34.93.112.7:50211":"0.0.25","34.87.150.174:50211":"0.0.26","34.125.200.96:50211":"0.0.27","35.198.220.75:50211":"0.0.28","34.142.71.129:50211":"0.0.29","35.234.249.150:50211":"0.0.30","34.107.78.179:50211":"0.0.31"}
+# OVERRIDE_HEDERA_MIRROR_NODES=["mainnet-public.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
# Testnet
-# HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-# HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3", "1.testnet.hedera.com:50211":"0.0.4", "2.testnet.hedera.com:50211":"0.0.5", "3.testnet.hedera.com:50211":"0.0.6", "4.testnet.hedera.com:50211":"0.0.7", "5.testnet.hedera.com:50211":"0.0.8", "6.testnet.hedera.com:50211":"0.0.9"}
-# HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+# OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3", "1.testnet.hedera.com:50211":"0.0.4", "2.testnet.hedera.com:50211":"0.0.5", "3.testnet.hedera.com:50211":"0.0.6", "4.testnet.hedera.com:50211":"0.0.7", "5.testnet.hedera.com:50211":"0.0.8", "6.testnet.hedera.com:50211":"0.0.9"}
+# OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+# OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
RETIRE_CONTRACT_FILE_ID="0.0.6371646"
WIPE_CONTRACT_FILE_ID="0.0.6371642"
diff --git a/docs/guardian/readme/getting-started/installation/setting-up-environment-parameters.md b/docs/guardian/readme/getting-started/installation/setting-up-environment-parameters.md
index 2e695ea8b0..3048daf679 100644
--- a/docs/guardian/readme/getting-started/installation/setting-up-environment-parameters.md
+++ b/docs/guardian/readme/getting-started/installation/setting-up-environment-parameters.md
@@ -2,7 +2,7 @@
### `.env / .env.docker` Parameters in `guardian-service`
-
| Parameter | Purpose | Example |
|---|
| MQ_ADDRESS | Web Socket Address | localhost |
| SERVICE_CHANNEL | Version of the Guardian | guardian.1 |
| DB_HOST | Hostname of the Database | localhost |
| DB_DATABASE | Database Name | guardian_db |
| INITIAL_BALANCE | Initial Balance Value | 500 |
| INITIAL_STANDARD_REGISTRY_BALANCE | Setting Initial Standard Registry Balance | 500 |
| OPERATOR_ID | The ID of the operation | - |
| OPERATOR_KEY | Private key of the operator | - |
| LOCALNODE_ADDRESS | The address of the localnode server. This can be its IP address or a domain name | 1.1.1.1 |
| LOCALNODE_PROTOCOL | Communication protocol for interactions with the local node, can be http or https. | http/https |
| HEDERA_NET | Type of the Hedera node to transact with | testnet, localnode, mainnet |
| INITIALIZATION_TOPIC_ID | The ID of the initialization topic. | 0.0.1960 |
| MESSAGE_LANG | Language of the message text of all messages | en-US |
| LOG_LEVEL | Level of the Logs | 2 |
| SEND_KEYS_TO_VAULT | Checked if keys to be sent to vault | True/False |
| MULTI_POLICY_SCHEDULER | to set custom cron mask (timer mask) for sync job | 0 0 * * * |
| MQ_MESSAGE_CHUNK | To set up the message chunk size | 500000 |
| HEDERA_CUSTOM_NODES | Define hedera nodes to execute and pay transaction fee | 0.testnet.hedera.com:50211":"0.0.3 |
| HEDERA_CUSTOM_MIRROR_NODES | Define hedera mirror nodes | testnet.mirrornode.hedera.com:443" |
| MAP_API_KEY | Defines api to integrate Map schema type | ALZ_X..... |
| DOCUMENT_CACHE_FIELD_LIMIT | Defines document field symbols limit for caching. | 500 |
| BATCH_NFT_MINT_SIZE | Defines size of batch of mint NFT transaction | 10 |
| DIRECT_MESSAGE_PORT | Port for direct messages (if not set generate random port) | 300 |
| DIRECT_MESSAGE_HOST | Host for direct messages (if not set get hostname) | localhost |
| DIRECT_MESSAGE_PROTOCOL | Protocol https or http (http by default, https need additional server like nginx) | http |
| MQ_MAX_PAYLOAD | Max message size for send via message-broker (otherwise create direct message) if not set always send messages using message broker | 35 |
| RETIRE_CONTRACT_FILE_ID | Contract file ID for Retirement | 0.0.4860665 |
| WIPE_CONTRACT_FILE_ID | Contract file ID for wiping | 0.0.4726865 |
| DOCUMENTS_HANDLING_CHUNK_SIZE | To set chunk size for delete or create a lot of data (value will affect speed performance communication with DB), default is 500. | 500 |
| ALLOWED_PROTOCOLS="https" | This variable defines the list of allowed protocols that can be used in outbound HTTP requests made by the httpRequestBlock. | https |
| BLOCK_PRIVATE_IP | This variable controls whether the httpRequestBlock should reject outbound requests to private or sensitive IP address ranges. | True/False |
+| Parameter | Purpose | Example |
|---|
| MQ_ADDRESS | Web Socket Address | localhost |
| SERVICE_CHANNEL | Version of the Guardian | guardian.1 |
| DB_HOST | Hostname of the Database | localhost |
| DB_DATABASE | Database Name | guardian_db |
| INITIAL_BALANCE | Initial Balance Value | 500 |
| INITIAL_STANDARD_REGISTRY_BALANCE | Setting Initial Standard Registry Balance | 500 |
| OPERATOR_ID | The ID of the operation | - |
| OPERATOR_KEY | Private key of the operator | - |
| LOCALNODE_ADDRESS | The address of the localnode server. This can be its IP address or a domain name | 1.1.1.1 |
| LOCALNODE_PROTOCOL | Communication protocol for interactions with the local node, can be http or https. | http/https |
| HEDERA_NET | Type of the Hedera node to transact with | testnet, localnode, mainnet |
| INITIALIZATION_TOPIC_ID | The ID of the initialization topic. | 0.0.1960 |
| MESSAGE_LANG | Language of the message text of all messages | en-US |
| LOG_LEVEL | Level of the Logs | 2 |
| SEND_KEYS_TO_VAULT | Checked if keys to be sent to vault | True/False |
| MULTI_POLICY_SCHEDULER | to set custom cron mask (timer mask) for sync job | 0 0 * * * |
| MQ_MESSAGE_CHUNK | To set up the message chunk size | 500000 |
| OVERRIDE_HEDERA_CONSENSUS_NODES | Define hedera nodes to execute and pay transaction fee | 0.testnet.hedera.com:50211":"0.0.3 |
| OVERRIDE_HEDERA_MIRROR_NODES | Define hedera mirror nodes | testnet.mirrornode.hedera.com:443" |
| MAP_API_KEY | Defines api to integrate Map schema type | ALZ_X..... |
| DOCUMENT_CACHE_FIELD_LIMIT | Defines document field symbols limit for caching. | 500 |
| BATCH_NFT_MINT_SIZE | Defines size of batch of mint NFT transaction | 10 |
| DIRECT_MESSAGE_PORT | Port for direct messages (if not set generate random port) | 300 |
| DIRECT_MESSAGE_HOST | Host for direct messages (if not set get hostname) | localhost |
| DIRECT_MESSAGE_PROTOCOL | Protocol https or http (http by default, https need additional server like nginx) | http |
| MQ_MAX_PAYLOAD | Max message size for send via message-broker (otherwise create direct message) if not set always send messages using message broker | 35 |
| RETIRE_CONTRACT_FILE_ID | Contract file ID for Retirement | 0.0.4860665 |
| WIPE_CONTRACT_FILE_ID | Contract file ID for wiping | 0.0.4726865 |
| DOCUMENTS_HANDLING_CHUNK_SIZE | To set chunk size for delete or create a lot of data (value will affect speed performance communication with DB), default is 500. | 500 |
| ALLOWED_PROTOCOLS="https" | This variable defines the list of allowed protocols that can be used in outbound HTTP requests made by the httpRequestBlock. | https |
| BLOCK_PRIVATE_IP | This variable controls whether the httpRequestBlock should reject outbound requests to private or sensitive IP address ranges. | True/False |
{% hint style="info" %}
**Important Note:**
diff --git a/guardian-service/configs/.env.guardian b/guardian-service/configs/.env.guardian
index 528e82f040..ccb95e5edb 100644
--- a/guardian-service/configs/.env.guardian
+++ b/guardian-service/configs/.env.guardian
@@ -32,8 +32,11 @@ BBS_SIGNATURES_MODE="WASM"
MQ_MAX_PAYLOAD="1048576"
#LOG_LEVEL="2"
#MQ_MESSAGE_CHUNK=5000000
-#HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-#HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+
+#OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
+#OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+#OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+#OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
#DOCUMENT_CACHE_FIELD_LIMIT=100
#BATCH_NFT_MINT_SIZE=10
diff --git a/guardian-service/configs/.env.guardian.develop b/guardian-service/configs/.env.guardian.develop
index c6a6b61354..0fb08d108c 100644
--- a/guardian-service/configs/.env.guardian.develop
+++ b/guardian-service/configs/.env.guardian.develop
@@ -29,8 +29,11 @@ BBS_SIGNATURES_MODE="WASM"
MQ_MAX_PAYLOAD="1048576"
#LOG_LEVEL="2"
#MQ_MESSAGE_CHUNK=5000000
-#HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-#HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+
+#OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
+#OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+#OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+#OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
#DOCUMENT_CACHE_FIELD_LIMIT=100
#BATCH_NFT_MINT_SIZE=10
diff --git a/guardian-service/configs/.env.guardian.template b/guardian-service/configs/.env.guardian.template
index ee9260659d..26bfe843c3 100644
--- a/guardian-service/configs/.env.guardian.template
+++ b/guardian-service/configs/.env.guardian.template
@@ -36,8 +36,11 @@ BBS_SIGNATURES_MODE="WASM"
MQ_MAX_PAYLOAD=""
#LOG_LEVEL="2"
#MQ_MESSAGE_CHUNK=5000000
-#HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-#HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+
+#OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
+#OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+#OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+#OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
#DOCUMENT_CACHE_FIELD_LIMIT=100
#BATCH_NFT_MINT_SIZE=10
diff --git a/guardian-service/src/app.ts b/guardian-service/src/app.ts
index 734f1489b3..ecf74ae451 100644
--- a/guardian-service/src/app.ts
+++ b/guardian-service/src/app.ts
@@ -196,34 +196,42 @@ Promise.all([
Environment.setLocalNodeProtocol(process.env.LOCALNODE_PROTOCOL);
Environment.setLocalNodeAddress(process.env.LOCALNODE_ADDRESS);
- if (process.env.HEDERA_CUSTOM_NODES) {
- try {
- const nodes = JSON.parse(process.env.HEDERA_CUSTOM_NODES);
- Environment.setNodes(nodes);
- } catch (error) {
- await logger.warn(
- 'HEDERA_CUSTOM_NODES field in settings: ' + error.message,
- ['GUARDIAN_SERVICE'],
- null
- );
- console.warn(error);
+
+ if (process.env.OVERRIDE_NETWORK_CONFIGURATION === 'true') {
+ if (process.env.OVERRIDE_HEDERA_CONSENSUS_NODES) {
+ try {
+ const nodes = JSON.parse(process.env.OVERRIDE_HEDERA_CONSENSUS_NODES);
+ Environment.setNodes(nodes);
+ } catch (error) {
+ await logger.warn(
+ 'OVERRIDE_HEDERA_CONSENSUS_NODES field in settings: ' + error.message,
+ ['GUARDIAN_SERVICE'],
+ null
+ );
+ console.warn(error);
+ }
}
- }
- if (process.env.HEDERA_CUSTOM_MIRROR_NODES) {
- try {
- const mirrorNodes = JSON.parse(
- process.env.HEDERA_CUSTOM_MIRROR_NODES
- );
- Environment.setMirrorNodes(mirrorNodes);
- } catch (error) {
- await logger.warn(
- 'HEDERA_CUSTOM_MIRROR_NODES field in settings: ' + error.message,
- ['GUARDIAN_SERVICE'],
- null
- );
- console.warn(error);
+ if (process.env.OVERRIDE_HEDERA_MIRROR_NODES) {
+ try {
+ const mirrorNodes = JSON.parse(
+ process.env.OVERRIDE_HEDERA_MIRROR_NODES
+ );
+ Environment.setMirrorNodes(mirrorNodes);
+ } catch (error) {
+ await logger.warn(
+ 'OVERRIDE_HEDERA_MIRROR_NODES field in settings: ' + error.message,
+ ['GUARDIAN_SERVICE'],
+ null
+ );
+ console.warn(error);
+ }
+ }
+
+ if (process.env.OVERRIDE_HEDERA_MIRROR_NODES_BASE_API) {
+ Environment.setMirrorNodesBaseApi(process.env.OVERRIDE_HEDERA_MIRROR_NODES_BASE_API);
}
}
+
Environment.setNetwork(process.env.HEDERA_NET);
MessageServer.setLang(process.env.MESSAGE_LANG);
// TransactionLogger.init(channel, process.env.LOG_LEVEL as TransactionLogLvl);
diff --git a/k8s-manifests/1-config/guardian-service-configmap.yaml b/k8s-manifests/1-config/guardian-service-configmap.yaml
index 517cb88848..b8a9f9318b 100644
--- a/k8s-manifests/1-config/guardian-service-configmap.yaml
+++ b/k8s-manifests/1-config/guardian-service-configmap.yaml
@@ -38,8 +38,10 @@ data:
#LOG_LEVEL=2
#MQ_MESSAGE_CHUNK=5000000
- #HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
- #HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+ #OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
+ #OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+ #OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+ #OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
#MAP_API_KEY=...
#DOCUMENT_CACHE_FIELD_LIMIT=100
diff --git a/k8s-manifests/1-config/policy-service-configmap.yaml b/k8s-manifests/1-config/policy-service-configmap.yaml
index 80dfdd82e9..44641c3a07 100644
--- a/k8s-manifests/1-config/policy-service-configmap.yaml
+++ b/k8s-manifests/1-config/policy-service-configmap.yaml
@@ -24,8 +24,10 @@ data:
MULTI_POLICY_SCHEDULER="0 0 * * *"
EXTERNAL_DOCUMENTS_SCHEDULER="0 0 * * *"
#LOG_LEVEL="2"
- #HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
- #HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+ #OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
+ #OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+ #OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+ #OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
#MQ_MESSAGE_CHUNK=5000000
#DOCUMENT_CACHE_FIELD_LIMIT=100
#BATCH_NFT_MINT_SIZE=10
diff --git a/policy-service/configs/.env.policy b/policy-service/configs/.env.policy
index 5418ffd735..2bb0d3e832 100644
--- a/policy-service/configs/.env.policy
+++ b/policy-service/configs/.env.policy
@@ -17,8 +17,12 @@ MQ_MAX_PAYLOAD="1048576"
MULTI_POLICY_SCHEDULER="0 0 * * *"
EXTERNAL_DOCUMENTS_SCHEDULER="0 0 * * *"
#LOG_LEVEL="2"
-#HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-#HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+
+#OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
+#OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+#OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+#OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
+
#MQ_MESSAGE_CHUNK=5000000
#DOCUMENT_CACHE_FIELD_LIMIT=100
#BATCH_NFT_MINT_SIZE=10
diff --git a/policy-service/configs/.env.policy.develop b/policy-service/configs/.env.policy.develop
index 16f7383b09..ce9931702c 100644
--- a/policy-service/configs/.env.policy.develop
+++ b/policy-service/configs/.env.policy.develop
@@ -17,8 +17,12 @@ MQ_MAX_PAYLOAD="1048576"
MULTI_POLICY_SCHEDULER="0 0 * * *"
EXTERNAL_DOCUMENTS_SCHEDULER="0 0 * * *"
#LOG_LEVEL="2"
-#HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-#HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+
+#OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
+#OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+#OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+#OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
+
#MQ_MESSAGE_CHUNK=5000000
#DOCUMENT_CACHE_FIELD_LIMIT=100
#BATCH_NFT_MINT_SIZE=10
diff --git a/policy-service/configs/.env.policy.template b/policy-service/configs/.env.policy.template
index e45b5f0a77..8e28f3310e 100644
--- a/policy-service/configs/.env.policy.template
+++ b/policy-service/configs/.env.policy.template
@@ -17,8 +17,12 @@ MQ_MAX_PAYLOAD=""
MULTI_POLICY_SCHEDULER=""
EXTERNAL_DOCUMENTS_SCHEDULER=""
#LOG_LEVEL="2"
-#HEDERA_CUSTOM_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
-#HEDERA_CUSTOM_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+
+#OVERRIDE_NETWORK_CONFIGURATION="true" # if true, the OVERRIDE configurations will be applied on top of the base configuration defined by the HEDERA_NET value
+#OVERRIDE_HEDERA_CONSENSUS_NODES={"0.testnet.hedera.com:50211":"0.0.3"}
+#OVERRIDE_HEDERA_MIRROR_NODES=["testnet.mirrornode.hedera.com:443"]
+#OVERRIDE_HEDERA_MIRROR_NODES_BASE_API="/api/v1"
+
#MQ_MESSAGE_CHUNK=5000000
#DOCUMENT_CACHE_FIELD_LIMIT=100
#BATCH_NFT_MINT_SIZE=10
diff --git a/policy-service/src/api/policy-process.ts b/policy-service/src/api/policy-process.ts
index 57e932cc67..3870f12229 100644
--- a/policy-service/src/api/policy-process.ts
+++ b/policy-service/src/api/policy-process.ts
@@ -93,35 +93,42 @@ Promise.all([
const logger: PinoLogger = pinoLoggerInitialization(loggerMongo);
- if (process.env.HEDERA_CUSTOM_NODES) {
- try {
- const nodes = JSON.parse(process.env.HEDERA_CUSTOM_NODES);
- Environment.setNodes(nodes);
- } catch (error) {
- await logger.warn(
- 'HEDERA_CUSTOM_NODES field in settings: ' + error.message,
- ['POLICY', policyConfig.name, policyId.toString()],
- policyOwnerId
- );
- console.warn(error);
+ if (process.env.OVERRIDE_NETWORK_CONFIGURATION === 'true') {
+ if (process.env.OVERRIDE_HEDERA_CONSENSUS_NODES) {
+ try {
+ const nodes = JSON.parse(process.env.OVERRIDE_HEDERA_CONSENSUS_NODES);
+ Environment.setNodes(nodes);
+ } catch (error) {
+ await logger.warn(
+ 'OVERRIDE_HEDERA_CONSENSUS_NODES field in settings: ' + error.message,
+ ['POLICY', policyConfig.name, policyId.toString()],
+ policyOwnerId
+ );
+ console.warn(error);
+ }
}
- }
- if (process.env.HEDERA_CUSTOM_MIRROR_NODES) {
- try {
- const mirrorNodes = JSON.parse(
- process.env.HEDERA_CUSTOM_MIRROR_NODES
- );
- Environment.setMirrorNodes(mirrorNodes);
- } catch (error) {
- await logger.warn(
- 'HEDERA_CUSTOM_MIRROR_NODES field in settings: ' +
- error.message,
- ['POLICY', policyConfig.name, policyId.toString()],
- policyOwnerId
- );
- console.warn(error);
+ if (process.env.OVERRIDE_HEDERA_MIRROR_NODES) {
+ try {
+ const mirrorNodes = JSON.parse(
+ process.env.OVERRIDE_HEDERA_MIRROR_NODES
+ );
+ Environment.setMirrorNodes(mirrorNodes);
+ } catch (error) {
+ await logger.warn(
+ 'OVERRIDE_HEDERA_MIRROR_NODES field in settings: ' +
+ error.message,
+ ['POLICY', policyConfig.name, policyId.toString()],
+ policyOwnerId
+ );
+ console.warn(error);
+ }
+ }
+
+ if (process.env.OVERRIDE_HEDERA_MIRROR_NODES_BASE_API) {
+ Environment.setMirrorNodesBaseApi(process.env.OVERRIDE_HEDERA_MIRROR_NODES_BASE_API);
}
}
+
Environment.setNetwork(process.env.HEDERA_NET);
MessageServer.setLang(process.env.MESSAGE_LANG);
diff --git a/topic-listener-service/src/api/listener.ts b/topic-listener-service/src/api/listener.ts
index 293bc9ff00..2719e6caf7 100644
--- a/topic-listener-service/src/api/listener.ts
+++ b/topic-listener-service/src/api/listener.ts
@@ -110,7 +110,7 @@ export class Listener {
public async getMessages(topicId: string, lastNumber: number): Promise {
try {
- const url = `${Environment.HEDERA_TOPIC_API}${topicId}/messages`;
+ const url = `${Environment.HEDERA_TOPIC_API}/${topicId}/messages`;
const option: any = {
params: {
limit: Listener.REST_API_MAX_LIMIT
diff --git a/worker-service/src/api/helpers/environment.ts b/worker-service/src/api/helpers/environment.ts
deleted file mode 100644
index 13eb24e4ee..0000000000
--- a/worker-service/src/api/helpers/environment.ts
+++ /dev/null
@@ -1,416 +0,0 @@
-import { ensurePrefix, stripPrefix } from '@guardian/common';
-import { AccountId, Client } from '@hiero-ledger/sdk';
-
-/**
- * Environment class
- */
-export class Environment {
- /**
- * Mainnet API
- */
- public static readonly HEDERA_MAINNET_API: string = 'https://mainnet-public.mirrornode.hedera.com/api/v1';
- /**
- * Mainnet message API
- */
- public static readonly HEDERA_MAINNET_MESSAGE_API: string = Environment.HEDERA_MAINNET_API + '/topics/messages';
- /**
- * Mainnet topic API
- */
- public static readonly HEDERA_MAINNET_TOPIC_API: string = Environment.HEDERA_MAINNET_API + '/topics/';
- /**
- * Mainnet account API
- */
- public static readonly HEDERA_MAINNET_ACCOUNT_API: string = Environment.HEDERA_MAINNET_API + '/accounts/';
- /**
- * Mainnet balances API
- */
- public static readonly HEDERA_MAINNET_BALANCES_API: string = Environment.HEDERA_MAINNET_API + '/balances';
- /**
- * Mainnet contract API
- */
- public static readonly HEDERA_MAINNET_CONTRACT_API: string = Environment.HEDERA_MAINNET_API + '/contracts/';
- /**
- * Mainnet tokens API
- */
- public static readonly HEDERA_MAINNET_TOKENS_API: string = Environment.HEDERA_MAINNET_API + '/tokens';
- /**
- * Mainnet tokens API
- */
- public static readonly HEDERA_MAINNET_TRANSACTIONS_API: string = Environment.HEDERA_MAINNET_API + '/transactions';
-
- /**
- * Testnet API
- */
- public static readonly HEDERA_TESTNET_API: string = 'https://testnet.mirrornode.hedera.com/api/v1';
- /**
- * Testnet message API
- */
- public static readonly HEDERA_TESTNET_MESSAGE_API: string = Environment.HEDERA_TESTNET_API + '/topics/messages';
- /**
- * Testnet topic API
- */
- public static readonly HEDERA_TESTNET_TOPIC_API: string = Environment.HEDERA_TESTNET_API + '/topics/';
- /**
- * Testnet account API
- */
- public static readonly HEDERA_TESTNET_ACCOUNT_API: string = Environment.HEDERA_TESTNET_API + '/accounts/';
- /**
- * Testnet balances API
- */
- public static readonly HEDERA_TESTNET_BALANCES_API: string = Environment.HEDERA_TESTNET_API + '/balances';
- /**
- * Testnet contract API
- */
- public static readonly HEDERA_TESTNET_CONTRACT_API: string = Environment.HEDERA_TESTNET_API + '/contracts/';
- /**
- * Testnet tokens API
- */
- public static readonly HEDERA_TESTNET_TOKENS_API: string = Environment.HEDERA_TESTNET_API + '/tokens';
- /**
- * Testnet tokens API
- */
- public static readonly HEDERA_TESTNET_TRANSACTIONS_API: string = Environment.HEDERA_TESTNET_API + '/transactions';
-
- /**
- * Preview API
- */
- public static readonly HEDERA_PREVIEW_API: string = 'https://preview.mirrornode.hedera.com/api/v1';
- /**
- * Preview message API
- */
- public static readonly HEDERA_PREVIEW_MESSAGE_API: string = Environment.HEDERA_PREVIEW_API + '/topics/messages';
- /**
- * Preview topic API
- */
- public static readonly HEDERA_PREVIEW_TOPIC_API: string = Environment.HEDERA_PREVIEW_API + '/topics/';
- /**
- * Preview account API
- */
- public static readonly HEDERA_PREVIEW_ACCOUNT_API: string = Environment.HEDERA_PREVIEW_API + '/accounts/';
- /**
- * Preview balances API
- */
- public static readonly HEDERA_PREVIEW_BALANCES_API: string = Environment.HEDERA_PREVIEW_API + '/balances';
- /**
- * Preview contract API
- */
- public static readonly HEDERA_PREVIEW_CONTRACT_API: string = Environment.HEDERA_PREVIEW_API + '/contracts/';
- /**
- * Preview tokens API
- */
- public static readonly HEDERA_PREVIEW_TOKENS_API: string = Environment.HEDERA_PREVIEW_API + '/tokens';
- /**
- * Preview tokens API
- */
- public static readonly HEDERA_PREVIEW_TRANSACTIONS_API: string = Environment.HEDERA_PREVIEW_API + '/transactions';
-
- /**
- * Localnode API
- */
- public static HEDERA_LOCALNODE_API: string = `https://localhost:5551/api/v1`;
- /**
- * Localnode message API
- */
- public static HEDERA_LOCALNODE_MESSAGE_API: string = Environment.HEDERA_LOCALNODE_API + `/topics/messages`;
- /**
- * Localnode topic API
- */
- public static HEDERA_LOCALNODE_TOPIC_API: string = Environment.HEDERA_LOCALNODE_API + `/topics/`;
- /**
- * Localnode account API
- */
- public static HEDERA_LOCALNODE_ACCOUNT_API: string = Environment.HEDERA_LOCALNODE_API + `/accounts/`;
- /**
- * Localnode balances API
- */
- public static HEDERA_LOCALNODE_BALANCES_API: string = Environment.HEDERA_LOCALNODE_API + '/balances';
- /**
- * Localnode contract API
- */
- public static HEDERA_LOCALNODE_CONTRACT_API: string = Environment.HEDERA_LOCALNODE_API + `/contracts/`;
- /**
- * Localnode tokens API
- */
- public static HEDERA_LOCALNODE_TOKENS_API: string = Environment.HEDERA_LOCALNODE_API + `/tokens/`;
- /**
- * Localnode tokens API
- */
- public static readonly HEDERA_LOCALNODE_TRANSACTIONS_API: string = Environment.HEDERA_LOCALNODE_API + '/transactions';
-
- /**
- * Localnode protocol
- * @private
- */
- private static _localnodeprotocol: string = 'http'
- /**
- * Network
- * @private
- */
- private static _network: string = 'testnet';
- /**
- * LocalNode Address
- */
- private static _localnodeaddress = 'localhost'
-
- /**
- * Message API
- * @private
- */
- private static _messagesApi: string = Environment.HEDERA_TESTNET_MESSAGE_API;
- /**
- * Topic API
- * @private
- */
- private static _topicsApi: string = Environment.HEDERA_TESTNET_TOPIC_API;
- /**
- * Account API
- * @private
- */
- private static _accountsApi: string = Environment.HEDERA_TESTNET_ACCOUNT_API;
- /**
- * Balances API
- * @private
- */
- private static _balancesApi: string = Environment.HEDERA_TESTNET_BALANCES_API;
- /**
- * Contract API
- * @private
- */
- private static _contractsApi: string = Environment.HEDERA_TESTNET_CONTRACT_API;
- /**
- * Tokens API
- * @private
- */
- private static _tokensApi: string = Environment.HEDERA_TESTNET_TOKENS_API;
- /**
- * Tokens API
- * @private
- */
- private static _transactionsApi: string = Environment.HEDERA_TESTNET_TRANSACTIONS_API;
-
- /**
- * Hedera nodes
- * @private
- */
- private static _nodes: any = {};
- /**
- * Hedera mirror nodes
- * @private
- */
- private static _mirrorNodes: string[] = [];
-
- /**
- * Set network
- * @param network
- */
- public static setNetwork(network: string) {
- switch (network) {
- case 'mainnet':
- Environment._network = 'mainnet';
- Environment._messagesApi = Environment.HEDERA_MAINNET_MESSAGE_API;
- Environment._topicsApi = Environment.HEDERA_MAINNET_TOPIC_API;
- Environment._accountsApi = Environment.HEDERA_MAINNET_ACCOUNT_API;
- Environment._balancesApi = Environment.HEDERA_MAINNET_BALANCES_API;
- Environment._contractsApi = Environment.HEDERA_MAINNET_CONTRACT_API;
- Environment._tokensApi = Environment.HEDERA_MAINNET_TOKENS_API;
- Environment._transactionsApi = Environment.HEDERA_MAINNET_TRANSACTIONS_API;
- break;
-
- case 'testnet':
- Environment._network = 'testnet';
- Environment._messagesApi = Environment.HEDERA_TESTNET_MESSAGE_API;
- Environment._topicsApi = Environment.HEDERA_TESTNET_TOPIC_API;
- Environment._accountsApi = Environment.HEDERA_TESTNET_ACCOUNT_API;
- Environment._balancesApi = Environment.HEDERA_TESTNET_BALANCES_API;
- Environment._contractsApi = Environment.HEDERA_TESTNET_CONTRACT_API;
- Environment._tokensApi = Environment.HEDERA_TESTNET_TOKENS_API;
- Environment._transactionsApi = Environment.HEDERA_TESTNET_TRANSACTIONS_API;
- break;
-
- case 'previewnet':
- Environment._network = 'previewnet';
- Environment._messagesApi = Environment.HEDERA_PREVIEW_MESSAGE_API;
- Environment._topicsApi = Environment.HEDERA_PREVIEW_TOPIC_API;
- Environment._accountsApi = Environment.HEDERA_PREVIEW_ACCOUNT_API;
- Environment._balancesApi = Environment.HEDERA_PREVIEW_BALANCES_API;
- Environment._contractsApi = Environment.HEDERA_PREVIEW_CONTRACT_API;
- Environment._tokensApi = Environment.HEDERA_PREVIEW_TOKENS_API;
- Environment._transactionsApi = Environment.HEDERA_PREVIEW_TRANSACTIONS_API;
- break;
-
- case 'localnode':
- Environment._network = 'localnode';
- Environment._messagesApi = Environment.HEDERA_LOCALNODE_MESSAGE_API;
- Environment._topicsApi = Environment.HEDERA_LOCALNODE_TOPIC_API;
- Environment._accountsApi = Environment.HEDERA_LOCALNODE_ACCOUNT_API;
- Environment._balancesApi = Environment.HEDERA_LOCALNODE_BALANCES_API;
- Environment._contractsApi = Environment.HEDERA_LOCALNODE_CONTRACT_API;
- Environment._tokensApi = Environment.HEDERA_LOCALNODE_TOKENS_API;
- Environment._transactionsApi = Environment.HEDERA_LOCALNODE_TRANSACTIONS_API;
- break;
-
- default:
- throw new Error(`Unknown network: ${network}`)
- }
-
- if (Environment._mirrorNodes && Environment._mirrorNodes.length > 0) {
- const mirrornodeUrl = ensurePrefix(Environment._mirrorNodes[0], ['http://', 'https://'], 'https://');
- Environment._messagesApi = `${mirrornodeUrl}/api/v1/topics/messages`;
- Environment._topicsApi = `${mirrornodeUrl}/api/v1/topics/`;
- Environment._accountsApi = `${mirrornodeUrl}/api/v1/accounts/`;
- Environment._balancesApi = `${mirrornodeUrl}/api/v1/balances/`;
- Environment._contractsApi = `${mirrornodeUrl}/api/v1/contracts/`;
- Environment._tokensApi = `${mirrornodeUrl}/api/v1/tokens/`;
- }
- }
-
- /**
- * Set localnode address
- */
- public static setLocalNodeAddress(address) {
- Environment._localnodeaddress = address || 'localhost';
- Environment.HEDERA_LOCALNODE_API = `${Environment._localnodeprotocol}://${Environment._localnodeaddress}:5551/api/v1`;
- Environment.HEDERA_LOCALNODE_MESSAGE_API = Environment.HEDERA_LOCALNODE_API + `/topics/messages`;
- Environment.HEDERA_LOCALNODE_TOPIC_API = Environment.HEDERA_LOCALNODE_API + `/topics/`;
- Environment.HEDERA_LOCALNODE_ACCOUNT_API = Environment.HEDERA_LOCALNODE_API + `/accounts/`;
- Environment.HEDERA_LOCALNODE_BALANCES_API = Environment.HEDERA_LOCALNODE_API + `/balances`;
- Environment.HEDERA_LOCALNODE_CONTRACT_API = Environment.HEDERA_LOCALNODE_API + `/contracts/`;
- Environment.HEDERA_LOCALNODE_TOKENS_API = Environment.HEDERA_LOCALNODE_API + `/tokens/`;
- }
-
- /**
- * Set localnode protocol
- */
- public static setLocalNodeProtocol(protocol: string) {
- Environment._localnodeprotocol = protocol;
- }
-
- /**
- * Set hedera nodes
- * @param nodes Hedera nodes
- */
- public static setNodes(nodes: any) {
- Environment._nodes = nodes;
- }
-
- /**
- * Set hedera mirror nodes
- * @param mirrorNodes Hedera mirror nodes
- */
- public static setMirrorNodes(mirrorNodes: string[]) {
- Environment._mirrorNodes = mirrorNodes;
- }
-
- /**
- * Create client
- */
- public static createClient(): Client {
- let client: Client;
-
- switch (Environment._network) {
- case 'mainnet':
- client = Client.forMainnet();
- break;
- case 'testnet':
- client = Client.forTestnet();
- break;
- case 'previewnet':
- client = Client.forPreviewnet();
- break;
- case 'localnode':
- const node = {} as any;
- node[`${Environment._localnodeaddress}:50211`] = new AccountId(3)
- client = Client.forNetwork(node).setMirrorNetwork(`${Environment._localnodeaddress}:5600`);
- break;
- default:
- throw new Error(`Unknown network: ${Environment._network}`)
- }
-
- if (Environment._nodes && Object.keys(Environment._nodes).length) {
- client.setNetwork(Environment._nodes);
- }
- if (Environment._mirrorNodes?.length) {
- const mirrornodeUrls = Environment._mirrorNodes.map(node => stripPrefix(node, ['http://', 'https://']));
- client.setMirrorNetwork(mirrornodeUrls);
- }
-
- return client;
- }
-
- /**
- * Network
- */
- public static get network(): string {
- return Environment._network;
- }
-
- /**
- * Hedera message API
- * @constructor
- */
- public static get HEDERA_MESSAGE_API(): string {
- return Environment._messagesApi;
- }
-
- /**
- * Hedera topic API
- * @constructor
- */
- public static get HEDERA_TOPIC_API(): string {
- return Environment._topicsApi;
- }
-
- /**
- * Hedera account API
- * @constructor
- */
- public static get HEDERA_ACCOUNT_API(): string {
- return Environment._accountsApi;
- }
-
- /**
- * Hedera account API
- * @constructor
- */
- public static get HEDERA_BALANCES_API(): string {
- return Environment._balancesApi;
- }
-
- /**
- * Hedera contract API
- * @constructor
- */
- public static get HEDERA_CONTRACT_API(): string {
- return Environment._contractsApi;
- }
-
- /**
- * Hedera tokens API
- * @constructor
- */
- public static get HEDERA_TOKENS_API(): string {
- return Environment._tokensApi;
- }
-
- /**
- * Hedera tokens API
- * @constructor
- */
- public static get HEDERA_TRANSACTIONS_API(): string {
- return Environment._transactionsApi;
- }
-
- /**
- * Nodes
- */
- public static get nodes(): any {
- return Environment._nodes;
- }
-
- /**
- * Mirror nodes
- */
- public static get mirrorNodes(): string[] {
- return Environment._mirrorNodes;
- }
-}
diff --git a/worker-service/src/api/helpers/hedera-sdk-helper.ts b/worker-service/src/api/helpers/hedera-sdk-helper.ts
index 77667c666a..098e81f008 100644
--- a/worker-service/src/api/helpers/hedera-sdk-helper.ts
+++ b/worker-service/src/api/helpers/hedera-sdk-helper.ts
@@ -48,12 +48,12 @@ import {
} from '@hiero-ledger/sdk';
import { HederaUtils, timeout } from './utils.js';
import axios, { AxiosResponse } from 'axios';
-import { Environment } from './environment.js';
import { ContractParamType, FireblocksCreds, GenerateUUIDv4, HederaResponseCode, ISignOptions, SignType } from '@guardian/interfaces';
import Long from 'long';
import { TransactionLogger } from './transaction-logger.js';
import process from 'process';
import { FireblocksHelper } from './fireblocks-helper.js';
+import { Environment } from '@guardian/common';
export const MAX_FEE = Math.abs(+process.env.MAX_TRANSACTION_FEE) || 30;
export const INITIAL_BALANCE = 30;
@@ -107,6 +107,11 @@ export class NetworkOptions {
* Hedera mirror nodes
*/
public mirrorNodes: string[] = [];
+
+ /**
+ * Hedera mirror nodes base api
+ */
+ public mirrorNodesBaseApi: string = '/api/v1';
}
/**
@@ -158,16 +163,24 @@ export class HederaSDKHelper {
*/
private readonly network: string;
+ /**
+ * Mainnet API
+ * @private
+ */
+ private static readonly HEDERA_MAINNET_API: string = 'https://mainnet-public.mirrornode.hedera.com/api/v1';
+
constructor(
operatorId: string | AccountId | null,
operatorKey: string | PrivateKey | null,
dryRun: string = null,
networkOptions: NetworkOptions
) {
+ Environment.setMainnetApiUrl(HederaSDKHelper.HEDERA_MAINNET_API);
Environment.setLocalNodeAddress(networkOptions.localNodeAddress);
Environment.setLocalNodeProtocol(networkOptions.localNodeProtocol);
Environment.setNodes(networkOptions.nodes);
Environment.setMirrorNodes(networkOptions.mirrorNodes);
+ Environment.setMirrorNodesBaseApi(networkOptions.mirrorNodesBaseApi);
Environment.setNetwork(networkOptions.network);
this.dryRun = dryRun || null;
this.client = Environment.createClient();
@@ -183,10 +196,12 @@ export class HederaSDKHelper {
* @private
*/
public static setNetwork(networkOptions: NetworkOptions) {
+ Environment.setMainnetApiUrl(HederaSDKHelper.HEDERA_MAINNET_API);
Environment.setLocalNodeAddress(networkOptions.localNodeAddress);
Environment.setLocalNodeProtocol(networkOptions.localNodeProtocol);
Environment.setNodes(networkOptions.nodes);
Environment.setMirrorNodes(networkOptions.mirrorNodes);
+ Environment.setMirrorNodesBaseApi(networkOptions.mirrorNodesBaseApi);
Environment.setNetwork(networkOptions.network);
return HederaSDKHelper;
}
@@ -1082,7 +1097,7 @@ export class HederaSDKHelper {
startTimestamp?: string
): Promise {
let goNext = true;
- let url = `${Environment.HEDERA_TOPIC_API}${topicId}/messages`;
+ let url = `${Environment.HEDERA_TOPIC_API}/${topicId}/messages`;
if (startTimestamp) {
url += `?timestamp=gt:${startTimestamp}`;
}
@@ -1155,7 +1170,7 @@ export class HederaSDKHelper {
*/
@timeout(HederaSDKHelper.MAX_TIMEOUT, 'Get topic message request (by index) timeout exceeded')
public static async getTopicMessageByIndex(topicId: string, index: number): Promise {
- const url = `${Environment.HEDERA_TOPIC_API}${topicId}/messages/${index}`;
+ const url = `${Environment.HEDERA_TOPIC_API}/${topicId}/messages/${index}`;
const res = await axios.get(url, { responseType: 'json' });
if (!res || !res.data || !res.data.message) {
throw new Error(`Invalid message. TopicId: '${topicId}', index: '${index}'`);
@@ -1775,7 +1790,7 @@ export class HederaSDKHelper {
public static async getContractInfo(
contractId: string | ContractId,
): Promise<{ memo: string }> {
- const url = `${Environment.HEDERA_CONTRACT_API}${contractId}`;
+ const url = `${Environment.HEDERA_CONTRACT_API}/${contractId}`;
const res = await axios.get(url, {
responseType: 'json',
});
@@ -1812,7 +1827,7 @@ export class HederaSDKHelper {
params,
responseType: 'json',
};
- const url = `${Environment.HEDERA_CONTRACT_API}${contractId}/results/logs`;
+ const url = `${Environment.HEDERA_CONTRACT_API}/${contractId}/results/logs`;
return await HederaSDKHelper.hederaRestApi(url, p, 'logs');
}
@@ -1834,7 +1849,7 @@ export class HederaSDKHelper {
params,
responseType: 'json',
};
- const url = `${Environment.HEDERA_ACCOUNT_API}${client.operatorAccountId}/nfts`;
+ const url = `${Environment.HEDERA_ACCOUNT_API}/${client.operatorAccountId}/nfts`;
return await HederaSDKHelper.hederaRestApi(url, p, 'nfts');
}
@@ -1855,7 +1870,7 @@ export class HederaSDKHelper {
params,
responseType: 'json',
};
- const url = `${Environment.HEDERA_ACCOUNT_API}${hederaAccountId}/nfts`;
+ const url = `${Environment.HEDERA_ACCOUNT_API}/${hederaAccountId}/nfts`;
return await HederaSDKHelper.hederaRestApi(url, p, 'nfts');
}
@@ -1983,7 +1998,7 @@ export class HederaSDKHelper {
@timeout(HederaSDKHelper.MAX_TIMEOUT, 'Get contract info request timeout exceeded')
public async getContractInfoRest(contractId: string): Promise {
const res = await axios.get(
- `${Environment.HEDERA_CONTRACT_API}${contractId}`,
+ `${Environment.HEDERA_CONTRACT_API}/${contractId}`,
{ responseType: 'json' }
);
if (!res || !res.data) {
@@ -2056,7 +2071,7 @@ export class HederaSDKHelper {
}
const error = `Invalid account '${accountId}'`;
- const responses = await HederaSDKHelper.loadData(`${Environment.HEDERA_ACCOUNT_API}${accountId}/tokens`, '', [], error);
+ const responses = await HederaSDKHelper.loadData(`${Environment.HEDERA_ACCOUNT_API}/${accountId}/tokens`, '', [], error);
const result: { [tokenId: string]: any } = {};
for (const response of responses) {
const tokens: any[] = response.tokens;
@@ -2088,7 +2103,7 @@ export class HederaSDKHelper {
}
const res = await axios.get(
- `${Environment.HEDERA_ACCOUNT_API}${accountId}`,
+ `${Environment.HEDERA_ACCOUNT_API}/${accountId}`,
{ responseType: 'json' }
);
if (!res || !res.data) {
@@ -2123,7 +2138,7 @@ export class HederaSDKHelper {
responseType: 'json'
}
} else {
- url = `${Environment.HEDERA_TOPIC_API}${topicId}/messages`;
+ url = `${Environment.HEDERA_TOPIC_API}/${topicId}/messages`;
if (startTimestamp) {
requestParams = {
params: {
@@ -2192,7 +2207,7 @@ export class HederaSDKHelper {
@timeout(HederaSDKHelper.MAX_TIMEOUT, 'Resolve alias request timeout exceeded')
public static async resolveAccountAlias(accountId: string): Promise<{ accountId: string }> {
const res = await axios.get(
- `${Environment.HEDERA_ACCOUNT_API}${accountId}`,
+ `${Environment.HEDERA_ACCOUNT_API}/${accountId}`,
{ responseType: 'json' }
);
diff --git a/worker-service/src/api/worker.ts b/worker-service/src/api/worker.ts
index 6b507839bf..dae71a1cd2 100644
--- a/worker-service/src/api/worker.ts
+++ b/worker-service/src/api/worker.ts
@@ -317,7 +317,8 @@ export class Worker extends NatsService {
localNodeAddress: task.data.localNodeAddress,
localNodeProtocol: task.data.localNodeProtocol,
nodes: task.data.nodes,
- mirrorNodes: task.data.mirrorNodes
+ mirrorNodes: task.data.mirrorNodes,
+ mirrorNodesBaseApi: task.data.mirrorNodesBaseApi
}
let client: HederaSDKHelper;
try {