283 lines
7.5 KiB
Nim
283 lines
7.5 KiB
Nim
import # std libs
|
|
json, os, sequtils, strutils
|
|
|
|
const GENERATED* = "generated"
|
|
const SEED* = "seed"
|
|
const KEY* = "key"
|
|
const WATCH* = "watch"
|
|
|
|
const ZERO_ADDRESS* = "0x0000000000000000000000000000000000000000"
|
|
|
|
const PATH_WALLET_ROOT* = "m/44'/60'/0'/0"
|
|
# EIP1581 Root Key, the extended key from which any whisper key/encryption key can be derived
|
|
const PATH_EIP_1581* = "m/43'/60'/1581'"
|
|
# BIP44-0 Wallet key, the default wallet key
|
|
const PATH_DEFAULT_WALLET* = PATH_WALLET_ROOT & "/0"
|
|
# EIP1581 Chat Key 0, the default whisper key
|
|
const PATH_WHISPER* = PATH_EIP_1581 & "/0'/0"
|
|
|
|
# set via `nim c` param `-d:INFURA_TOKEN:[token]`; should be set in CI/release builds
|
|
const INFURA_TOKEN {.strdefine.} = ""
|
|
# allow runtime override via environment variable; core contributors can set a
|
|
# release token in this way for local development
|
|
let INFURA_TOKEN_ENV = $getEnv("INFURA_TOKEN")
|
|
|
|
let INFURA_TOKEN_RESOLVED =
|
|
if INFURA_TOKEN_ENV != "":
|
|
INFURA_TOKEN_ENV
|
|
else:
|
|
INFURA_TOKEN
|
|
|
|
let DEFAULT_NETWORKS* = %* [
|
|
{
|
|
"id": "testnet_rpc",
|
|
"etherscan-link": "https://ropsten.etherscan.io/address/",
|
|
"name": "Ropsten with upstream RPC",
|
|
"config": {
|
|
"NetworkId": 3,
|
|
"DataDir": "/ethereum/testnet_rpc",
|
|
"UpstreamConfig": {
|
|
"Enabled": true,
|
|
"URL": "https://ropsten.infura.io/v3/" & INFURA_TOKEN_RESOLVED
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "rinkeby_rpc",
|
|
"etherscan-link": "https://rinkeby.etherscan.io/address/",
|
|
"name": "Rinkeby with upstream RPC",
|
|
"config": {
|
|
"NetworkId": 4,
|
|
"DataDir": "/ethereum/rinkeby_rpc",
|
|
"UpstreamConfig": {
|
|
"Enabled": true,
|
|
"URL": "https://rinkeby.infura.io/v3/" & INFURA_TOKEN_RESOLVED
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "goerli_rpc",
|
|
"etherscan-link": "https://goerli.etherscan.io/address/",
|
|
"name": "Goerli with upstream RPC",
|
|
"config": {
|
|
"NetworkId": 5,
|
|
"DataDir": "/ethereum/goerli_rpc",
|
|
"UpstreamConfig": {
|
|
"Enabled": true,
|
|
"URL": "https://goerli.blockscout.com/"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "mainnet_rpc",
|
|
"etherscan-link": "https://etherscan.io/address/",
|
|
"name": "Mainnet with upstream RPC",
|
|
"config": {
|
|
"NetworkId": 1,
|
|
"DataDir": "/ethereum/mainnet_rpc",
|
|
"UpstreamConfig": {
|
|
"Enabled": true,
|
|
"URL": "https://mainnet.infura.io/v3/" & INFURA_TOKEN_RESOLVED
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "xdai_rpc",
|
|
"name": "xDai Chain",
|
|
"config": {
|
|
"NetworkId": 100,
|
|
"DataDir": "/ethereum/xdai_rpc",
|
|
"UpstreamConfig": {
|
|
"Enabled": true,
|
|
"URL": "https://dai.poa.network"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "poa_rpc",
|
|
"name": "POA Network",
|
|
"config": {
|
|
"NetworkId": 99,
|
|
"DataDir": "/ethereum/poa_rpc",
|
|
"UpstreamConfig": {
|
|
"Enabled": true,
|
|
"URL": "https://core.poa.network"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
|
|
var NODE_CONFIG* = %* {
|
|
"BrowsersConfig": {
|
|
"Enabled": true
|
|
},
|
|
"ClusterConfig": {
|
|
"Enabled": true
|
|
},
|
|
"DataDir": "./ethereum/mainnet",
|
|
"EnableNTPSync": true,
|
|
"KeyStoreDir": "./keystore",
|
|
# TODO: commented since it's not necessary (we do the connections thru C bindings). Enable it thru an option once status-nodes are able to be configured in desktop
|
|
#"ListenAddr": ":30304",
|
|
"LogEnabled": true,
|
|
"LogFile": "geth.log",
|
|
"LogLevel": "INFO",
|
|
"MailserversConfig": {
|
|
"Enabled": true
|
|
},
|
|
"Name": "StatusDesktop",
|
|
"NetworkId": 1,
|
|
"NoDiscovery": false,
|
|
"PermissionsConfig": {
|
|
"Enabled": true
|
|
},
|
|
"Rendezvous": true,
|
|
"RegisterTopics": @["whispermail"],
|
|
"RequireTopics": {
|
|
"whisper": {
|
|
"Max": 2,
|
|
"Min": 2
|
|
}
|
|
},
|
|
"ShhextConfig": {
|
|
"BackupDisabledDataDir": "./",
|
|
"DataSyncEnabled": true,
|
|
"InstallationID": "aef27732-8d86-5039-a32e-bdbe094d8791",
|
|
"MailServerConfirmations": true,
|
|
"MaxMessageDeliveryAttempts": 6,
|
|
"PFSEnabled": true,
|
|
"VerifyENSContractAddress": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
|
|
"VerifyENSURL": "https://mainnet.infura.io/v3/" & INFURA_TOKEN_RESOLVED,
|
|
"VerifyTransactionChainID": 1,
|
|
"VerifyTransactionURL": "https://mainnet.infura.io/v3/" & INFURA_TOKEN_RESOLVED
|
|
},
|
|
"StatusAccountsConfig": {
|
|
"Enabled": true
|
|
},
|
|
"UpstreamConfig": {
|
|
"Enabled": true,
|
|
"URL": "https://mainnet.infura.io/v3/" & INFURA_TOKEN_RESOLVED
|
|
},
|
|
"WakuConfig": {
|
|
"BloomFilterMode": true,
|
|
"Enabled": true,
|
|
"LightClient": true,
|
|
"MinimumPoW": 0.001
|
|
},
|
|
"WakuV2Config": {
|
|
"Enabled": false,
|
|
"Host": "0.0.0.0",
|
|
"Port": 0,
|
|
"LightClient": false,
|
|
"DiscoveryLimit": 20
|
|
},
|
|
"WalletConfig": {
|
|
"Enabled": true
|
|
},
|
|
"Networks": [
|
|
{
|
|
"chainId": 1,
|
|
"chainName": "Ethereum Mainnet",
|
|
"rpcUrl": "https://mainnet.infura.io/v3/" & INFURA_TOKEN_RESOLVED,
|
|
"blockExplorerUrl": "https://etherscan.io/",
|
|
"iconUrl": "",
|
|
"nativeCurrencyName": "Ether",
|
|
"nativeCurrencySymbol": "ETH",
|
|
"nativeCurrencyDecimals": 18,
|
|
"isTest": false,
|
|
"layer": 1,
|
|
"enabled": true,
|
|
},
|
|
{
|
|
"chainId": 3,
|
|
"chainName": "Ropsten",
|
|
"rpcUrl": "https://ropsten.infura.io/v3/" & INFURA_TOKEN_RESOLVED,
|
|
"blockExplorerUrl": "https://ropsten.etherscan.io/",
|
|
"iconUrl": "",
|
|
"nativeCurrencyName": "Ether",
|
|
"nativeCurrencySymbol": "ETH",
|
|
"nativeCurrencyDecimals": 18,
|
|
"isTest": true,
|
|
"layer": 1,
|
|
"enabled": false,
|
|
},
|
|
{
|
|
"chainId": 4,
|
|
"chainName": "Rinkeby",
|
|
"rpcUrl": "https://rinkeby.infura.io/v3/" & INFURA_TOKEN_RESOLVED,
|
|
"blockExplorerUrl": "https://rinkeby.etherscan.io/",
|
|
"iconUrl": "",
|
|
"nativeCurrencyName": "Ether",
|
|
"nativeCurrencySymbol": "ETH",
|
|
"nativeCurrencyDecimals": 18,
|
|
"isTest": true,
|
|
"layer": 1,
|
|
"enabled": false,
|
|
},
|
|
{
|
|
"chainId": 5,
|
|
"chainName": "Goerli",
|
|
"rpcUrl": "http://goerli.blockscout.com/",
|
|
"blockExplorerUrl": "https://goerli.etherscan.io/",
|
|
"iconUrl": "",
|
|
"nativeCurrencyName": "Ether",
|
|
"nativeCurrencySymbol": "ETH",
|
|
"nativeCurrencyDecimals": 18,
|
|
"isTest": true,
|
|
"layer": 1,
|
|
"enabled": false,
|
|
},
|
|
{
|
|
"chainId": 10,
|
|
"chainName": "Optimistic Ethereum",
|
|
"rpcUrl": "https://mainnet.infura.io/v3/" & INFURA_TOKEN_RESOLVED,
|
|
"blockExplorerUrl": "https://optimistic.etherscan.io",
|
|
"iconUrl": "",
|
|
"nativeCurrencyName": "Ether",
|
|
"nativeCurrencySymbol": "ETH",
|
|
"nativeCurrencyDecimals": 18,
|
|
"isTest": false,
|
|
"layer": 2,
|
|
"enabled": true,
|
|
}
|
|
]
|
|
}
|
|
|
|
const DEFAULT_NETWORK_NAME* = "mainnet_rpc"
|
|
|
|
const sep = when defined(windows): "\\" else: "/"
|
|
|
|
proc defaultDataDir(): string =
|
|
let homeDir = getHomeDir()
|
|
let parentDir =
|
|
if defined(development):
|
|
parentDir(getAppDir())
|
|
elif homeDir == "":
|
|
getCurrentDir()
|
|
elif defined(macosx):
|
|
joinPath(homeDir, "Library", "Application Support")
|
|
elif defined(windows):
|
|
let targetDir = getEnv("LOCALAPPDATA").string
|
|
if targetDir == "":
|
|
joinPath(homeDir, "AppData", "Local")
|
|
else:
|
|
targetDir
|
|
else:
|
|
let targetDir = getEnv("XDG_CONFIG_HOME").string
|
|
if targetDir == "":
|
|
joinPath(homeDir, ".config")
|
|
else:
|
|
targetDir
|
|
absolutePath(joinPath(parentDir, "Status"))
|
|
|
|
|
|
proc ensureDirectories*(dataDir, tmpDir, logDir: string) =
|
|
createDir(dataDir)
|
|
createDir(tmpDir)
|
|
createDir(logDir)
|
|
|
|
# C Helpers
|
|
# ==============================================================================
|
|
proc ensureDirectories*(dataDir, tmpDir, logDir: cstring) {.exportc, dynlib.} =
|
|
ensureDirectories($dataDir, $tmpDir, $logDir)
|