Set FLEET in env variable

Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
This commit is contained in:
Adam Babik 2018-08-14 19:06:41 +02:00 committed by Igor Mandrigin
parent 7ecf1465b1
commit f054830533
No known key found for this signature in database
GPG Key ID: 4A0EDDE26E66BC8B
17 changed files with 370 additions and 158 deletions

1
.env
View File

@ -4,6 +4,7 @@ OFFLINE_INBOX_ENABLED=1
RPC_NETWORKS_ONLY=1
LOG_LEVEL=debug
LOG_LEVEL_STATUS_GO=info
FLEET=eth.beta
QUEUE_MESSAGE_ENABLED=1
RN_BRIDGE_THRESHOLD_WARNINGS=0
POW_TARGET=0.002

View File

@ -3,6 +3,7 @@ ETHEREUM_DEV_CLUSTER=1
OFFLINE_INBOX_ENABLED=1
LOG_LEVEL=debug
LOG_LEVEL_STATUS_GO=info
FLEET=eth.beta
JSC_ENABLED=1
QUEUE_MESSAGE_ENABLED=1
RN_BRIDGE_THRESHOLD_WARNINGS=0

View File

@ -3,6 +3,7 @@ ETHEREUM_DEV_CLUSTER=1
OFFLINE_INBOX_ENABLED=1
LOG_LEVEL=debug
LOG_LEVEL_STATUS_GO=info
FLEET=eth.beta
JSC_ENABLED=1
QUEUE_MESSAGE_ENABLED=1
RN_BRIDGE_THRESHOLD_WARNINGS=0

View File

@ -3,6 +3,7 @@ ETHEREUM_DEV_CLUSTER=1
OFFLINE_INBOX_ENABLED=1
LOG_LEVEL=debug
LOG_LEVEL_STATUS_GO=info
FLEET=eth.beta
JSC_ENABLED=1
QUEUE_MESSAGE_ENABLED=1
RN_BRIDGE_THRESHOLD_WARNINGS=0

View File

@ -0,0 +1,19 @@
TESTFAIRY_ENABLED=1
ETHEREUM_DEV_CLUSTER=1
OFFLINE_INBOX_ENABLED=1
LOG_LEVEL=debug
LOG_LEVEL_STATUS_GO=info
FLEET=eth.staging
JSC_ENABLED=1
QUEUE_MESSAGE_ENABLED=1
RN_BRIDGE_THRESHOLD_WARNINGS=0
TESTFAIRY_TOKEN=969f6c921cb435cea1d41d1ea3f5b247d6026d55
POW_TARGET=0.002
POW_TIME=1
DEFAULT_NETWORK=mainnet_rpc
INSTABUG_TOKEN=758630ed52864cbad9c5eeeac596c60c
DEBUG_WEBVIEW=1
INSTABUG_SURVEYS=1
GROUP_CHATS_ENABLED=0
SPAM_BUTTON_DETECTION_ENABLED=1
MAINNET_WARNING_ENABLED=1

View File

@ -5,6 +5,7 @@ OFFLINE_INBOX_ENABLED=1
RPC_NETWORKS_ONLY=1
LOG_LEVEL=info
LOG_LEVEL_STATUS_GO=
FLEET=eth.beta
QUEUE_MESSAGE_ENABLED=0
RN_BRIDGE_THRESHOLD_WARNINGS=0
POW_TARGET=0.002

View File

@ -0,0 +1,179 @@
// We need nightly builds for users who want to test apps, diawi removes old builds and limits downloads, hence the need for Artifactory.
// To see env: echo sh(returnStdout: true, script: 'env')
properties([
buildDiscarder(logRotator(
numToKeepStr: '30',
daysToKeepStr: '30',
))
])
env.LANG="en_US.UTF-8"
env.LANGUAGE="en_US.UTF-8"
env.LC_ALL="en_US.UTF-8"
env.FASTLANE_DISABLE_COLORS=1
env.REALM_DISABLE_ANALYTICS=1
def installJSDeps() {
def attempt = 1
def maxAttempts = 10
def installed = false
while (!installed && attempt <= maxAttempts) {
println "#${attempt} attempt to install npm deps"
sh 'npm install'
installed = fileExists('node_modules/web3/index.js')
attemp = attempt + 1
}
}
timeout(90) {
node ('fastlane'){
def apkUrl = ''
def testApkUrl = ''
def ipaUrl = ''
def version
def build_no
load "$HOME/env.groovy"
try {
stage('Git & Dependencies') {
slackSend color: 'good', message: 'Nightly build started. ' + env.BUILD_URL
checkout scm
sh 'git fetch --tags'
sh 'rm -rf node_modules'
sh 'cp .env.nightly.staging.fleet .env'
sh 'scripts/prepare-for-platform.sh mobile'
version = readFile("${env.WORKSPACE}/VERSION").trim()
installJSDeps()
sh 'mvn -f modules/react-native-status/ios/RCTStatus dependency:unpack'
sh 'cd ios && pod install && cd ..'
}
stage('Tag Build') {
withCredentials([[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'status-im-auto',
usernameVariable: 'GIT_USER',
passwordVariable: 'GIT_PASS'
]]) {
build_no = sh(
returnStdout: true,
script: './scripts/build_no.sh --increment'
).trim()
}
}
stage('Tests') {
sh 'lein test-cljs'
}
stage('Build') {
sh 'lein prod-build'
}
stage('Build (Android)') {
sh 'cd android && ./gradlew react-native-android:installArchives && ./gradlew assembleRelease'
}
stage('Deploy (Android)') {
def artifact_dir = pwd() + '/android/app/build/outputs/apk/release/'
println (artifact_dir + 'app-release.apk')
def artifact = (artifact_dir + 'app-release.apk')
def server = Artifactory.server('artifacts')
shortCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim().take(6)
def filename = 'im.status.ethereum-' + shortCommit + '-n-fl' + '.apk'
def newArtifact = (artifact_dir + filename)
sh ('cp ' + artifact + ' ' + newArtifact)
def uploadSpec = '{ "files": [ { "pattern": "*apk/release/' + filename + '", "target": "nightlies-local" }]}'
def buildInfo = server.upload(uploadSpec)
apkUrl = 'http://artifacts.status.im:8081/artifactory/nightlies-local/' + filename
sh ('echo ARTIFACT Android: ' + apkUrl)
withCredentials([
string(
credentialsId: "SUPPLY_JSON_KEY_DATA",
variable: 'GOOGLE_PLAY_JSON_KEY'
),
string(
credentialsId: "SLACK_URL",
variable: 'SLACK_URL'
)
]) {
sh ('bundle exec fastlane android nightly')
}
}
stage('Build & TestFlight (iOS)') {
withCredentials([
string(credentialsId: "slave-pass-${env.NODE_NAME}", variable: 'KEYCHAIN_PASSWORD'),
string(credentialsId: "SLACK_URL", variable: 'SLACK_URL'),
string(credentialsId: 'FASTLANE_PASSWORD', variable: 'FASTLANE_PASSWORD'),
string(credentialsId: 'APPLE_ID', variable: 'APPLE_ID'),
string(credentialsId: 'fastlane-match-password', variable:'MATCH_PASSWORD')]) {
sh "plutil -replace CFBundleShortVersionString -string ${version} ios/StatusIm/Info.plist"
sh "plutil -replace CFBundleVersion -string ${build_no} ios/StatusIm/Info.plist"
sh 'fastlane ios nightly'
}
}
stage('Deploy diawi (iOS)') {
withCredentials([
string(credentialsId: 'diawi-token', variable: 'DIAWI_TOKEN'),
string(credentialsId: 'GIT_HUB_TOKEN', variable: 'GITHUB_TOKEN'),
string(credentialsId: 'SLACK_JENKINS_WEBHOOK', variable: 'SLACK_URL')
]) {
sh 'fastlane ios upload_diawi'
env.WORKSPACE = pwd()
ipaUrl = readFile "${env.WORKSPACE}/fastlane/diawi.out"
}
}
} catch (e) {
slackSend color: 'bad', message: 'Nightly build (develop) failed to build. ' + env.BUILD_URL
throw e
}
stage('Run status-nightly-publish-link job') {
build(
job: 'misc/status-im.github.io-update_env',
parameters: [
[$class: 'StringParameterValue', name: 'APK_URL', value: apkUrl],
[$class: 'StringParameterValue', name: 'IOS_URL', value: ipaUrl]
]
)
}
stage('Build (Android) for e2e tests') {
sh 'cd android && mv app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/app-release.original.apk && ENVFILE=.env.e2e ./gradlew assembleRelease'
}
stage('Upload apk for e2e tests') {
env.SAUCE_LABS_APK = 'im.status.ethereum-e2e-' + shortCommit + '.apk'
withCredentials([
string(credentialsId: 'SAUCE_ACCESS_KEY', variable: 'SAUCE_ACCESS_KEY'),
string(credentialsId: 'SAUCE_USERNAME', variable: 'SAUCE_USERNAME'),
string(credentialsId: 'diawi-token', variable: 'DIAWI_TOKEN'),
string(credentialsId: 'GIT_HUB_TOKEN', variable: 'GITHUB_TOKEN'),
string(credentialsId: 'SLACK_JENKINS_WEBHOOK', variable: 'SLACK_URL')
]) {
sh 'fastlane android saucelabs'
sh 'fastlane android upload_diawi'
testApkUrl = readFile "${env.WORKSPACE}/fastlane/diawi.out"
}
}
stage('Slack Notification') {
slackSend color: 'good', message: 'Nightly build (develop) \nAndroid: ' + apkUrl + '\n iOS: ' + ipaUrl + '\n Android for e2e: ' + testApkUrl
}
stage('Run extended e2e tests') {
build job: 'end-to-end-tests/status-app-nightly', parameters: [string(name: 'apk', value: '--apk=' + env.SAUCE_LABS_APK)], wait: false
}
}
}

View File

@ -43,6 +43,7 @@ timeout(90) {
sh 'echo MAINNET_NETWORKS_ENABLED=' + MAINNET_NETWORKS_ENABLED + '>>' + '.env'
sh 'echo LOG_LEVEL=' + LOG_LEVEL + '>>' + '.env'
sh 'echo LOG_LEVEL_STATUS_GO=' + LOG_LEVEL_STATUS_GO + '>>' + '.env'
sh 'echo FLEET=' + FLEET + '>>' + '.env'
sh 'echo OFFLINE_INBOX_ENABLED=' + OFFLINE_INBOX_ENABLED + '>>' + '.env'
sh 'echo POW_TARGET=' + POW_TARGET + '>>' + '.env'
sh 'echo POW_TIME=' + POW_TIME + '>>' + '.env'

View File

@ -16,7 +16,7 @@ dependencies {
implementation 'com.instabug.library:instabug:3+'
implementation 'status-im:function:0.0.1'
String statusGoVersion = 'tags-v0.11.0^0-g4afd9e6c-302'
String statusGoVersion = 'develop-g19b53030'
final String statusGoGroup = 'status-im', statusGoName = 'status-go'
// Check if the local status-go jar exists, and compile against that if it does

View File

@ -38,6 +38,8 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
private static final String TAG = "StatusModule";
private final static int TESTNET_NETWORK_ID = 3;
private HashMap<String, Callback> callbacks = new HashMap<>();
private static StatusModule module;
@ -115,7 +117,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
this.getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("gethEvent", params);
}
private String prepareLogsFile() {
private static String prepareLogsFile() {
String gethLogFileName = "geth.log";
File pubDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File logFile = new File(pubDirectory, gethLogFileName);
@ -151,12 +153,96 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
return null;
}
private void doStartNode(final String defaultConfig) {
private String generateConfig(final String dataDir, final int networkId, final String keystoreDir, final String fleet, final Object upstreamConfig) throws JSONException {
JSONObject jsonConfig = new JSONObject(
Statusgo.GenerateConfig(dataDir, fleet, networkId));
jsonConfig.put("NetworkId", networkId);
jsonConfig.put("DataDir", dataDir);
jsonConfig.put("KeyStoreDir", keystoreDir);
if (upstreamConfig != null) {
Log.d(TAG, "UpstreamConfig is not null");
jsonConfig.put("UpstreamConfig", upstreamConfig);
}
final String gethLogFilePath = TextUtils.isEmpty(this.logLevel) ? null : prepareLogsFile();
final boolean logsEnabled = (gethLogFilePath != null);
jsonConfig.put("LogEnabled", logsEnabled);
jsonConfig.put("LogFile", gethLogFilePath);
jsonConfig.put("LogLevel", TextUtils.isEmpty(this.logLevel) ? "ERROR" : this.logLevel.toUpperCase());
// Setting up whisper config
JSONObject whisperConfig = jsonConfig.optJSONObject("WhisperConfig");
if (whisperConfig == null) {
whisperConfig = new JSONObject();
}
whisperConfig.put("LightClient", true);
jsonConfig.put("WhisperConfig", whisperConfig);
// Setting up cluster config
JSONObject clusterConfig = jsonConfig.optJSONObject("ClusterConfig");
if (clusterConfig != null) {
Log.d(TAG, "ClusterConfig is not null");
clusterConfig.put("Fleet", fleet);
jsonConfig.put("ClusterConfig", clusterConfig);
} else {
Log.w(TAG, "ClusterConfig: Cannot find ClusterConfig: doesn't exist or not a JSON object");
Log.w(TAG, "ClusterConfig: Fleet will be set to defaults");
}
return jsonConfig.toString();
}
private String generateConfigFromDefaultConfig(final String root, final String keystoreDir, final String fleet, final String defaultConfig) {
try {
JSONObject customConfig = new JSONObject(defaultConfig);
// parameters from config
final String dataDir = root + customConfig.get("DataDir");
final int networkId = customConfig.getInt("NetworkId");
final Object upstreamConfig = customConfig.opt("UpstreamConfig");
return generateConfig(dataDir, networkId, keystoreDir, fleet, upstreamConfig);
} catch (JSONException e) {
Log.d(TAG, "Something went wrong " + e.getMessage());
Log.d(TAG, "Default configuration will be used: ropsten, beta fleet");
return Statusgo.GenerateConfig(this.getTestnetDataDir(root), "eth.beta", TESTNET_NETWORK_ID);
}
}
private static void prettyPrintConfig(final String config) {
Log.d(TAG, "startNode() with config (see below)");
String configOutput = config;
final int maxOutputLen = 4000;
Log.d(TAG, "********************** NODE CONFIG ****************************");
while (!configOutput.isEmpty()) {
Log.d(TAG, "Node config:" + configOutput.substring(0, Math.min(maxOutputLen, configOutput.length())));
if (configOutput.length() > maxOutputLen) {
configOutput = configOutput.substring(maxOutputLen);
} else {
break;
}
}
Log.d(TAG, "******************* ENDOF NODE CONFIG *************************");
}
private String getTestnetDataDir(final String root) {
return root + "/ethereum/testnet";
}
private void doStartNode(final String defaultConfig, final String fleet) {
Activity currentActivity = getCurrentActivity();
String root = currentActivity.getApplicationInfo().dataDir;
String dataFolder = root + "/ethereum/testnet";
final String root = currentActivity.getApplicationInfo().dataDir;
final String dataFolder = this.getTestnetDataDir(root);
Log.d(TAG, "Starting Geth node in folder: " + dataFolder);
try {
@ -187,8 +273,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
}
int testnetNetworkId = 3;
String testnetDataDir = root + "/ethereum/testnet";
String testnetDataDir = dataFolder;
String oldKeystoreDir = testnetDataDir + "/keystore";
String newKeystoreDir = root + "/keystore";
final File oldKeystore = new File(oldKeystoreDir);
@ -209,73 +294,9 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
}
}
String config;
try {
JSONObject customConfig = new JSONObject(defaultConfig);
final String config = this.generateConfigFromDefaultConfig(root, newKeystoreDir, fleet, defaultConfig);
String dataDir = root + customConfig.get("DataDir");
config = Statusgo.GenerateConfig(dataDir, customConfig.getInt("NetworkId"));
JSONObject jsonConfig = new JSONObject(config);
String gethLogFilePath = TextUtils.isEmpty(this.logLevel) ? null : prepareLogsFile();
boolean logsEnabled = (gethLogFilePath != null);
jsonConfig.put("LogEnabled", logsEnabled);
jsonConfig.put("LogFile", gethLogFilePath);
jsonConfig.put("LogLevel", TextUtils.isEmpty(this.logLevel) ? "ERROR" : this.logLevel.toUpperCase());
jsonConfig.put("DataDir", dataDir);
jsonConfig.put("NetworkId", customConfig.get("NetworkId"));
try {
Object upstreamConfig = customConfig.get("UpstreamConfig");
if (upstreamConfig != null) {
Log.d(TAG, "UpstreamConfig is not null");
jsonConfig.put("UpstreamConfig", upstreamConfig);
}
} catch (Exception e) {
}
try {
JSONObject whisperConfig = (JSONObject) jsonConfig.get("WhisperConfig");
if (whisperConfig == null) {
whisperConfig = new JSONObject();
}
whisperConfig.put("LightClient", true);
jsonConfig.put("WhisperConfig", whisperConfig);
} catch (Exception e) {
}
try {
Object clusterConfig = customConfig.get("ClusterConfig");
if (clusterConfig != null) {
Log.d(TAG, "ClusterConfig is not null");
jsonConfig.put("ClusterConfig", clusterConfig);
}
} catch (Exception e) {
Log.w(TAG, "Something went wrong parsing cluster config" + e.getMessage());
}
jsonConfig.put("KeyStoreDir", newKeystoreDir);
config = jsonConfig.toString();
} catch (JSONException e) {
config = Statusgo.GenerateConfig(testnetDataDir, testnetNetworkId);
Log.d(TAG, "Something went wrong " + e.getMessage());
Log.d(TAG, "Default configuration will be used");
}
String configOutput = config;
final int maxOutputLen = 4000;
while (!configOutput.isEmpty()) {
Log.d(TAG, "Node config:" + configOutput.substring(0, Math.min(maxOutputLen, configOutput.length())));
if (configOutput.length() > maxOutputLen) {
configOutput = configOutput.substring(maxOutputLen);
} else {
break;
}
}
prettyPrintConfig(config);
String res = Statusgo.StartNode(config);
if (res.startsWith("{\"error\":\"\"")) {
@ -369,7 +390,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
}
@ReactMethod
public void startNode(final String config) {
public void startNode(final String config, final String fleet) {
Log.d(TAG, "startNode");
if (!checkAvailability()) {
return;
@ -378,7 +399,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
Runnable r = new Runnable() {
@Override
public void run() {
doStartNode(config);
doStartNode(config, fleet);
}
};

View File

@ -65,7 +65,8 @@ RCT_EXPORT_MODULE();
////////////////////////////////////////////////////////////////////
#pragma mark - startNode
//////////////////////////////////////////////////////////////////// startNode
RCT_EXPORT_METHOD(startNode:(NSString *)configString) {
RCT_EXPORT_METHOD(startNode:(NSString *)configString
fleet:(NSString *)fleet) {
#if DEBUG
NSLog(@"StartNode() method called");
#endif
@ -116,7 +117,7 @@ RCT_EXPORT_METHOD(startNode:(NSString *)configString) {
NSString *networkDir = [rootUrl.path stringByAppendingString:dataDir];
NSString *devCluster = [ReactNativeConfig envFor:@"ETHEREUM_DEV_CLUSTER"];
NSString *logLevel = [[ReactNativeConfig envFor:@"LOG_LEVEL_STATUS_GO"] uppercaseString];
char *configChars = GenerateConfig((char *)[networkDir UTF8String], networkId);
char *configChars = GenerateConfig((char *)[networkDir UTF8String], (char *)[fleet UTF8String], networkId);
NSString *config = [NSString stringWithUTF8String: configChars];
configData = [config dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *resultingConfigJson = [NSJSONSerialization JSONObjectWithData:configData options:NSJSONReadingMutableContainers error:nil];
@ -139,6 +140,9 @@ RCT_EXPORT_METHOD(startNode:(NSString *)configString) {
[resultingConfigJson setValue:bootnodes forKeyPath:@"ClusterConfig.BootNodes"];
}
if([fleet length] > 0) {
[resultingConfigJson setValue:fleet forKeyPath:@"ClusterConfig.Fleet"];
}
NSString *resultingConfig = [resultingConfigJson bv_jsonStringWithPrettyPrint:NO];
NSLog(@"node config %@", resultingConfig);

View File

@ -25,7 +25,7 @@
<artifactItem>
<groupId>status-im</groupId>
<artifactId>status-go-ios-simulator</artifactId>
<version>tags-v0.11.0^0-g4afd9e6c-302</version>
<version>develop-g19b53030</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>./</outputDirectory>

View File

@ -83,81 +83,63 @@
(merge testnet-networks mainnet-networks))))
(def default-wnodes-without-custom
{:testnet {"mailserver-a" {:id "mailserver-a" ;mail-01.do-ams3.eth.beta
:name "Status mailserver A"
:password inbox-password
:address "enode://c42f368a23fa98ee546fd247220759062323249ef657d26d357a777443aec04db1b29a3a22ef3e7c548e18493ddaf51a31b0aed6079bd6ebe5ae838fcfaf3a49@206.189.243.162:30504"}
"mailserver-b" {:id "mailserver-b" ;mail-02.do-ams3.eth.beta
:name "Status mailserver B"
:password inbox-password
:address "enode://7aa648d6e855950b2e3d3bf220c496e0cae4adfddef3e1e6062e6b177aec93bc6cdcf1282cb40d1656932ebfdd565729da440368d7c4da7dbd4d004b1ac02bf8@206.189.243.169:30504"}
"mailserver-c" {:id "mailserver-c" ;mail-03.do-ams3.eth.beta
:name "Status mailserver C"
:password inbox-password
:address "enode://8a64b3c349a2e0ef4a32ea49609ed6eb3364be1110253c20adc17a3cebbc39a219e5d3e13b151c0eee5d8e0f9a8ba2cd026014e67b41a4ab7d1d5dd67ca27427@206.189.243.168:30504"}
"mailserver-d" {:id "mailserver-d" ;mail-01.gc-us-central1-a.eth.beta
:name "Status mailserver D"
:password inbox-password
:address "enode://7de99e4cb1b3523bd26ca212369540646607c721ad4f3e5c821ed9148150ce6ce2e72631723002210fac1fd52dfa8bbdf3555e05379af79515e1179da37cc3db@35.188.19.210:30504"}
"mailserver-e" {:id "mailserver-e" ;mail-02.gc-us-central1-a.eth.beta
:name "Status mailserver E"
:password inbox-password
:address "enode://015e22f6cd2b44c8a51bd7a23555e271e0759c7d7f52432719665a74966f2da456d28e154e836bee6092b4d686fe67e331655586c57b718be3997c1629d24167@35.226.21.19:30504"}
"mailserver-f" {:id "mailserver-f" ;mail-03.gc-us-central1-a.eth.beta
:name "Status mailserver F"
:password inbox-password
:address "enode://531e252ec966b7e83f5538c19bf1cde7381cc7949026a6e499b6e998e695751aadf26d4c98d5a4eabfb7cefd31c3c88d600a775f14ed5781520a88ecd25da3c6@35.225.227.79:30504"}}
:mainnet {"mailserver-a" {:id "mailserver-a" ;mail-01.do-ams3.eth.beta
:name "Status mailserver A"
:password inbox-password
:address "enode://c42f368a23fa98ee546fd247220759062323249ef657d26d357a777443aec04db1b29a3a22ef3e7c548e18493ddaf51a31b0aed6079bd6ebe5ae838fcfaf3a49@206.189.243.162:30504"}
"mailserver-b" {:id "mailserver-b" ;mail-02.do-ams3.eth.beta
:name "Status mailserver B"
:password inbox-password
:address "enode://7aa648d6e855950b2e3d3bf220c496e0cae4adfddef3e1e6062e6b177aec93bc6cdcf1282cb40d1656932ebfdd565729da440368d7c4da7dbd4d004b1ac02bf8@206.189.243.169:30504"}
"mailserver-c" {:id "mailserver-c" ;mail-03.do-ams3.eth.beta
:name "Status mailserver C"
:password inbox-password
:address "enode://8a64b3c349a2e0ef4a32ea49609ed6eb3364be1110253c20adc17a3cebbc39a219e5d3e13b151c0eee5d8e0f9a8ba2cd026014e67b41a4ab7d1d5dd67ca27427@206.189.243.168:30504"}
"mailserver-d" {:id "mailserver-d" ;mail-01.gc-us-central1-a.eth.beta
:name "Status mailserver D"
:password inbox-password
:address "enode://7de99e4cb1b3523bd26ca212369540646607c721ad4f3e5c821ed9148150ce6ce2e72631723002210fac1fd52dfa8bbdf3555e05379af79515e1179da37cc3db@35.188.19.210:30504"}
"mailserver-e" {:id "mailserver-e" ;mail-02.gc-us-central1-a.eth.beta
:name "Status mailserver E"
:password inbox-password
:address "enode://015e22f6cd2b44c8a51bd7a23555e271e0759c7d7f52432719665a74966f2da456d28e154e836bee6092b4d686fe67e331655586c57b718be3997c1629d24167@35.226.21.19:30504"}
"mailserver-f" {:id "mailserver-f" ;mail-03.gc-us-central1-a.eth.beta
:name "Status mailserver F"
:password inbox-password
:address "enode://531e252ec966b7e83f5538c19bf1cde7381cc7949026a6e499b6e998e695751aadf26d4c98d5a4eabfb7cefd31c3c88d600a775f14ed5781520a88ecd25da3c6@35.225.227.79:30504"}}
:rinkeby {"mailserver-a" {:id "mailserver-a" ;mail-01.do-ams3.eth.beta
:name "Status mailserver A"
:password inbox-password
:address "enode://c42f368a23fa98ee546fd247220759062323249ef657d26d357a777443aec04db1b29a3a22ef3e7c548e18493ddaf51a31b0aed6079bd6ebe5ae838fcfaf3a49@206.189.243.162:30504"}
"mailserver-b" {:id "mailserver-b" ;mail-02.do-ams3.eth.beta
:name "Status mailserver B"
:password inbox-password
:address "enode://7aa648d6e855950b2e3d3bf220c496e0cae4adfddef3e1e6062e6b177aec93bc6cdcf1282cb40d1656932ebfdd565729da440368d7c4da7dbd4d004b1ac02bf8@206.189.243.169:30504"}
"mailserver-c" {:id "mailserver-c" ;mail-03.do-ams3.eth.beta
:name "Status mailserver C"
:password inbox-password
:address "enode://8a64b3c349a2e0ef4a32ea49609ed6eb3364be1110253c20adc17a3cebbc39a219e5d3e13b151c0eee5d8e0f9a8ba2cd026014e67b41a4ab7d1d5dd67ca27427@206.189.243.168:30504"}
"mailserver-d" {:id "mailserver-d" ;mail-01.gc-us-central1-a.eth.beta
:name "Status mailserver D"
:password inbox-password
:address "enode://7de99e4cb1b3523bd26ca212369540646607c721ad4f3e5c821ed9148150ce6ce2e72631723002210fac1fd52dfa8bbdf3555e05379af79515e1179da37cc3db@35.188.19.210:30504"}
"mailserver-e" {:id "mailserver-e" ;mail-02.gc-us-central1-a.eth.beta
:name "Status mailserver E"
:password inbox-password
:address "enode://015e22f6cd2b44c8a51bd7a23555e271e0759c7d7f52432719665a74966f2da456d28e154e836bee6092b4d686fe67e331655586c57b718be3997c1629d24167@35.226.21.19:30504"}
"mailserver-f" {:id "mailserver-f" ;mail-03.gc-us-central1-a.eth.beta
:name "Status mailserver F"
:password inbox-password
:address "enode://531e252ec966b7e83f5538c19bf1cde7381cc7949026a6e499b6e998e695751aadf26d4c98d5a4eabfb7cefd31c3c88d600a775f14ed5781520a88ecd25da3c6@35.225.227.79:30504"}}})
{"eth.beta" {"mailserver-a" {:id "mailserver-a" ;mail-01.do-ams3.eth.beta
:name "Status mailserver A"
:password inbox-password
:address "enode://c42f368a23fa98ee546fd247220759062323249ef657d26d357a777443aec04db1b29a3a22ef3e7c548e18493ddaf51a31b0aed6079bd6ebe5ae838fcfaf3a49@206.189.243.162:30504"}
"mailserver-b" {:id "mailserver-b" ;mail-02.do-ams3.eth.beta
:name "Status mailserver B"
:password inbox-password
:address "enode://7aa648d6e855950b2e3d3bf220c496e0cae4adfddef3e1e6062e6b177aec93bc6cdcf1282cb40d1656932ebfdd565729da440368d7c4da7dbd4d004b1ac02bf8@206.189.243.169:30504"}
"mailserver-c" {:id "mailserver-c" ;mail-03.do-ams3.eth.beta
:name "Status mailserver C"
:password inbox-password
:address "enode://8a64b3c349a2e0ef4a32ea49609ed6eb3364be1110253c20adc17a3cebbc39a219e5d3e13b151c0eee5d8e0f9a8ba2cd026014e67b41a4ab7d1d5dd67ca27427@206.189.243.168:30504"}
"mailserver-d" {:id "mailserver-d" ;mail-01.gc-us-central1-a.eth.beta
:name "Status mailserver D"
:password inbox-password
:address "enode://7de99e4cb1b3523bd26ca212369540646607c721ad4f3e5c821ed9148150ce6ce2e72631723002210fac1fd52dfa8bbdf3555e05379af79515e1179da37cc3db@35.188.19.210:30504"}
"mailserver-e" {:id "mailserver-e" ;mail-02.gc-us-central1-a.eth.beta
:name "Status mailserver E"
:password inbox-password
:address "enode://015e22f6cd2b44c8a51bd7a23555e271e0759c7d7f52432719665a74966f2da456d28e154e836bee6092b4d686fe67e331655586c57b718be3997c1629d24167@35.226.21.19:30504"}
"mailserver-f" {:id "mailserver-f" ;mail-03.gc-us-central1-a.eth.beta
:name "Status mailserver F"
:password inbox-password
:address "enode://531e252ec966b7e83f5538c19bf1cde7381cc7949026a6e499b6e998e695751aadf26d4c98d5a4eabfb7cefd31c3c88d600a775f14ed5781520a88ecd25da3c6@35.225.227.79:30504"}}
"eth.staging" {"mailserver-a" {:id "mailserver-a" ;mail-01.gc-us-central1-a.eth.staging
:name "Status mailserver A"
:password inbox-password
:address "enode://e4fc10c1f65c8aed83ac26bc1bfb21a45cc1a8550a58077c8d2de2a0e0cd18e40fd40f7e6f7d02dc6cd06982b014ce88d6e468725ffe2c138e958788d0002a7f@35.239.193.41:30504"}
"mailserver-b" {:id "mailserver-b" ;mail-01.do-ams3.eth.staging
:name "Status mailserver B"
:password inbox-password
:address "enode://69f72baa7f1722d111a8c9c68c39a31430e9d567695f6108f31ccb6cd8f0adff4991e7fdca8fa770e75bc8a511a87d24690cbc80e008175f40c157d6f6788d48@206.189.240.16:30504"}
"mailserver-c" {:id "mailserver-c" ;mail-01.ac-cn-hongkong-c.eth.staging
:name "Status mailserver C"
:password inbox-password
:address "enode://b74859176c9751d314aeeffc26ec9f866a412752e7ddec91b19018a18e7cca8d637cfe2cedcb972f8eb64d816fbd5b4e89c7e8c7fd7df8a1329fa43db80b0bfe@47.75.159.188:30504"}}
"eth.test" {"mailserver-a" {:id "mailserver-a" ;mail-01.gc-us-central1-a.eth.test
:name "Status mailserver A"
:password inbox-password
:address "enode://707e57453acd3e488c44b9d0e17975371e2f8fb67525eae5baca9b9c8e06c86cde7c794a6c2e36203bf9f56cae8b0e50f3b33c4c2b694a7baeea1754464ce4e3@35.192.229.172:30504"}
"mailserver-b" {:id "mailserver-b" ;mail-01.do-ams3.eth.test
:name "Status mailserver B"
:password inbox-password
:address "enode://e4865fe6c2a9c1a563a6447990d8e9ce672644ae3e08277ce38ec1f1b690eef6320c07a5d60c3b629f5d4494f93d6b86a745a0bf64ab295bbf6579017adc6ed8@206.189.243.161:30504"}
"mailserver-c" {:id "mailserver-c" ;mail-01.ac-cn-hongkong-c.eth.test
:name "Status mailserver C"
:password inbox-password
:address "enode://954c06603a6e755bffe9992615f4755848bda9aadda74d920aa31d1d8e4f6022dc556dca6768f8a0f9459f57b729509db3c8b3bb80acfbd8a2123087f6cbd7bd@47.52.251.180:30504"}}})
(def default-wnodes
(assoc default-wnodes-without-custom :custom (:testnet default-wnodes-without-custom)))
;; We use the same set of mailservers for every network now
;; They are only dependent on the selected fleet (test, stage, beta)
(let [nodes-for-fleet (get default-wnodes-without-custom config/fleet)]
{:custom nodes-for-fleet
:testnet nodes-for-fleet
:mainnet nodes-for-fleet
:rinkeby nodes-for-fleet}))
(defn default-account-settings []
{:wallet {:visible-tokens {:testnet #{:STT :HND}
@ -268,4 +250,4 @@
(def ^:const status-api-request "status-api-request")
(def ^:const history-state-changed "history-state-changed")
(def ^:const web3-send-async "web3-send-async")
(def ^:const web3-send-async-callback "web3-send-async-callback")
(def ^:const web3-send-async-callback "web3-send-async-callback")

View File

@ -3,8 +3,8 @@
(def adjust-resize 16)
(defn start-node [config]
(native-module/start-node config))
(defn start-node [config fleet]
(native-module/start-node config fleet))
(defn stop-node []
(native-module/stop-node))

View File

@ -58,9 +58,9 @@
(when status
(call-module #(.stopNode status))))
(defn start-node [config]
(defn start-node [config fleet]
(when status
(call-module #(.startNode status config))))
(call-module #(.startNode status config fleet))))
(defonce account-creation? (atom false))
@ -136,4 +136,4 @@
(defn is24Hour []
(when status
(.-is24Hour status)))
(.-is24Hour status)))

View File

@ -110,7 +110,7 @@
(re-frame/reg-fx
:initialize-geth-fx
(fn [config]
(status/start-node (types/clj->json config))))
(status/start-node (types/clj->json config) config/fleet)))
(re-frame/reg-fx
::status-module-initialized-fx

View File

@ -26,6 +26,7 @@
string/lower-case
keyword))
(def fleet (get-config :FLEET "eth.beta"))
(def add-custom-mailservers-enabled? (enabled? (get-config :ADD_CUSTOM_MAILSERVERS_ENABLED "1")))
(def rn-bridge-threshold-warnings-enabled? (enabled? (get-config :RN_BRIDGE_THRESHOLD_WARNINGS 0)))
(def default-network (get-config :DEFAULT_NETWORK))