Compare commits
257 Commits
harmony-va
...
blast-ethe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55f16856cf | ||
|
|
06c87462a6 | ||
|
|
894e464af8 | ||
|
|
bac89dcd18 | ||
|
|
5c68b48267 | ||
|
|
12625e82b0 | ||
|
|
d5049475cd | ||
|
|
e1edc72d4e | ||
|
|
8e5368e211 | ||
|
|
8063a81d4d | ||
|
|
564d265a91 | ||
|
|
fce36dc430 | ||
|
|
91dcdc706b | ||
|
|
e9195f2c1a | ||
|
|
ee1707bf0f | ||
|
|
c9ae74831e | ||
|
|
b81e637fcf | ||
|
|
4d4b9060c6 | ||
|
|
03ce92bfc1 | ||
|
|
b2de047014 | ||
|
|
2b6e1020aa | ||
|
|
208fcfbf53 | ||
|
|
4f282a205a | ||
|
|
8f5a05c6a9 | ||
|
|
015670c2ce | ||
|
|
ff8791e6fc | ||
|
|
e4056bc0c3 | ||
|
|
c7656c6fd8 | ||
|
|
a6bc330a97 | ||
|
|
e8267ff402 | ||
|
|
078b88cd16 | ||
|
|
1b228c0c35 | ||
|
|
6db5e213eb | ||
|
|
6011dac0ce | ||
|
|
edb8d2bfc5 | ||
|
|
e33d3a5d85 | ||
|
|
c894badf77 | ||
|
|
971e5ee6f9 | ||
|
|
6211f15994 | ||
|
|
eba55b0098 | ||
|
|
97f3bb4644 | ||
|
|
ac25454915 | ||
|
|
a59dbb66dc | ||
|
|
80cc6ce977 | ||
|
|
5e3263dec3 | ||
|
|
aab7c74474 | ||
|
|
115916a9f9 | ||
|
|
9cf3c5b71e | ||
|
|
a12453aa1d | ||
|
|
adfff835d1 | ||
|
|
4fdba5f39a | ||
|
|
5a89240a61 | ||
|
|
4b40259c93 | ||
|
|
79e58187f1 | ||
|
|
cca28c35a7 | ||
|
|
7163d7e630 | ||
|
|
81f70d04c2 | ||
|
|
7f5b7fbec6 | ||
|
|
2f4a4011f8 | ||
|
|
0553baaac8 | ||
|
|
4a8b3a4cc1 | ||
|
|
31cda87d29 | ||
|
|
eaae1ef854 | ||
|
|
e91ef6a623 | ||
|
|
5073b5543c | ||
|
|
ef6c33b3b4 | ||
|
|
44d6000048 | ||
|
|
a8a60fb947 | ||
|
|
badd46c679 | ||
|
|
d7d4acbb58 | ||
|
|
80d7e588b6 | ||
|
|
7a37728c8b | ||
|
|
16d1a1abce | ||
|
|
066b7be393 | ||
|
|
8c4e29d98b | ||
|
|
63beaf9258 | ||
|
|
9e0b47a9fc | ||
|
|
2ab055e7a8 | ||
|
|
d30accaa19 | ||
|
|
48fdbf0aac | ||
|
|
989d2c06c8 | ||
|
|
04d4dd003f | ||
|
|
be497cfcaf | ||
|
|
3dbdefe715 | ||
|
|
303dcdca99 | ||
|
|
cfb4490a6d | ||
|
|
d5e5288bd2 | ||
|
|
1b0de278ae | ||
|
|
0fbcaf1c7e | ||
|
|
0ac21e3c4e | ||
|
|
b693c45ddd | ||
|
|
460478c6a2 | ||
|
|
0136227b4c | ||
|
|
f6d85e4014 | ||
|
|
22c91bf68c | ||
|
|
a50380028f | ||
|
|
1c8dd77738 | ||
|
|
ffd67953f7 | ||
|
|
8a483e88fa | ||
|
|
529a5f00f4 | ||
|
|
e66fe77265 | ||
|
|
ae3dc849e4 | ||
|
|
fabe1aa013 | ||
|
|
0ccb87cb94 | ||
|
|
ea12105a03 | ||
|
|
76b214e5bf | ||
|
|
1a9e41eca3 | ||
|
|
1f5d23a1a9 | ||
|
|
9554eaa726 | ||
|
|
fae11760d2 | ||
|
|
417f01da21 | ||
|
|
b6f1f4f2ab | ||
|
|
7c81a895d5 | ||
|
|
ba0674fcb1 | ||
|
|
6abd3efb95 | ||
|
|
5d7e8809e3 | ||
|
|
499dcdd4c4 | ||
|
|
be27baa9e5 | ||
|
|
7410de9dcf | ||
|
|
b966320f77 | ||
|
|
dbdb6e963c | ||
|
|
7235941152 | ||
|
|
2d7342c91a | ||
|
|
e3b2558333 | ||
|
|
b625adc085 | ||
|
|
8a6cd18038 | ||
|
|
1b1913d335 | ||
|
|
a825b27ccd | ||
|
|
8665068892 | ||
|
|
b4a68effbc | ||
|
|
0567c540ce | ||
|
|
a24a94df2b | ||
|
|
7108f5521b | ||
|
|
ca8ec01603 | ||
|
|
9a0e0e7e6c | ||
|
|
5244b20f21 | ||
|
|
b108e7ad9a | ||
|
|
2242491f83 | ||
|
|
6206fed2f8 | ||
|
|
1f9087aee2 | ||
|
|
20059b3ebf | ||
|
|
e70a7d78ab | ||
|
|
f757bb53d9 | ||
|
|
d4439b4cd4 | ||
|
|
6e0abad03c | ||
|
|
8647d4467d | ||
|
|
593d610461 | ||
|
|
569f5c3f9b | ||
|
|
355c998d60 | ||
|
|
52aa024568 | ||
|
|
5b024c9a36 | ||
|
|
d06f8949bf | ||
|
|
0f6ad2bca8 | ||
|
|
aed1577472 | ||
|
|
805e283687 | ||
|
|
97eb058ecf | ||
|
|
9aea8d8c8a | ||
|
|
e5ae6029c2 | ||
|
|
822f21eea8 | ||
|
|
fea3390ef3 | ||
|
|
839da8855c | ||
|
|
10bb09a8cc | ||
|
|
b09445ffae | ||
|
|
8ac4b09771 | ||
|
|
3d2f33309a | ||
|
|
27862bf4c9 | ||
|
|
e847bfa9fc | ||
|
|
8055376766 | ||
|
|
515be43181 | ||
|
|
ae1597fb53 | ||
|
|
d174d77c0d | ||
|
|
30bedc0c15 | ||
|
|
d2782e3433 | ||
|
|
38c14d7d9b | ||
|
|
e825e4fa37 | ||
|
|
dc7998aa74 | ||
|
|
431b9430e2 | ||
|
|
34a209dee9 | ||
|
|
1a0b185def | ||
|
|
aae8cc43f9 | ||
|
|
8775a70590 | ||
|
|
33705263e3 | ||
|
|
a34dc194a1 | ||
|
|
5d377d0e51 | ||
|
|
b01b21f271 | ||
|
|
fe28278076 | ||
|
|
f95d277640 | ||
|
|
770e777e15 | ||
|
|
41848d2dc1 | ||
|
|
f722a9e4ca | ||
|
|
c646654d65 | ||
|
|
2310f4bb02 | ||
|
|
9d3c09e499 | ||
|
|
160da9ebea | ||
|
|
cf2a242872 | ||
|
|
4c18e0e983 | ||
|
|
05de20ee72 | ||
|
|
74a9f8ac7f | ||
|
|
8e55c751f8 | ||
|
|
c046563bef | ||
|
|
dd0e402511 | ||
|
|
9de6badecc | ||
|
|
cc02077bf4 | ||
|
|
115c4fd30f | ||
|
|
b24601f47a | ||
|
|
297d2be210 | ||
|
|
5f36d3920b | ||
|
|
b80cd5f40d | ||
|
|
26a0c276f3 | ||
|
|
fae0461504 | ||
|
|
9673c5223b | ||
|
|
faa4c41b89 | ||
|
|
00b8453faf | ||
|
|
7f3824b5f9 | ||
|
|
7ab717dc91 | ||
|
|
e76bf13833 | ||
|
|
633227fb49 | ||
|
|
f89e002d9a | ||
|
|
7c082289f9 | ||
|
|
d24d7b45a3 | ||
|
|
33e2908492 | ||
|
|
b10221e068 | ||
|
|
766caca32d | ||
|
|
892c5eb1e6 | ||
|
|
7f1cb0474e | ||
|
|
a28269caee | ||
|
|
2bf10202ae | ||
|
|
629a72f068 | ||
|
|
8713748aad | ||
|
|
fe828e0645 | ||
|
|
93afe6ccae | ||
|
|
a77d152f8d | ||
|
|
d620891dff | ||
|
|
4a5ef8721e | ||
|
|
2f48795651 | ||
|
|
623c458776 | ||
|
|
224326487c | ||
|
|
b935d3e71f | ||
|
|
459e253686 | ||
|
|
7a07b719a8 | ||
|
|
5c06b75b12 | ||
|
|
165a7426d1 | ||
|
|
147d398067 | ||
|
|
bf8653ae6c | ||
|
|
7ca937a745 | ||
|
|
785aac52c5 | ||
|
|
c70dc42833 | ||
|
|
e18d3bd2be | ||
|
|
52adfce138 | ||
|
|
b5dc667a1c | ||
|
|
8a7fa9ef6f | ||
|
|
11ac3d9f0a | ||
|
|
a66da89fdb | ||
|
|
1d03732438 | ||
|
|
70b1ccb458 | ||
|
|
b119d8da26 | ||
|
|
6ddc7d5926 |
26
README.md
26
README.md
@@ -1,20 +1,20 @@
|
||||
Place val.key and val.pass into ./harmony/keyfiles
|
||||
|
||||
### Docs
|
||||
|
||||
.envs:
|
||||
|
||||
xdai:
|
||||
```
|
||||
docker-compose up -d
|
||||
```
|
||||
Check if Bootstrap is working.
|
||||
```
|
||||
docker logs -f pokt_dokt_harmony-mainnet_1
|
||||
```
|
||||
Logs are at:
|
||||
```
|
||||
harmony/log
|
||||
XDAI_RPC_URL=http://xdai-archive:8545
|
||||
PUBLIC_IP=
|
||||
TARGET_PEERS=80
|
||||
```
|
||||
|
||||
HARMONY QUERY
|
||||
TODO:
|
||||
|
||||
```
|
||||
curl --location --request POST 'https://$DOMAIN/' --header 'Content-Type: application/json' --data-raw '{"jsonrpc": "2.0", "method": "hmy_latestHeader", "params": [], "id": 1}'
|
||||
auto-generate .jwtsecret for beacon-execution connection
|
||||
Fix wireguard chains network for pocket-frontends
|
||||
```
|
||||
|
||||
[HMY CLI Flags](https://docs.harmony.one/home/network/validators/node-setup/installing-updating/installing-node/using-binary#option-2-setup-using-flag-parsing)
|
||||
[Pocket Validator](README_POKT.md) </br>
|
||||
|
||||
76
README_POKT.md
Normal file
76
README_POKT.md
Normal file
@@ -0,0 +1,76 @@
|
||||
Tested on Ubuntu 20.04.3 LTS
|
||||
|
||||
#### Prerequisites:
|
||||
docker <br />
|
||||
docker-compose <br />
|
||||
DNS A-Record pointing to your server <br />
|
||||
Wireguard-Server: Paste wireguard wg0.conf from wireguard-server to wireguard/config/wg0.conf <br />
|
||||
.env File inside POKT-DOKT with secrets <br />
|
||||
|
||||
#### Usage
|
||||
|
||||
```
|
||||
git clone https://github.com/cventastic/POKT_DOKT.git
|
||||
cd POKT_DOKT
|
||||
git reset --hard origin/main && git pull && ./util/prepare.sh
|
||||
```
|
||||
|
||||
# EXAMPLES
|
||||
|
||||
Start POKT in relay mode:
|
||||
```
|
||||
command: pocket start --simulateRelay
|
||||
```
|
||||
If you want to activly relay. You also have to Stake! <br />
|
||||
Testnet-Faucet: (https://faucet.pokt.network/) <br />
|
||||
How to stake: https://docs.pokt.network/home/paths/node-runner#stake-the-validator <br />
|
||||
|
||||
POKT QUERY for simulate-relay mode:
|
||||
```
|
||||
Pockt-Testnet:
|
||||
curl -X POST --data '{"relay_network_id":"0002","payload":{"data":"{}","method":"POST","path":"v1/query/height","headers":{}}}' http://localhost:8082/v1/client/sim
|
||||
Pocket-Mainnet:
|
||||
curl -X POST --data '{"relay_network_id":"0001","payload":{"data":"{}","method":"POST","path":"v1/query/height","headers":{}}}' http://localhost:8081/v1/client/sim
|
||||
```
|
||||
|
||||
GETH QUERY (from whitelisted servers e.g pokt-test) for simulate-relay mode:
|
||||
```
|
||||
Pocket-Testnet:
|
||||
curl -X POST --data '{"relay_network_id":"0020","payload":{"data":"{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBalance\",\"params\":[\"0x1a8c807a6E4F624fCab01FEBf76a541d31B8345A\", \"latest\"],\"id\":1}","method":"POST","path":"","headers":{}}}' http://127.0.0.1:8082/v1/client/sim
|
||||
curl -v -X POST --data '{"relay_network_id":"0020","payload":{"data":"{\"jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":1}","method":"POST","path":"","headers":{}}}' http://127.0.0.1:8082/v1/client/sim
|
||||
Pocket-Mainnet:
|
||||
curl -X POST --data '{"relay_network_id":"0021","payload":{"data":"{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBalance\",\"params\":[\"0x1a8c807a6E4F624fCab01FEBf76a541d31B8345A\", \"latest\"],\"id\":1}","method":"POST","path":"","headers":{}}}' http://127.0.0.1:8081/v1/client/sim
|
||||
curl -v -X POST --data '{"relay_network_id":"0021","payload":{"data":"{\"jsonrpc\":\"2.0\",\"method\":\"eth_syncing\",\"params\":[],\"id\":1}","method":"POST","path":"","headers":{}}}' http://127.0.0.1:8081/v1/client/sim
|
||||
```
|
||||
|
||||
STANDARD GETH QUERY (from whitelistet server)
|
||||
```
|
||||
curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' https://$RPCNODE/goerli
|
||||
```
|
||||
|
||||
# SSL
|
||||
I you want to test SSL comment in:
|
||||
```
|
||||
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
```
|
||||
Check if there is a file here /traefic/letsencrypt/acme.json if yes, you have to delete it. <br />
|
||||
Otherwise traefik will not issue the certificate for an existing domain. <br />
|
||||
|
||||
#### TODO !!!!
|
||||
Bootstrapping from Snapshots <br />
|
||||
Link-Timezone into containers.
|
||||
|
||||
AVALANCHE:
|
||||
- Archive?
|
||||
- Monitoring https://docs.avax.network/build/tools/dashboards/README
|
||||
|
||||
### Notes
|
||||
#### Monitoring
|
||||
Telegram get group ids the bot is in:
|
||||
```curl -X POST https://api.telegram.org/bot$TELEGRAM_API_TOKEN/getUpdates```
|
||||
There has to be an event in the channel for the bot to get updates
|
||||
|
||||
### neue NODE
|
||||
.env
|
||||
rpc-timeout
|
||||
whitelist
|
||||
34
avalanche.yml
Normal file
34
avalanche.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
avalanche:
|
||||
image: avaplatform/avalanchego:v1.7.7
|
||||
expose:
|
||||
- "9650"
|
||||
- "9651"
|
||||
ports:
|
||||
- "9651:9651/tcp"
|
||||
- "9651:9651/udp"
|
||||
volumes:
|
||||
- avalanche:/root/.avalanchego
|
||||
- ./avalanche/configs/chains/C/config.json:/root/.avalanchego/configs/chains/C/config.json
|
||||
networks:
|
||||
- chains
|
||||
command: "/avalanchego/build/avalanchego --http-host="
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.avalanche-replacepath.replacepath.path=/ext/bc/C/rpc"
|
||||
- "traefik.http.middlewares.avalanche-stripprefix.stripprefix.prefixes=/avalanche"
|
||||
- "traefik.http.services.avalanche.loadbalancer.server.port=9650"
|
||||
- "traefik.http.routers.avalanche.entrypoints=websecure"
|
||||
- "traefik.http.routers.avalanche.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.avalanche.rule=Host(`$DOMAIN`) && PathPrefix(`/avalanche`)"
|
||||
- "traefik.http.routers.avalanche.middlewares=avalanche-stripprefix, avalanche-replacepath, ipwhitelist"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=9650"
|
||||
- "prometheus-scrape.job_name=avalanche"
|
||||
- "prometheus-scrape.metrics_path=/ext/metrics"
|
||||
|
||||
volumes:
|
||||
avalanche:
|
||||
43
avalanche/configs/chains/C/config.json
Normal file
43
avalanche/configs/chains/C/config.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"snowman-api-enabled": false,
|
||||
"coreth-admin-api-enabled": false,
|
||||
"coreth-admin-api-dir": "",
|
||||
"eth-apis": [
|
||||
"public-eth",
|
||||
"public-eth-filter",
|
||||
"net",
|
||||
"web3",
|
||||
"internal-public-eth",
|
||||
"internal-public-blockchain",
|
||||
"internal-public-transaction-pool",
|
||||
"internal-public-account"
|
||||
],
|
||||
"continuous-profiler-dir": "",
|
||||
"continuous-profiler-frequency": 900000000000,
|
||||
"continuous-profiler-max-files": 5,
|
||||
"rpc-gas-cap": 50000000,
|
||||
"rpc-tx-fee-cap": 100,
|
||||
"preimages-enabled": false,
|
||||
"pruning-enabled": true,
|
||||
"snapshot-async": true,
|
||||
"snapshot-verification-enabled": false,
|
||||
"metrics-enabled": false,
|
||||
"metrics-expensive-enabled": false,
|
||||
"local-txs-enabled": false,
|
||||
"api-max-duration": 0,
|
||||
"ws-cpu-refill-rate": 0,
|
||||
"ws-cpu-max-stored": 0,
|
||||
"api-max-blocks-per-request": 0,
|
||||
"allow-unfinalized-queries": false,
|
||||
"allow-unprotected-txs": false,
|
||||
"keystore-directory": "",
|
||||
"keystore-external-signer": "",
|
||||
"keystore-insecure-unlock-allowed": false,
|
||||
"remote-tx-gossip-only-enabled": false,
|
||||
"tx-regossip-frequency": 60000000000,
|
||||
"tx-regossip-max-size": 15,
|
||||
"log-level": "debug",
|
||||
"offline-pruning-enabled": false,
|
||||
"offline-pruning-bloom-filter-size": 512,
|
||||
"offline-pruning-data-directory": ""
|
||||
}
|
||||
29
bsc.yml
Normal file
29
bsc.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
|
||||
binance-smart-chain:
|
||||
image: dysnix/bsc:v1.1.11
|
||||
expose:
|
||||
- "8545"
|
||||
- "8546"
|
||||
- "30303"
|
||||
volumes:
|
||||
- bsc_data:/datadir
|
||||
- ./bsc/config.toml:/config.toml
|
||||
command: "--cache 18000 --rpc --rpcaddr=\"0.0.0.0\" --rpc.allow-unprotected-txs --txlookuplimit 0 --syncmode snap --config /config.toml --datadir /datadir"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- chains
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.bsc-stripprefix.stripprefix.prefixes=/bsc"
|
||||
- "traefik.http.services.bsc.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.bsc.entrypoints=websecure"
|
||||
- "traefik.http.routers.bsc.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.bsc.rule=Host(`$DOMAIN`) && PathPrefix(`/bsc`)"
|
||||
- "traefik.http.routers.bsc.middlewares=bsc-stripprefix, ipwhitelist"
|
||||
|
||||
volumes:
|
||||
bsc_data:
|
||||
|
||||
65
bsc/config.toml
Normal file
65
bsc/config.toml
Normal file
@@ -0,0 +1,65 @@
|
||||
[Eth]
|
||||
NetworkId = 56
|
||||
NoPruning = false
|
||||
NoPrefetch = false
|
||||
LightPeers = 100
|
||||
UltraLightFraction = 75
|
||||
TrieTimeout = 100000000000
|
||||
EnablePreimageRecording = false
|
||||
EWASMInterpreter = ""
|
||||
EVMInterpreter = ""
|
||||
|
||||
[Eth.Miner]
|
||||
GasFloor = 30000000
|
||||
GasCeil = 40000000
|
||||
GasPrice = 1000000000
|
||||
Recommit = 10000000000
|
||||
Noverify = false
|
||||
|
||||
[Eth.TxPool]
|
||||
Locals = []
|
||||
NoLocals = true
|
||||
Journal = "transactions.rlp"
|
||||
Rejournal = 3600000000000
|
||||
PriceLimit = 1000000000
|
||||
PriceBump = 10
|
||||
AccountSlots = 512
|
||||
GlobalSlots = 10000
|
||||
AccountQueue = 256
|
||||
GlobalQueue = 5000
|
||||
Lifetime = 10800000000000
|
||||
|
||||
[Eth.GPO]
|
||||
Blocks = 20
|
||||
Percentile = 60
|
||||
OracleThreshold = 20
|
||||
|
||||
[Node]
|
||||
IPCPath = "geth.ipc"
|
||||
HTTPHost = "0.0.0.0"
|
||||
NoUSB = true
|
||||
InsecureUnlockAllowed = false
|
||||
HTTPPort = 8545
|
||||
HTTPVirtualHosts = ["*"]
|
||||
HTTPModules = ["eth", "net", "web3", "txpool", "parlia"]
|
||||
WSPort = 8546
|
||||
WSModules = ["net", "web3", "eth"]
|
||||
|
||||
[Node.P2P]
|
||||
MaxPeers = 30
|
||||
NoDiscovery = false
|
||||
BootstrapNodes = ["enode://1cc4534b14cfe351ab740a1418ab944a234ca2f702915eadb7e558a02010cb7c5a8c295a3b56bcefa7701c07752acd5539cb13df2aab8ae2d98934d712611443@52.71.43.172:30311","enode://28b1d16562dac280dacaaf45d54516b85bc6c994252a9825c5cc4e080d3e53446d05f63ba495ea7d44d6c316b54cd92b245c5c328c37da24605c4a93a0d099c4@34.246.65.14:30311","enode://5a7b996048d1b0a07683a949662c87c09b55247ce774aeee10bb886892e586e3c604564393292e38ef43c023ee9981e1f8b335766ec4f0f256e57f8640b079d5@35.73.137.11:30311"]
|
||||
StaticNodes = ["enode://ace8e3b7e96290392a9c6238e005539dd1d1ca7c18aeedd979087789812e0656407e2c4baabcd83b50d583b583aa959ff42e5c95571d76b84995aad722a9a85c@44.198.55.182:30311","enode://1cda8150a6fe7597ce9f97b9886bc7bda2c3f0b246b509a5783c7dae7e57f831c7288a801ad129d2ffac330494ba75f0f0f62e1d1eba3499feca4ee29c6ae087@3.215.117.86:30311","enode://4b32e474c1aa896c856b916f2feb7af4e49feb6f2ff355896473b44d6723e71a5602a610cc0839654ad2f031e5da6e210d880a4cd977a2ec76e64a95c13f49a3@18.206.147.221:30311","enode://6265fbbf7fc2978900abee29ab1f019ccbccaa22e4e1e07149f3607c7d680a1ba006e7bb5cf8901e26d07cad8140799832caa389fc2fe0e1c6db4fec76946c2e@18.233.226.171:30311","enode://bdbcb42ff17a52af7ac120f23ee86f525ffbd854ce76e54bad858cf741fcd524d0f810be399d437bea939682a919c5af5df31811c43ccc270d04485caf4ddaeb@52.206.226.126:30311","enode://93a47b4de28dfd716a3de5481a72916f326b7c31c137d72ac12950c61ec3ee143312d903dbfab916ac0d7a92fedad6fc6f646c16ea009ca893089c9c2f64ec83@18.204.55.80:30311","enode://bb851ac2001f47e7c9a5d08a2fafcfe483c5bd02865b3a25901f853cfaec297e1eded6a27f0c0b8fcb59891b6a0846ca92f54e05c1db4b1c9f4dbef5b66062f3@3.88.19.251:30311","enode://d54499eb86df0f28d91906cef4f648360b636f923d58567865b83508fb97d2e95d2ce3e3a594facb73230b9e19172a534ce5af3f528599d0d1e52632438aa864@44.200.226.84:30311","enode://2d55e48679442a9e3ef2a3edf2854dcb289f8162d57dbda1e82e7576b0708e0670befaa7255f5c9fa8389443a7e7b4ff762c9e7fd33ddf9f21ec9562f03e8945@18.212.135.123:30311","enode://9df97e190f0b82ba7891e0ed556f11f4c1a172c26b2e823e52cfe5722b3df3f1819d2acb87ed0bfeb21fe3aee4ef1ffb8c9227fa7fdf744bfd4f47caad461edf@54.81.89.198:30311"]
|
||||
ListenAddr = ":30311"
|
||||
EnableMsgEvents = false
|
||||
|
||||
[Node.HTTPTimeouts]
|
||||
ReadTimeout = 30000000000
|
||||
WriteTimeout = 30000000000
|
||||
IdleTimeout = 120000000000
|
||||
|
||||
[Node.LogConfig]
|
||||
FilePath = "bsc.log"
|
||||
MaxBytesSize = 10485760
|
||||
Level = "info"
|
||||
FileRoot = ""
|
||||
62
dshackle.yml
Normal file
62
dshackle.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
|
||||
dshackle:
|
||||
image: emeraldpay/dshackle:0.13.1
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./dshackle/config:/etc/dshackle # This should hold all your yaml files
|
||||
- ./dshackle/logs:/logs
|
||||
expose:
|
||||
- 8080 # /eth
|
||||
- 8081 # /metrics
|
||||
- 8082 # healthcheck
|
||||
- 2449 # grpc
|
||||
networks:
|
||||
- chains
|
||||
ports:
|
||||
- "127.0.0.1:8082:8082" # healthcheck
|
||||
- "127.0.0.1:8545:8080"
|
||||
environment:
|
||||
- ALCHEMY_KEY=${ALCHEMY_KEY}
|
||||
- ANYBLOCK_KEY=${ANYBLOCK_KEY}
|
||||
- CHAINSTACK_NODE=${CHAINSTACK_NODE}
|
||||
- CHAINSTACK_USERNAME=${CHAINSTACK_USERNAME}
|
||||
- CHAINSTACK_PASSWORD=${CHAINSTACK_PASSWORD}
|
||||
- COINBASE_USERNAME=${COINBASE_USERNAME}
|
||||
- COINBASE_PASSWORD=${COINBASE_PASSWORD}
|
||||
- INFURA_KEY=${INFURA_KEY}
|
||||
- RIVET_KEY=${RIVET_KEY}
|
||||
- QUICKNODE_HTTP=${QUICKNODE_HTTP}
|
||||
- QUICKNODE_WSS=${QUICKNODE_WSS}
|
||||
labels:
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8081"
|
||||
- "prometheus-scrape.job_name=dshackle"
|
||||
- "prometheus-scrape.metrics_path=/metrics"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.dshackle-stripprefix.stripprefix.prefixes=/eth-archive"
|
||||
- "traefik.http.middlewares.shackle-replacepath.replacepath.path=/eth"
|
||||
- "traefik.http.services.dshackle.loadbalancer.server.port=8080"
|
||||
- "traefik.http.routers.dshackle.entrypoints=websecure"
|
||||
- "traefik.http.routers.dshackle.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.dshackle.rule=Host(`$DOMAIN`) && PathPrefix(`/eth-archive`)"
|
||||
- "traefik.http.routers.dshackle.middlewares=dshackle-stripprefix, dshackle-replacepath, ipwhitelist"
|
||||
- "traefik.http.routers.dshackle.middlewares=dshackle-stripprefix, ipwhitelist"
|
||||
|
||||
redis:
|
||||
image: healthcheck/redis:alpine
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- chains
|
||||
environment:
|
||||
- REDIS_RAM=${REDIS_RAM}
|
||||
command:
|
||||
- "redis-server"
|
||||
- "--maxmemory ${REDIS_RAM}"
|
||||
- "--maxmemory-policy allkeys-lru"
|
||||
- '--save ""'
|
||||
|
||||
|
||||
|
||||
41
dshackle/config/alchemy.yaml
Normal file
41
dshackle/config/alchemy.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
upstreams:
|
||||
- id: alchemy
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 90
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
methods:
|
||||
enabled:
|
||||
# Manually Enabled
|
||||
- name: alchemy_getAssetTransfers
|
||||
- name: alchemy_getTokenAllowance
|
||||
- name: alchemy_getTokenBalances
|
||||
- name: alchemy_getTokenMetadata
|
||||
- name: eth_getFilterChanges
|
||||
- name: eth_getFilterLogs
|
||||
- name: eth_maxPriorityFeePerGas
|
||||
- name: eth_newBlockFilter
|
||||
- name: eth_newFilter
|
||||
- name: eth_newPendingTransactionFilter
|
||||
- name: eth_subscribe
|
||||
- name: eth_uninstallFilter
|
||||
- name: eth_unsubscribe
|
||||
- name: trace_block
|
||||
- name: trace_call
|
||||
- name: trace_callMany
|
||||
- name: trace_filter
|
||||
- name: trace_get
|
||||
- name: trace_rawTransaction
|
||||
- name: trace_replayBlockTransactions
|
||||
- name: trace_replayTransaction
|
||||
- name: trace_transaction
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_KEY}"
|
||||
ws:
|
||||
url: "wss://eth-mainnet.ws.alchemyapi.io/v2/${ALCHEMY_KEY}"
|
||||
|
||||
14
dshackle/config/ankr.yaml
Normal file
14
dshackle/config/ankr.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
upstreams:
|
||||
- id: ankr
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 80
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://rpc.ankr.com/eth"
|
||||
|
||||
14
dshackle/config/anyblock.yaml
Normal file
14
dshackle/config/anyblock.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
upstreams:
|
||||
- id: anyblock
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 70
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://api.anyblock.tools/ethereum/ethereum/mainnet/rpc/${ANYBLOCK_KEY}"
|
||||
|
||||
14
dshackle/config/avado.yaml
Normal file
14
dshackle/config/avado.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
upstreams:
|
||||
- id: avado
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 60
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://mainnet.eth.cloud.ava.do"
|
||||
|
||||
22
dshackle/config/chainstack.yaml
Normal file
22
dshackle/config/chainstack.yaml
Normal file
@@ -0,0 +1,22 @@
|
||||
upstreams:
|
||||
- id: chainstack
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 50
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://${CHAINSTACK_NODE}.p2pify.com"
|
||||
basic-auth:
|
||||
username: ${CHAINSTACK_USERNAME}
|
||||
password: ${CHAINSTACK_PASSWORD}
|
||||
ws:
|
||||
url: "wss://ws-${CHAINSTACK_NODE}.p2pify.com"
|
||||
basic-auth:
|
||||
username: ${CHAINSTACK_USERNAME}
|
||||
password: ${CHAINSTACK_PASSWORD}
|
||||
|
||||
14
dshackle/config/cloudflare.yaml
Normal file
14
dshackle/config/cloudflare.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
upstreams:
|
||||
- id: cloudflare
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 40
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://cloudflare-eth.com"
|
||||
|
||||
31
dshackle/config/coinbase.yaml
Normal file
31
dshackle/config/coinbase.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
upstreams:
|
||||
- id: coinbase
|
||||
chain: ethereum
|
||||
role: secondary
|
||||
priority: 30
|
||||
labels:
|
||||
provider: geth
|
||||
archive: false
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
methods:
|
||||
enabled:
|
||||
# Manually Enabled
|
||||
- name: coinbaseCloud_getBalances
|
||||
- name: coinbaseCloud_getSingleBalance
|
||||
- name: coinbaseCloud_getTokenAllowances
|
||||
- name: coinbaseCloud_getTransactionByHash
|
||||
- name: coinbaseCloud_getTransactionsByAddress
|
||||
- name: coinbaseCloud_getTokenTransfersByAddress
|
||||
- name: coinbaseCloud_getTokenMetadata
|
||||
- name: coinbaseCloud_getTokenStandardEvents
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://mainnet.ethereum.coinbasecloud.net"
|
||||
basic-auth:
|
||||
username: ${COINBASE_USERNAME}
|
||||
password: ${COINBASE_PASSWORD}
|
||||
|
||||
27
dshackle/config/de-1-erigon.yaml
Normal file
27
dshackle/config/de-1-erigon.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
upstreams:
|
||||
- id: de-1-erigon
|
||||
chain: ethereum
|
||||
labels:
|
||||
provider: stakesquid-de-1-erigon
|
||||
priority: 100
|
||||
methods:
|
||||
enabled:
|
||||
# Manually Enabled
|
||||
- name: trace_block
|
||||
- name: trace_call
|
||||
- name: trace_callMany
|
||||
- name: trace_filter
|
||||
- name: trace_get
|
||||
- name: trace_transaction
|
||||
disabled:
|
||||
- name: eth_chainId
|
||||
- name: eth_chainID
|
||||
- name: eth_chainid
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://rpc-de-1.stakesquid.eu/erigon"
|
||||
ws:
|
||||
frameSize: 20Mb
|
||||
msgSize: 50Mb
|
||||
url: "wss://rpc-de-1.stakesquid.eu/erigon"
|
||||
44
dshackle/config/de-4-mainnet.yaml
Normal file
44
dshackle/config/de-4-mainnet.yaml
Normal file
@@ -0,0 +1,44 @@
|
||||
upstreams:
|
||||
- id: de-4-mainnet
|
||||
chain: ethereum
|
||||
labels:
|
||||
provider: stakesquid-de-4-mainnet
|
||||
priority: 120
|
||||
methods:
|
||||
enabled:
|
||||
# Manually Enabled
|
||||
- name: eth_chainid
|
||||
- name: eth_chainId
|
||||
- name: eth_chainID
|
||||
disabled:
|
||||
- name: eth_blockNumber
|
||||
- name: eth_call
|
||||
- name: eth_estimateGas
|
||||
- name: eth_feeHistory
|
||||
- name: eth_gasPrice
|
||||
- name: eth_getBalance
|
||||
- name: eth_getBlockByHash
|
||||
- name: eth_getBlockByNumber
|
||||
- name: eth_getBlockTransactionCountByHash
|
||||
- name: eth_getBlockTransactionCountByNumber
|
||||
- name: eth_getCode
|
||||
- name: eth_getLogs
|
||||
- name: eth_getStorageAt
|
||||
- name: eth_getTransactionByBlockHashAndIndex
|
||||
- name: eth_getTransactionByBlockNumberAndIndex
|
||||
- name: eth_getTransactionByHash
|
||||
- name: eth_getTransactionCount
|
||||
- name: eth_getTransactionReceipt
|
||||
- name: eth_getUncleByBlockHashAndIndex
|
||||
- name: eth_getUncleByBlockNumberAndIndex
|
||||
- name: eth_getUncleCountByBlockHash
|
||||
- name: eth_getUncleCountByBlockNumber
|
||||
- name: eth_sendRawTransaction
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://rpc-de-4.stakesquid.eu/mainnet"
|
||||
ws:
|
||||
frameSize: 20Mb
|
||||
msgSize: 50Mb
|
||||
url: "wss://rpc-de-4.stakesquid.eu/mainnet"
|
||||
72
dshackle/config/dshackle.yaml
Normal file
72
dshackle/config/dshackle.yaml
Normal file
@@ -0,0 +1,72 @@
|
||||
host: 0.0.0.0
|
||||
port: 2449
|
||||
|
||||
tls:
|
||||
enabled: false
|
||||
|
||||
monitoring:
|
||||
enabled: true
|
||||
jvm: false
|
||||
extended: false
|
||||
prometheus:
|
||||
enabled: true
|
||||
bind: 0.0.0.0
|
||||
port: 8081
|
||||
path: /metrics
|
||||
|
||||
health:
|
||||
port: 8082
|
||||
host: 0.0.0.0
|
||||
path: /health
|
||||
blockchains:
|
||||
- chain: ethereum
|
||||
min-available: 1
|
||||
|
||||
cache:
|
||||
redis:
|
||||
enabled: true
|
||||
host: redis
|
||||
password: ""
|
||||
|
||||
proxy:
|
||||
host: 0.0.0.0
|
||||
port: 8080
|
||||
tls:
|
||||
enabled: false
|
||||
routes:
|
||||
- id: eth
|
||||
blockchain: ethereum
|
||||
|
||||
accessLog:
|
||||
enabled: true
|
||||
include-messages: true
|
||||
filename: /logs/access_log.jsonl
|
||||
|
||||
cluster:
|
||||
defaults:
|
||||
- chains:
|
||||
- ethereum
|
||||
options:
|
||||
min-peers: 10
|
||||
include:
|
||||
# Private Nodes
|
||||
#- "besu.yaml"
|
||||
#- "geth.yaml"
|
||||
#- "nethermind.yaml"
|
||||
#- "erigon.yaml"
|
||||
- "de-1-erigon.yaml"
|
||||
- "fi-1-erigon.yaml"
|
||||
#- "de-4-mainnet.yaml"
|
||||
# Freemium Nodes
|
||||
#- "alchemy.yaml"
|
||||
#- "anyblock.yaml"
|
||||
#- "chainstack.yaml"
|
||||
#- "coinbase.yaml"
|
||||
- "infura.yaml"
|
||||
#- "quicknode.yaml"
|
||||
#- "rivet.yaml"
|
||||
# Public Nodes
|
||||
#- "cloudflare.yaml"
|
||||
#- "avado.yaml"
|
||||
#- "ankr.yaml"
|
||||
|
||||
27
dshackle/config/fi-1-erigon.yaml
Normal file
27
dshackle/config/fi-1-erigon.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
upstreams:
|
||||
- id: fi-1-erigon
|
||||
chain: ethereum
|
||||
labels:
|
||||
provider: stakesquid-fi-1-erigon
|
||||
priority: 100
|
||||
methods:
|
||||
enabled:
|
||||
# Manually Enabled
|
||||
- name: trace_block
|
||||
- name: trace_call
|
||||
- name: trace_callMany
|
||||
- name: trace_filter
|
||||
- name: trace_get
|
||||
- name: trace_transaction
|
||||
disabled:
|
||||
- name: eth_chainId
|
||||
- name: eth_chainID
|
||||
- name: eth_chainid
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://rpc-fi-1.stakesquid.eu/erigon"
|
||||
ws:
|
||||
frameSize: 20Mb
|
||||
msgSize: 50Mb
|
||||
url: "wss://rpc-fi-1.stakesquid.eu/erigon"
|
||||
16
dshackle/config/infura.yaml
Normal file
16
dshackle/config/infura.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
upstreams:
|
||||
- id: infura
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 20
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://mainnet.infura.io/v3/${INFURA_KEY}"
|
||||
ws:
|
||||
url: "wss://mainnet.infura.io/ws/v3/${INFURA_KEY}"
|
||||
|
||||
29
dshackle/config/quicknode.yaml
Normal file
29
dshackle/config/quicknode.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
upstreams:
|
||||
- id: quicknode
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 140
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
methods:
|
||||
enabled:
|
||||
# Manually Enabled
|
||||
- name: qn_broadcastRawTransaction
|
||||
- name: qn_fetchNFTCollectionDetails
|
||||
- name: qn_fetchNFTs
|
||||
- name: qn_fetchNFTsByCollection
|
||||
- name: qn_getTokenMetadataByContractAddress
|
||||
- name: qn_getTokenMetadataBySymbol
|
||||
- name: qn_getTransfersByNFT
|
||||
- name: qn_getWalletTokenBalance
|
||||
- name: qn_getWalletTokenTransactions
|
||||
- name: qn_verifyNFTsOwner
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "${QUICKNODE_HTTP}"
|
||||
ws:
|
||||
url: "${QUICKNODE_WSS}"
|
||||
|
||||
16
dshackle/config/rivet.yaml
Normal file
16
dshackle/config/rivet.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
upstreams:
|
||||
- id: rivet
|
||||
chain: ethereum
|
||||
role: fallback
|
||||
priority: 10
|
||||
options:
|
||||
disable-validation: false
|
||||
validate-peers: false
|
||||
validate-syncing: true
|
||||
connection:
|
||||
ethereum:
|
||||
rpc:
|
||||
url: "https://${RIVET_KEY}.eth.rpc.rivet.cloud"
|
||||
ws:
|
||||
url: "wss://${RIVET_KEY}.eth.ws.rivet.cloud"
|
||||
|
||||
11
dynaconf/Dockerfile
Normal file
11
dynaconf/Dockerfile
Normal file
@@ -0,0 +1,11 @@
|
||||
from python:bullseye
|
||||
|
||||
|
||||
RUN pip install --upgrade pip
|
||||
RUN pip install flask
|
||||
RUN pip install flask_sqlalchemy
|
||||
|
||||
COPY src src
|
||||
|
||||
|
||||
CMD ["python", "-u", "src/app.py"]
|
||||
70
dynaconf/src/app.py
Normal file
70
dynaconf/src/app.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import copy
|
||||
from dataclasses import dataclass
|
||||
from flask import Flask, request, render_template, jsonify
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
import json
|
||||
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database/config.db'
|
||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = 'False'
|
||||
app.config['SECRET_KEY'] = "random"
|
||||
db = SQLAlchemy(app)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Database(db.Model):
|
||||
name: str
|
||||
ip: str
|
||||
name = db.Column(db.String(30), primary_key=True)
|
||||
ip = db.Column(db.String(16), unique=True)
|
||||
|
||||
def __init__(self, name, ip):
|
||||
self.name = name
|
||||
self.ip = ip
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
return render_template('index.html', db_entries=Database.query.all())
|
||||
|
||||
|
||||
@app.route('/create', methods=['POST'])
|
||||
def create():
|
||||
if request.method == 'POST':
|
||||
json_post = json.loads(request.data)
|
||||
data = Database(json_post['name'], json_post['ip'])
|
||||
db.session.add(data)
|
||||
db.session.commit()
|
||||
return jsonify(data)
|
||||
|
||||
|
||||
@app.route('/update', methods=['POST'])
|
||||
def update():
|
||||
if request.method == 'POST':
|
||||
json_post = json.loads(request.data)
|
||||
old_value = copy.deepcopy(Database.query.get(json_post['name']))
|
||||
Database.query.filter_by(name=json_post['name']).update(dict(ip=json_post['ip']))
|
||||
db.session.commit()
|
||||
return jsonify(old=old_value, new=json_post)
|
||||
|
||||
|
||||
@app.route('/delete', methods=['POST'])
|
||||
def delete():
|
||||
if request.method == 'POST':
|
||||
json_post = json.loads(request.data)
|
||||
query = Database.query.get(json_post['name'])
|
||||
db.session.delete(query)
|
||||
db.session.commit()
|
||||
return jsonify(json_post)
|
||||
|
||||
|
||||
@app.route('/storage', methods=['GET'])
|
||||
def storage():
|
||||
db_entries = Database.query.all()
|
||||
return jsonify(db_entries)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
db.create_all()
|
||||
app.run(host="0.0.0.0", debug=True)
|
||||
9
dynaconf/src/static/main.css
Normal file
9
dynaconf/src/static/main.css
Normal file
@@ -0,0 +1,9 @@
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.table a
|
||||
{
|
||||
display:block;
|
||||
text-decoration:none;
|
||||
}
|
||||
25
dynaconf/src/templates/index.html
Normal file
25
dynaconf/src/templates/index.html
Normal file
@@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang = "en">
|
||||
<head>
|
||||
<link rel="stylesheet" href="/static/main.css">
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Name</td>
|
||||
<td>IP</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for value in db_entries %}
|
||||
<tr>
|
||||
<td>{{ value.name }}</td>
|
||||
<td>{{ value.ip }}</td>
|
||||
<!-- <td><a href="{{ url_for('delete', name=value.name) }}">Delete</a></td>-->
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
40
erigon-bsc.yml
Normal file
40
erigon-bsc.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
|
||||
erigon-bsc:
|
||||
image: thorax/erigon:devel
|
||||
command: erigon --chain bsc --metrics --metrics.addr=0.0.0.0 --metrics.port=6060 --private.api.addr=0.0.0.0:9090 --pprof --pprof.addr=0.0.0.0 --pprof.port=6061
|
||||
volumes:
|
||||
- erigon-bsc-volume:/home/erigon/.local/share/erigon
|
||||
ports:
|
||||
- "30333:30303/tcp"
|
||||
- "30333:30303/udp"
|
||||
- "30304:30304/tcp"
|
||||
- "30304:30304/udp"
|
||||
networks:
|
||||
- chains
|
||||
restart: unless-stopped
|
||||
|
||||
rpcdaemon-bsc:
|
||||
image: thorax/erigon:devel
|
||||
command: rpcdaemon --datadir=/home/erigon/.local/share/erigon --private.api.addr=erigon:9090 --http.addr=0.0.0.0 --http.vhosts=* --http.corsdomain=* --http.api=eth,debug,net --ws
|
||||
pid: service:erigon-bsc # Use erigon's PID namespace. It's required to open Erigon's DB from another process (RPCDaemon local-mode)
|
||||
volumes:
|
||||
- erigon-bsc-volume:/home/erigon/.local/share/erigon
|
||||
expose:
|
||||
- "8545"
|
||||
networks:
|
||||
- chains
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.rpcdaemon-bsc-stripprefix.stripprefix.prefixes=/erigon-bsc"
|
||||
- "traefik.http.services.rpcdaemon-bsc.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.rpcdaemon-bsc.entrypoints=websecure"
|
||||
- "traefik.http.routers.rpcdaemon-bsc.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.rpcdaemon-bsc.rule=Host(`$DOMAIN`) && PathPrefix(`/erigon-bsc`)"
|
||||
- "traefik.http.routers.rpcdaemon-bsc.middlewares=rpcdaemon-bsc-stripprefix, ipwhitelist"
|
||||
|
||||
volumes:
|
||||
erigon-bsc-volume:
|
||||
98
erigon-goerli.yml
Normal file
98
erigon-goerli.yml
Normal file
@@ -0,0 +1,98 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
erigon-trace:
|
||||
image: thorax/erigon:v2022.10.01
|
||||
expose:
|
||||
- "30303"
|
||||
- "30304"
|
||||
- "9090"
|
||||
volumes:
|
||||
- erigon-trace:/home/erigon/.local/share/erigon
|
||||
- .jwtsecret:/jwtsecret
|
||||
networks:
|
||||
- chains
|
||||
command: >
|
||||
erigon --chain goerli
|
||||
--metrics --metrics.addr=0.0.0.0 --metrics.port=6060
|
||||
--private.api.addr=0.0.0.0:9090
|
||||
--pprof
|
||||
--pprof.addr=0.0.0.0
|
||||
--pprof.port=6061
|
||||
--authrpc.addr=0.0.0.0
|
||||
--authrpc.vhosts=*
|
||||
--authrpc.jwtsecret=/jwtsecret
|
||||
--snapshots=true
|
||||
--torrent.download.rate=1250mb
|
||||
--torrent.upload.rate=1250mb
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 1m
|
||||
labels:
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=6060"
|
||||
- "prometheus-scrape.job_name=erigon"
|
||||
- "prometheus-scrape.metrics_path=/debug/metrics/prometheus"
|
||||
|
||||
rpcdaemon:
|
||||
image: thorax/erigon:v2022.10.01
|
||||
command: >
|
||||
rpcdaemon --datadir=/home/erigon/.local/share/erigon/goerli
|
||||
--private.api.addr=erigon-trace:9090
|
||||
--txpool.api.addr=erigon-trace:9090
|
||||
--http.addr=0.0.0.0
|
||||
--http.vhosts=*
|
||||
--http.corsdomain=*
|
||||
--http.api=eth,erigon,web3,net,debug,trace,txpool
|
||||
--ws
|
||||
pid: service:erigon-trace # Use erigon's PID namespace. It's required to open Erigon's DB from another process (RPCDaemon local-mode)
|
||||
volumes:
|
||||
- erigon-trace:/home/erigon/.local/share/erigon
|
||||
networks:
|
||||
- chains
|
||||
expose:
|
||||
- "8545"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- "erigon-trace"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.rpcdaemon-stripprefix.stripprefix.prefixes=/erigon-goerli"
|
||||
- "traefik.http.services.rpcdaemon.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.rpcdaemon.entrypoints=websecure"
|
||||
- "traefik.http.routers.rpcdaemon.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.rpcdaemon.rule=Host(`$DOMAIN`) && PathPrefix(`/erigon-goerli`)"
|
||||
- "traefik.http.routers.rpcdaemon.middlewares=rpcdaemon-stripprefix, ipwhitelist"
|
||||
|
||||
lighthouse:
|
||||
image: sigp/lighthouse:latest-modern
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "127.0.0.1:5052:5052"
|
||||
volumes:
|
||||
- .jwtsecret:/jwtsecret
|
||||
- lighthouse_data:/root/.lighthouse
|
||||
command: >
|
||||
lighthouse beacon_node
|
||||
--network prater
|
||||
--reconstruct-historic-states
|
||||
--execution-endpoint http://erigon-trace:8551
|
||||
--execution-jwt /jwtsecret
|
||||
--http
|
||||
--http-address=0.0.0.0
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 1m
|
||||
networks:
|
||||
- chains
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.lighthouse-stripprefix.stripprefix.prefixes=/lighthouse"
|
||||
- "traefik.http.services.lighthouse.loadbalancer.server.port=5052"
|
||||
- "traefik.http.routers.lighthouse.entrypoints=websecure"
|
||||
- "traefik.http.routers.lighthouse.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.lighthouse.rule=Host(`$DOMAIN`) && PathPrefix(`/lighthouse`)"
|
||||
- "traefik.http.routers.lighthouse.middlewares=lighthouse-stripprefix, ipwhitelist"
|
||||
|
||||
|
||||
volumes:
|
||||
erigon-trace:
|
||||
lighthouse_data:
|
||||
34
erigon-polygon.yml
Normal file
34
erigon-polygon.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
erigon-polygon:
|
||||
build:
|
||||
args:
|
||||
ERIGON_VERSION: v0.0.3
|
||||
context: ./polygon/erigon
|
||||
dockerfile: Dockerfile
|
||||
environment:
|
||||
- SNAPSHOT_URL=https://matic-blockchain-snapshots.s3-accelerate.amazonaws.com/matic-mainnet/erigon-archive-snapshot-2022-10-12.tar.gz
|
||||
- BOOTSTRAP=1
|
||||
volumes:
|
||||
- "polygon-archive_data:/datadir"
|
||||
ports:
|
||||
- "40303:40303"
|
||||
- "40303:40303/udp"
|
||||
depends_on:
|
||||
- heimdallr
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 1m
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.erigon-polygon-stripprefix.stripprefix.prefixes=/polygon-archive"
|
||||
- "traefik.http.services.erigon-polygon.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.erigon-polygon.entrypoints=websecure"
|
||||
- "traefik.http.routers.erigon-polygon.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.erigon-polygon.rule=Host(`$DOMAIN`) && PathPrefix(`/polygon-archive`)"
|
||||
- "traefik.http.routers.erigon-polygon.middlewares=erigon-polygon-stripprefix, ipwhitelist"
|
||||
networks:
|
||||
- chains
|
||||
|
||||
volumes:
|
||||
polygon-archive_data:
|
||||
95
erigon.yml
Normal file
95
erigon.yml
Normal file
@@ -0,0 +1,95 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
erigon-trace:
|
||||
image: thorax/erigon:v2022.08.03
|
||||
expose:
|
||||
- "30303"
|
||||
- "30304"
|
||||
- "9090"
|
||||
volumes:
|
||||
- erigon-trace:/home/erigon/.local/share/erigon
|
||||
- .jwtsecret:/jwtsecret
|
||||
networks:
|
||||
- chains
|
||||
command: >
|
||||
erigon --chain mainnet
|
||||
--metrics --metrics.addr=0.0.0.0 --metrics.port=6060
|
||||
--private.api.addr=0.0.0.0:9090
|
||||
--torrent.upload.rate="1250mb"
|
||||
--torrent.download.rate="1250mb"
|
||||
--pprof
|
||||
--pprof.addr=0.0.0.0
|
||||
--pprof.port=6061
|
||||
--authrpc.addr=0.0.0.0
|
||||
--authrpc.vhosts=*
|
||||
--authrpc.jwtsecret=/jwtsecret
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 1m
|
||||
labels:
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=6060"
|
||||
- "prometheus-scrape.job_name=erigon"
|
||||
- "prometheus-scrape.metrics_path=/debug/metrics/prometheus"
|
||||
|
||||
rpcdaemon:
|
||||
image: thorax/erigon:v2022.08.03
|
||||
command: >
|
||||
rpcdaemon --datadir=/home/erigon/.local/share/erigon
|
||||
--private.api.addr=erigon-trace:9090
|
||||
--txpool.api.addr=erigon-trace:9090
|
||||
--http.addr=0.0.0.0
|
||||
--http.vhosts=*
|
||||
--http.corsdomain=*
|
||||
--http.api=eth,erigon,web3,net,debug,trace,txpool
|
||||
--ws
|
||||
pid: service:erigon-trace # Use erigon's PID namespace. It's required to open Erigon's DB from another process (RPCDaemon local-mode)
|
||||
volumes:
|
||||
- erigon-trace:/home/erigon/.local/share/erigon
|
||||
networks:
|
||||
- chains
|
||||
expose:
|
||||
- "8545"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- "erigon-trace"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.rpcdaemon-stripprefix.stripprefix.prefixes=/erigon"
|
||||
- "traefik.http.services.rpcdaemon.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.rpcdaemon.entrypoints=websecure"
|
||||
- "traefik.http.routers.rpcdaemon.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.rpcdaemon.rule=Host(`$DOMAIN`) && PathPrefix(`/erigon`)"
|
||||
- "traefik.http.routers.rpcdaemon.middlewares=rpcdaemon-stripprefix, ipwhitelist"
|
||||
|
||||
lighthouse:
|
||||
image: sigp/lighthouse:latest-modern
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "127.0.0.1:5052:5052"
|
||||
volumes:
|
||||
- .jwtsecret:/jwtsecret
|
||||
- lighthouse_data:/root/.lighthouse
|
||||
command: >
|
||||
lighthouse beacon_node
|
||||
--eth1-endpoints http://erigon-trace:8545
|
||||
--execution-endpoint http://erigon-trace:8551
|
||||
--execution-jwt /jwtsecret
|
||||
--http
|
||||
--http-address=0.0.0.0
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 1m
|
||||
networks:
|
||||
- chains
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.lighthouse-stripprefix.stripprefix.prefixes=/lighthouse"
|
||||
- "traefik.http.services.lighthouse.loadbalancer.server.port=5052"
|
||||
- "traefik.http.routers.lighthouse.entrypoints=websecure"
|
||||
- "traefik.http.routers.lighthouse.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.lighthouse.rule=Host(`$DOMAIN`) && PathPrefix(`/lighthouse`)"
|
||||
- "traefik.http.routers.lighthouse.middlewares=lighthouse-stripprefix, ipwhitelist"
|
||||
|
||||
volumes:
|
||||
erigon-trace:
|
||||
lighthouse_data:
|
||||
27
evmos.yml
Normal file
27
evmos.yml
Normal file
@@ -0,0 +1,27 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
evmos:
|
||||
image: tharsishq/evmos:v2.0.1
|
||||
expose:
|
||||
- "8545"
|
||||
ports:
|
||||
- "26657:26657"
|
||||
- "26656:26656"
|
||||
volumes:
|
||||
- evmos_data:/root/.evmosd
|
||||
command: "evmosd start"
|
||||
networks:
|
||||
- chains
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.evmos-stripprefix.stripprefix.prefixes=/evmos"
|
||||
- "traefik.http.services.evmos.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.evmos.entrypoints=websecure"
|
||||
- "traefik.http.routers.evmos.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.evmos.rule=Host(`$DOMAIN`) && PathPrefix(`/evmos`)"
|
||||
- "traefik.http.routers.evmos.middlewares=evmos-stripprefix, ipwhitelist"
|
||||
|
||||
volumes:
|
||||
evmos_data:
|
||||
28
fantom.yml
Normal file
28
fantom.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
version: "3.1"
|
||||
services:
|
||||
fantom:
|
||||
build:
|
||||
args:
|
||||
VERSION: release/1.1.0-rc.4
|
||||
context: ./fantom
|
||||
dockerfile: Dockerfile
|
||||
environment:
|
||||
- SNAPSHOT_URL=https://download.fantom.network/opera_5may22.tgz
|
||||
volumes:
|
||||
- "fantom:/datadir"
|
||||
expose:
|
||||
- "18545"
|
||||
networks:
|
||||
- chains
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.fantom-stripprefix.stripprefix.prefixes=/fantom"
|
||||
- "traefik.http.services.fantom.loadbalancer.server.port=18545"
|
||||
- "traefik.http.routers.fantom.entrypoints=websecure"
|
||||
- "traefik.http.routers.fantom.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.fantom.rule=Host(`$DOMAIN`) && PathPrefix(`/fantom`)"
|
||||
- "traefik.http.routers.fantom.middlewares=fantom-stripprefix, ipwhitelist"
|
||||
|
||||
volumes:
|
||||
fantom:
|
||||
28
fantom/Dockerfile
Normal file
28
fantom/Dockerfile
Normal file
@@ -0,0 +1,28 @@
|
||||
# Build Fantom in a stock Go builder container
|
||||
FROM golang:1.17-alpine as builder
|
||||
|
||||
# Install packages we need
|
||||
RUN apk add --no-cache make gcc musl-dev linux-headers git
|
||||
|
||||
# Make a folder to work in
|
||||
RUN mkdir /fantom
|
||||
|
||||
# Grab VERSION from Build Args
|
||||
ARG VERSION
|
||||
|
||||
# Clone the repo to that folder
|
||||
RUN git clone --branch ${VERSION} https://github.com/Fantom-foundation/go-opera.git /fantom
|
||||
|
||||
# Build Fantom
|
||||
RUN cd /fantom && make
|
||||
|
||||
# Pull Fantom into a second stage deploy alpine container
|
||||
FROM alpine:latest
|
||||
|
||||
RUN apk add --no-cache ca-certificates wget tzdata
|
||||
COPY --from=builder /fantom/build/opera /usr/local/bin/
|
||||
|
||||
# Set entrypoint
|
||||
COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod u+x /usr/local/bin/entrypoint.sh
|
||||
ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ]
|
||||
38
fantom/scripts/entrypoint.sh
Normal file
38
fantom/scripts/entrypoint.sh
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/bin/sh
|
||||
|
||||
# exit script on any error
|
||||
set -e
|
||||
|
||||
# Set fantom Home Directory
|
||||
FANTOM_HOME=/datadir
|
||||
|
||||
if [ -n "${SNAPSHOT_URL}" ] && [ ! -f "${FANTOM_HOME}/bootstrapped" ];
|
||||
then
|
||||
echo "downloading snapshot from ${SNAPSHOT_URL}"
|
||||
wget --tries=0 -O - "${SNAPSHOT_URL}" | tar -xz --strip-components=1 -C ${FANTOM_HOME}/ && touch ${FANTOM_HOME}/bootstrapped
|
||||
fi
|
||||
|
||||
if [ ! -f "$FANTOM_HOME/mainnet.g" ];
|
||||
then
|
||||
cd $FANTOM_HOME
|
||||
echo "downloading launch genesis file"
|
||||
wget --quiet https://opera.fantom.network/mainnet.g
|
||||
fi
|
||||
|
||||
opera \
|
||||
--genesis=/datadir/mainnet.g \
|
||||
--port=5050 \
|
||||
--maxpeers=200 \
|
||||
--datadir=/datadir \
|
||||
--http \
|
||||
--http.addr=0.0.0.0 \
|
||||
--http.port=18545 \
|
||||
--http.api=ftm,eth,debug,admin,web3,personal,net,txpool,sfc \
|
||||
--http.corsdomain="*" \
|
||||
--http.vhosts="*" \
|
||||
--ws \
|
||||
--ws.addr=0.0.0.0 \
|
||||
--ws.port=18546 \
|
||||
--ws.api=ftm,eth,debug,admin,web3,personal,net,txpool,sfc \
|
||||
--ws.origins="*" \
|
||||
--nousb
|
||||
50
fuse.yml
Normal file
50
fuse.yml
Normal file
@@ -0,0 +1,50 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
fusenetstat:
|
||||
image: fusenet/netstat:1.0.0
|
||||
command: "--instance-name 0xeb5Ca1d019e9D8b9aa9C47991993C84d1062628d --role node --parity-version 2.0.1 --fuseapp-version 1.0.0 --netstats-version 1.0.0"
|
||||
network_mode: "service:fusenet"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- fusenet
|
||||
|
||||
# wants udp and tcp port bindings on 30303
|
||||
fusenet:
|
||||
image: fusenet/node:2.0.1
|
||||
expose:
|
||||
- "3000"
|
||||
- "8545"
|
||||
- "8546"
|
||||
- "30303"
|
||||
environment:
|
||||
- HOME=/home/parity
|
||||
- PARITY_HOME_DIR=/home/parity/.local/share/io.parity.ethereum
|
||||
- PARITY_CONFIG_FILE_CHAIN=/home/parity/.local/share/io.parity.ethereum/spec.json
|
||||
- PARITY_CONFIG_FILE_BOOTNODES=/home/parity/.local/share/io.parity.ethereum/bootnodes.txt
|
||||
- PARITY_CONFIG_FILE_TEMPLATE=/home/parity/.local/share/io.parity.ethereum/config_template.toml
|
||||
- PARITY_DATA_DIR=/home/parity/.local/share/io.parity.ethereum/chains
|
||||
- PARITY_BIN=/usr/local/bin/parity
|
||||
- PARITY_WRAPPER_SCRIPT=/home/parity/parity_wrapper.sh
|
||||
volumes:
|
||||
- fusenet_data:/data
|
||||
- fusenet_config:/config/custom
|
||||
networks:
|
||||
- chains
|
||||
command: "--role node --parity-args --no-warp --node-key 0xeb5Ca1d019e9D8b9aa9C47991993C84d1062628d --jsonrpc-threads 1 --jsonrpc-server-threads 4 --metrics --metrics-interface=0.0.0.0"
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.fuse-stripprefix.stripprefix.prefixes=/fuse"
|
||||
- "traefik.http.services.fuse.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.fuse.entrypoints=websecure"
|
||||
- "traefik.http.routers.fuse.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.fuse.rule=Host(`$DOMAIN`) && PathPrefix(`/fuse`)"
|
||||
- "traefik.http.routers.fuse.middlewares=fuse-stripprefix, ipwhitelist"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=3000"
|
||||
- "prometheus-scrape.job_name=fusenet"
|
||||
|
||||
volumes:
|
||||
fusenet_data:
|
||||
fusenet_config:
|
||||
61
geth-mainnet.yml
Normal file
61
geth-mainnet.yml
Normal file
@@ -0,0 +1,61 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
geth-mainnet:
|
||||
image: ethereum/client-go:v1.10.23
|
||||
expose:
|
||||
# HTTP server / GraphQL API
|
||||
- 8545
|
||||
ports:
|
||||
- "30303:30303"
|
||||
- "30303:30303/udp"
|
||||
command:
|
||||
[
|
||||
# Blockchain sync mode ("snap", "full" or "light")
|
||||
"--syncmode=snap",
|
||||
# Megabytes of memory allocated to internal caching
|
||||
"--cache=8192",
|
||||
# Enable the WS-RPC server
|
||||
"--ws",
|
||||
"--ws.addr=0.0.0.0",
|
||||
# Enable the HTTP-RPC server
|
||||
"--http",
|
||||
"--http.addr=0.0.0.0",
|
||||
"--http.vhosts=*",
|
||||
# Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well.
|
||||
"--graphql",
|
||||
"--graphql.vhosts=*",
|
||||
# Enable metrics collection and reporting
|
||||
"--metrics",
|
||||
"--metrics.addr=0.0.0.0",
|
||||
# Ethereum mainnet
|
||||
"--mainnet",
|
||||
# Maximum number of network peers (network disabled if set to 0) (default: 50)
|
||||
"--maxpeers=30",
|
||||
# The Merge
|
||||
"--authrpc.jwtsecret=/jwtsecret",
|
||||
"--authrpc.addr=0.0.0.0",
|
||||
"--authrpc.vhosts=*"
|
||||
]
|
||||
networks:
|
||||
- chains
|
||||
volumes:
|
||||
- "geth-mainnet_data:/root/.ethereum"
|
||||
- ".jwtsecret:/jwtsecret"
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 1m
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.mainnet-stripprefix.stripprefix.prefixes=/mainnet"
|
||||
- "traefik.http.services.mainnet.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.mainnet.entrypoints=websecure"
|
||||
- "traefik.http.routers.mainnet.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.mainnet.rule=Host(`$DOMAIN`) && PathPrefix(`/mainnet`)"
|
||||
- "traefik.http.routers.mainnet.middlewares=mainnet-stripprefix, ipwhitelist"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=6060"
|
||||
- "prometheus-scrape.job_name=geth-mainnet"
|
||||
- "prometheus-scrape.metrics_path=/debug/metrics/prometheus"
|
||||
|
||||
volumes:
|
||||
geth-mainnet_data:
|
||||
104
grafana/provisioning/dashboards/basic/Overview.json
Normal file
104
grafana/provisioning/dashboards/basic/Overview.json
Normal file
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": "-- Grafana --",
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"target": {
|
||||
"limit": 100,
|
||||
"matchAny": false,
|
||||
"tags": [],
|
||||
"type": "dashboard"
|
||||
},
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"id": 13,
|
||||
"links": [],
|
||||
"liveNow": false,
|
||||
"panels": [
|
||||
{
|
||||
"gridPos": {
|
||||
"h": 1,
|
||||
"w": 24,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 6,
|
||||
"title": "Row title",
|
||||
"type": "row"
|
||||
},
|
||||
{
|
||||
"gridPos": {
|
||||
"h": 11,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 1
|
||||
},
|
||||
"id": 2,
|
||||
"options": {
|
||||
"alertName": "",
|
||||
"dashboardAlerts": false,
|
||||
"folder": {
|
||||
"id": 1,
|
||||
"title": "Monitoring Services"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"showInstances": false,
|
||||
"sortOrder": 1,
|
||||
"stateFilter": {
|
||||
"firing": true,
|
||||
"inactive": true,
|
||||
"pending": true
|
||||
}
|
||||
},
|
||||
"title": "Alerts",
|
||||
"type": "alertlist"
|
||||
},
|
||||
{
|
||||
"gridPos": {
|
||||
"h": 11,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 1
|
||||
},
|
||||
"id": 4,
|
||||
"options": {
|
||||
"maxItems": 10,
|
||||
"query": "",
|
||||
"showHeadings": false,
|
||||
"showRecentlyViewed": false,
|
||||
"showSearch": true,
|
||||
"showStarred": false,
|
||||
"tags": []
|
||||
},
|
||||
"pluginVersion": "8.3.3",
|
||||
"title": "Panel Title",
|
||||
"type": "dashlist"
|
||||
}
|
||||
],
|
||||
"schemaVersion": 34,
|
||||
"style": "dark",
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-6h",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "",
|
||||
"title": "Overview",
|
||||
"uid": "_tGw-fJnz",
|
||||
"version": 5,
|
||||
"weekStart": ""
|
||||
}
|
||||
1439
grafana/provisioning/dashboards/basic/chain-dash.json
Normal file
1439
grafana/provisioning/dashboards/basic/chain-dash.json
Normal file
File diff suppressed because it is too large
Load Diff
6400
grafana/provisioning/dashboards/basic/erigon.json
Normal file
6400
grafana/provisioning/dashboards/basic/erigon.json
Normal file
File diff suppressed because it is too large
Load Diff
3238
grafana/provisioning/dashboards/basic/mon-dash.json
Normal file
3238
grafana/provisioning/dashboards/basic/mon-dash.json
Normal file
File diff suppressed because it is too large
Load Diff
14116
grafana/provisioning/dashboards/basic/node-dash.json
Normal file
14116
grafana/provisioning/dashboards/basic/node-dash.json
Normal file
File diff suppressed because it is too large
Load Diff
1609
grafana/provisioning/dashboards/basic/pokt-dash.json
Normal file
1609
grafana/provisioning/dashboards/basic/pokt-dash.json
Normal file
File diff suppressed because it is too large
Load Diff
684
grafana/provisioning/dashboards/basic/traefik-dash.json
Normal file
684
grafana/provisioning/dashboards/basic/traefik-dash.json
Normal file
@@ -0,0 +1,684 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": "-- Grafana --",
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"target": {
|
||||
"limit": 100,
|
||||
"matchAny": false,
|
||||
"tags": [],
|
||||
"type": "dashboard"
|
||||
},
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"id": 10,
|
||||
"links": [],
|
||||
"liveNow": false,
|
||||
"panels": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "bars",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 8,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 7,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [
|
||||
"sum"
|
||||
],
|
||||
"displayMode": "list",
|
||||
"placement": "right"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"exemplar": true,
|
||||
"expr": "rate(traefik_service_requests_total{instance=\"traefik:8082\",service=\"pocket-fr-1@docker\"}[1m]) * 100",
|
||||
"hide": false,
|
||||
"interval": "",
|
||||
"legendFormat": "{{ code }}",
|
||||
"refId": "B"
|
||||
}
|
||||
],
|
||||
"title": "Requests POKT-FR-1",
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 8,
|
||||
"x": 8,
|
||||
"y": 0
|
||||
},
|
||||
"id": 8,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [
|
||||
"sum"
|
||||
],
|
||||
"displayMode": "list",
|
||||
"placement": "right"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"exemplar": true,
|
||||
"expr": "rate(traefik_service_requests_total{instance=\"traefik:8082\",service=\"pocket-fr-2@docker\"}[1m]) * 100",
|
||||
"interval": "",
|
||||
"legendFormat": "{{ code }}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "Requests POKT-FR-2",
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 8,
|
||||
"x": 16,
|
||||
"y": 0
|
||||
},
|
||||
"id": 6,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [
|
||||
"sum"
|
||||
],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"exemplar": true,
|
||||
"expr": "rate(traefik_service_requests_tls_total{instance=\"traefik:8082\",service=~\"pocket-fr-1@docker|pocket-fr-2@docker\"}[1m]) * 100",
|
||||
"interval": "",
|
||||
"legendFormat": "{{ tls_cipher }}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "Requests SSL",
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 8,
|
||||
"x": 0,
|
||||
"y": 8
|
||||
},
|
||||
"id": 2,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [
|
||||
"sum"
|
||||
],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"exemplar": true,
|
||||
"expr": "traefik_service_open_connections{instance=\"traefik:8082\",service=~\"pocket-fr-1@docker|pocket-fr-2@docker\"}",
|
||||
"interval": "",
|
||||
"legendFormat": "{{ method }} {{ service }}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "Connections",
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 8,
|
||||
"x": 8,
|
||||
"y": 8
|
||||
},
|
||||
"id": 4,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"exemplar": true,
|
||||
"expr": "rate(traefik_service_request_duration_seconds_count{instance=\"traefik:8082\",service=~\"pocket-fr-1@docker|pocket-fr-2@docker\"}[1m])",
|
||||
"interval": "",
|
||||
"legendFormat": "{{ code }} {{ method }} {{ service }}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "Request duration",
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 8,
|
||||
"x": 16,
|
||||
"y": 8
|
||||
},
|
||||
"id": 3,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"exemplar": true,
|
||||
"expr": "histogram_quantile(0.9, sum by (le) (rate(traefik_service_request_duration_seconds_bucket{instance=\"traefik:8082\",service=~\"pocket-fr-1@docker|pocket-fr-2@docker\"}[1m])))",
|
||||
"interval": "",
|
||||
"legendFormat": "",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"title": "Request duration",
|
||||
"type": "timeseries"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"axisLabel": "",
|
||||
"axisPlacement": "auto",
|
||||
"barAlignment": 0,
|
||||
"drawStyle": "line",
|
||||
"fillOpacity": 0,
|
||||
"gradientMode": "none",
|
||||
"hideFrom": {
|
||||
"legend": false,
|
||||
"tooltip": false,
|
||||
"viz": false
|
||||
},
|
||||
"lineInterpolation": "linear",
|
||||
"lineWidth": 1,
|
||||
"pointSize": 5,
|
||||
"scaleDistribution": {
|
||||
"type": "linear"
|
||||
},
|
||||
"showPoints": "auto",
|
||||
"spanNulls": false,
|
||||
"stacking": {
|
||||
"group": "A",
|
||||
"mode": "none"
|
||||
},
|
||||
"thresholdsStyle": {
|
||||
"mode": "off"
|
||||
}
|
||||
},
|
||||
"mappings": [],
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 6,
|
||||
"w": 8,
|
||||
"x": 0,
|
||||
"y": 16
|
||||
},
|
||||
"id": 5,
|
||||
"options": {
|
||||
"legend": {
|
||||
"calcs": [],
|
||||
"displayMode": "list",
|
||||
"placement": "bottom"
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "single"
|
||||
}
|
||||
},
|
||||
"pluginVersion": "8.3.3",
|
||||
"targets": [
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"exemplar": true,
|
||||
"expr": "sum(increase(traefik_service_request_duration_seconds_sum{instance=\"traefik:8082\",service=~\"pocket-fr-2@docker\"}[1m])) by (method)",
|
||||
"interval": "",
|
||||
"legendFormat": "pokt-fr-1 {{ method }}",
|
||||
"refId": "A"
|
||||
},
|
||||
{
|
||||
"datasource": {
|
||||
"type": "prometheus",
|
||||
"uid": "P00A23F4F516FCA75"
|
||||
},
|
||||
"exemplar": true,
|
||||
"expr": "sum(increase(traefik_service_request_duration_seconds_sum{instance=\"traefik:8082\",service=~\"pocket-fr-1@docker\"}[1m])) by (method)",
|
||||
"hide": false,
|
||||
"interval": "",
|
||||
"legendFormat": "pokt-fr-1 {{ method }}",
|
||||
"refId": "B"
|
||||
}
|
||||
],
|
||||
"title": "Sum Request",
|
||||
"type": "timeseries"
|
||||
}
|
||||
],
|
||||
"refresh": "",
|
||||
"schemaVersion": 34,
|
||||
"style": "dark",
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-7d",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {},
|
||||
"timezone": "",
|
||||
"title": "traefik",
|
||||
"uid": "eE3572Jnk",
|
||||
"version": 17,
|
||||
"weekStart": ""
|
||||
}
|
||||
13
grafana/provisioning/dashboards/dashboard.yml
Normal file
13
grafana/provisioning/dashboards/dashboard.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
apiVersion: 1
|
||||
|
||||
providers:
|
||||
- name: 'basic'
|
||||
orgId: 1
|
||||
folder: 'basic'
|
||||
type: file
|
||||
disableDeletion: false
|
||||
editable: true
|
||||
allowUiUpdates: true
|
||||
options:
|
||||
path: /etc/grafana/provisioning/dashboards
|
||||
foldersFromFilesStructure: true
|
||||
56
grafana/provisioning/datasources/datasources.yml
Normal file
56
grafana/provisioning/datasources/datasources.yml
Normal file
@@ -0,0 +1,56 @@
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- name: rpc-de-01
|
||||
type: prometheus
|
||||
access: proxy
|
||||
orgId: 1
|
||||
url: http://10.13.13.5:9090
|
||||
basicAuth: false
|
||||
isDefault: false
|
||||
editable: true
|
||||
|
||||
- name: rpc-de-04
|
||||
type: prometheus
|
||||
access: proxy
|
||||
orgId: 1
|
||||
url: http://10.13.13.7:9090
|
||||
basicAuth: false
|
||||
isDefault: false
|
||||
editable: true
|
||||
|
||||
- name: rpc-fi-01
|
||||
type: prometheus
|
||||
access: proxy
|
||||
orgId: 1
|
||||
url: http://10.13.13.6:9090
|
||||
basicAuth: false
|
||||
isDefault: false
|
||||
editable: true
|
||||
|
||||
- name: rpc-fi-04
|
||||
type: prometheus
|
||||
access: proxy
|
||||
orgId: 1
|
||||
url: http://10.13.13.8:9090
|
||||
basicAuth: false
|
||||
isDefault: false
|
||||
editable: true
|
||||
|
||||
- name: pokt-fr-1
|
||||
type: prometheus
|
||||
access: proxy
|
||||
orgId: 1
|
||||
url: http://10.13.13.10:9090
|
||||
basicAuth: false
|
||||
isDefault: false
|
||||
editable: true
|
||||
|
||||
- name: pokt-lt-1
|
||||
type: prometheus
|
||||
access: proxy
|
||||
orgId: 1
|
||||
url: http://10.13.13.3:9090
|
||||
basicAuth: false
|
||||
isDefault: false
|
||||
editable: true
|
||||
72
graph-frontend.yml
Normal file
72
graph-frontend.yml
Normal file
@@ -0,0 +1,72 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
|
||||
traefik:
|
||||
image: traefik:latest
|
||||
container_name: traefik
|
||||
restart: always
|
||||
expose:
|
||||
- "8082"
|
||||
ports:
|
||||
- "443:443"
|
||||
- "127.0.0.1:8080:8080"
|
||||
command:
|
||||
- "--api=true"
|
||||
- "--api.insecure=true"
|
||||
- "--api.dashboard=true"
|
||||
- "--log.level=DEBUG"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--providers.file.filename=/dynamic_config.yml"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--entryPoints.metrics.address=:8082"
|
||||
- "--metrics.prometheus.entryPoint=metrics"
|
||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
||||
# TESTING
|
||||
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
- "--certificatesresolvers.myresolver.acme.email=$MAIL"
|
||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
||||
volumes:
|
||||
- "./traefik/letsencrypt:/letsencrypt"
|
||||
- "./traefik/config/dynamic_config.yml:/dynamic_config.yml"
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
networks:
|
||||
- chains
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.ipwhitelist.ipwhitelist.sourcerange=$WHITELIST"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8082"
|
||||
- "prometheus-scrape.job_name=traefik"
|
||||
|
||||
haproxy:
|
||||
build: haproxy
|
||||
volumes:
|
||||
- ./haproxy:/usr/local/etc/haproxy
|
||||
expose:
|
||||
- "8404"
|
||||
- "80"
|
||||
ports:
|
||||
- "127.0.0.1:80:80"
|
||||
restart: always
|
||||
networks:
|
||||
- chains
|
||||
labels:
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8404"
|
||||
- "prometheus-scrape.job_name=haproxy"
|
||||
- "prometheus-scrape.metrics_path=/metrics"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.services.haproxy.loadbalancer.server.port=80"
|
||||
- "traefik.http.routers.haproxy.entrypoints=websecure"
|
||||
- "traefik.http.routers.haproxy.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.haproxy.rule=Host(`$DOMAIN`)"
|
||||
- "traefik.http.routers.haproxy.middlewares=ipwhitelist"
|
||||
|
||||
networks:
|
||||
chains:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.0.1/27
|
||||
7
haproxy/Dockerfile
Normal file
7
haproxy/Dockerfile
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM haproxy:alpine
|
||||
|
||||
USER root
|
||||
RUN apk add --no-cache curl bash jq
|
||||
USER haproxy
|
||||
|
||||
CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]
|
||||
25
haproxy/ethereum-healthcheck.sh
Executable file
25
haproxy/ethereum-healthcheck.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
# $1 = Virtual Service IP (VIP)
|
||||
# $2 = Virtual Service Port (VPT)
|
||||
# $3 = Real Server IP (RIP)
|
||||
# $4 = Real Server Port (RPT)
|
||||
# $5 = Check Source IP
|
||||
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
VIP=$1
|
||||
VPT=$2
|
||||
RIP=$3
|
||||
RPT=$4
|
||||
# RPT=8545
|
||||
|
||||
# Run curl with appropriate options
|
||||
curl -s -X POST -H "Content-Type: application/json" -m 2 -d '{"jsonrpc":"2.0","method":"eth_syncing","params": [],"id":1}' https://$HAPROXY_SERVER_NAME:$RPT/$HAPROXY_PROXY_NAME 2>/dev/null | jq '.result' -r | grep -q false
|
||||
exit1=$?
|
||||
|
||||
peers=$(curl -s -X POST -H "Content-Type: application/json" -m 2 -d '{"jsonrpc":"2.0","method":"net_peerCount","params": [],"id":1}' https://$HAPROXY_SERVER_NAME:$RPT/$HAPROXY_PROXY_NAME 2>/dev/null | jq '.result' -r)
|
||||
|
||||
# If any of the above tests failed, then exit 1.
|
||||
if [[ "$exit1" -ne 0 ]]; then exit 1; fi
|
||||
if [[ `printf "%d" $peers` == "0" || `printf "%d" $peers` == "1" ]]; then exit 1; fi
|
||||
exit 0
|
||||
25
haproxy/polygon-healthcheck.sh
Executable file
25
haproxy/polygon-healthcheck.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
# $1 = Virtual Service IP (VIP)
|
||||
# $2 = Virtual Service Port (VPT)
|
||||
# $3 = Real Server IP (RIP)
|
||||
# $4 = Real Server Port (RPT)
|
||||
# $5 = Check Source IP
|
||||
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
VIP=$1
|
||||
VPT=$2
|
||||
RIP=$3
|
||||
RPT=$4
|
||||
# RPT=8545
|
||||
|
||||
# Run curl with appropriate options
|
||||
our_blockheight=$(curl -s -X POST -H "Content-Type: application/json" -m 2 -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params": [],"id":1}' https://$HAPROXY_SERVER_NAME:$RPT/$HAPROXY_PROXY_NAME 2>/dev/null | printf "%d" $(jq '.result' -r))
|
||||
pokt_blockheight=$(curl -s -X POST -H "Content-Type: application/json" -m 2 -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params": [],"id":1}' https://poly-rpc.gateway.pokt.network 2>/dev/null | printf "%d" $(jq '.result' -r))
|
||||
|
||||
peers=$(curl -s -X POST -H "Content-Type: application/json" -m 2 -d '{"jsonrpc":"2.0","method":"net_peerCount","params": [],"id":1}' https://$HAPROXY_SERVER_NAME:$RPT/$HAPROXY_PROXY_NAME 2>/dev/null | jq '.result' -r)
|
||||
|
||||
# If any of the above tests failed, then exit 1.
|
||||
if [[ "$our_blockheight" -lt "$pokt_blockheight - 10" ]]; then exit 1; fi
|
||||
if [[ `printf "%d" $peers` == "0" || `printf "%d" $peers` == "1" ]]; then exit 1; fi
|
||||
exit 0
|
||||
43
harmony.yml
Normal file
43
harmony.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
harmony-mainnet:
|
||||
build: ./harmony/build
|
||||
command: bash -c "/harmony.sh && /binary --log.dir /harmony/log --run explorer --run.shard 0 --dns.zone t.hmny.io --http.ip 0.0.0.0 --datadir /harmony"
|
||||
sysctls:
|
||||
net.core.somaxconn: 1024
|
||||
# net.core.netdev_max_backlog: 65536
|
||||
net.ipv4.tcp_tw_reuse: 1
|
||||
net.ipv4.tcp_rmem: 4096 65536 16777216
|
||||
net.ipv4.tcp_wmem: 4096 65536 16777216
|
||||
# net.ipv4.tcp_mem: 65536 131072 262144
|
||||
ulimits:
|
||||
nproc: 65535
|
||||
nofile:
|
||||
soft: 65535
|
||||
hard: 65535
|
||||
expose:
|
||||
- "9500"
|
||||
- "9000"
|
||||
- "6000"
|
||||
- "30303"
|
||||
volumes:
|
||||
- ./harmony:/harmony/
|
||||
- ./bootstrap_skript/harmony.sh:/harmony.sh
|
||||
networks:
|
||||
- chains
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.harmony-mainnet-stripprefix.stripprefix.prefixes=/harmony"
|
||||
- "traefik.http.services.harmony-mainnet.loadbalancer.server.port=9500"
|
||||
- "traefik.http.routers.harmony-mainnet.entrypoints=websecure"
|
||||
- "traefik.http.routers.harmony-mainnet.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.harmony-mainnet.rule=Host(`$DOMAIN`) && PathPrefix(`/harmony`)"
|
||||
- "traefik.http.routers.harmony-mainnet.middlewares=harmony-mainnet-stripprefix, ipwhitelist"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=9900"
|
||||
- "prometheus-scrape.job_name=harmony-mainnet"
|
||||
|
||||
volumes:
|
||||
harmony:
|
||||
@@ -1,95 +0,0 @@
|
||||
Version = "2.5.0"
|
||||
|
||||
[BLSKeys]
|
||||
KMSConfigFile = ""
|
||||
KMSConfigSrcType = "shared"
|
||||
KMSEnabled = false
|
||||
KeyDir = "./.hmy/blskeys"
|
||||
KeyFiles = []
|
||||
MaxKeys = 10
|
||||
PassEnabled = true
|
||||
PassFile = ""
|
||||
PassSrcType = "auto"
|
||||
SavePassphrase = false
|
||||
|
||||
[DNSSync]
|
||||
Client = true
|
||||
LegacySyncing = false
|
||||
Port = 6000
|
||||
Server = true
|
||||
ServerPort = 6000
|
||||
Zone = "t.hmny.io"
|
||||
|
||||
[General]
|
||||
DataDir = "./"
|
||||
EnablePruneBeaconChain = true
|
||||
IsArchival = false
|
||||
IsBackup = false
|
||||
IsBeaconArchival = false
|
||||
IsOffline = false
|
||||
NoStaking = false
|
||||
NodeType = "validator"
|
||||
ShardID = -1
|
||||
|
||||
[HTTP]
|
||||
AuthPort = 9501
|
||||
Enabled = true
|
||||
IP = "127.0.0.1"
|
||||
Port = 9500
|
||||
RosettaEnabled = false
|
||||
RosettaPort = 9700
|
||||
|
||||
[Log]
|
||||
FileName = "harmony.log"
|
||||
Folder = "./latest"
|
||||
RotateCount = 0
|
||||
RotateMaxAge = 0
|
||||
RotateSize = 100
|
||||
Verbosity = 3
|
||||
|
||||
[Log.VerbosePrints]
|
||||
Config = true
|
||||
|
||||
[Network]
|
||||
BootNodes = ["/dnsaddr/bootstrap.t.hmny.io"]
|
||||
NetworkType = "mainnet"
|
||||
|
||||
[P2P]
|
||||
DiscConcurrency = 0
|
||||
IP = "0.0.0.0"
|
||||
KeyFile = "./.hmykey"
|
||||
MaxConnsPerIP = 10
|
||||
Port = 9000
|
||||
|
||||
[Pprof]
|
||||
Enabled = false
|
||||
Folder = "./profiles"
|
||||
ListenAddr = "127.0.0.1:6060"
|
||||
ProfileDebugValues = [0]
|
||||
ProfileIntervals = [600]
|
||||
ProfileNames = []
|
||||
|
||||
[RPCOpt]
|
||||
DebugEnabled = false
|
||||
RateLimterEnabled = true
|
||||
RequestsPerSecond = 1000
|
||||
|
||||
[Sync]
|
||||
Concurrency = 6
|
||||
DiscBatch = 8
|
||||
DiscHardLowCap = 6
|
||||
DiscHighCap = 128
|
||||
DiscSoftLowCap = 8
|
||||
Downloader = false
|
||||
Enabled = false
|
||||
InitStreams = 8
|
||||
MinPeers = 6
|
||||
|
||||
[TxPool]
|
||||
BlacklistFile = "./.hmy/blacklist.txt"
|
||||
|
||||
[WS]
|
||||
AuthPort = 9801
|
||||
Enabled = true
|
||||
IP = "127.0.0.1"
|
||||
Port = 9800
|
||||
@@ -1,36 +1,6 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
harmony-mainnet:
|
||||
build: ./harmony/build
|
||||
command: bash -c "/harmony.sh && /binary -c /harmony.conf --log.dir /harmony/log --run.shard 1 --dns.zone t.hmny.io --http.ip 0.0.0.0 --datadir /harmony"
|
||||
sysctls:
|
||||
net.core.somaxconn: 1024
|
||||
# net.core.netdev_max_backlog: 65536
|
||||
net.ipv4.tcp_tw_reuse: 1
|
||||
net.ipv4.tcp_rmem: 4096 65536 16777216
|
||||
net.ipv4.tcp_wmem: 4096 65536 16777216
|
||||
# net.ipv4.tcp_mem: 65536 131072 262144
|
||||
ulimits:
|
||||
nproc: 65535
|
||||
nofile:
|
||||
soft: 65535
|
||||
hard: 65535
|
||||
expose:
|
||||
- "9500"
|
||||
- "9000"
|
||||
- "6000"
|
||||
- "9900"
|
||||
ports:
|
||||
- 9000:9000/tcp
|
||||
- 6000:6000/tcp
|
||||
volumes:
|
||||
- harmony_data:/harmony/
|
||||
- ./harmony/keyfiles:/.hmy/blskeys
|
||||
- ./harmony/log:/harmony/log
|
||||
- ./harmony/harmony.conf:/harmony.conf
|
||||
- ./bootstrap_skript/harmony.sh:/harmony.sh
|
||||
restart: unless-stopped
|
||||
|
||||
### WIREGUARD
|
||||
|
||||
@@ -59,7 +29,9 @@ services:
|
||||
sysctls:
|
||||
- net.ipv4.conf.all.src_valid_mark=1
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
- chains
|
||||
- monitoring
|
||||
|
||||
### MONITORING
|
||||
|
||||
@@ -67,8 +39,9 @@ services:
|
||||
image: prom/prometheus:v2.30.3
|
||||
container_name: prometheus
|
||||
volumes:
|
||||
- ./prometheus/prometheus-harmony.yml:/etc/prometheus/prometheus.yml
|
||||
- prometheus_data:/prometheus
|
||||
- ./prometheus/prometheus-autodiscover.yml:/etc/prometheus/prometheus.yml:ro
|
||||
- prometheus_data:/prometheus:rw
|
||||
- prometheus-docker-sd:/prometheus-docker-sd:ro
|
||||
command:
|
||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||
- '--storage.tsdb.path=/prometheus'
|
||||
@@ -77,11 +50,19 @@ services:
|
||||
- '--storage.tsdb.retention.time=200h'
|
||||
- '--web.enable-lifecycle'
|
||||
restart: unless-stopped
|
||||
network_mode: "service:wireguard"
|
||||
labels:
|
||||
org.label-schema.group: "monitoring"
|
||||
depends_on:
|
||||
- prometheus-docker-sd
|
||||
- wireguard
|
||||
network_mode: "service:wireguard"
|
||||
|
||||
prometheus-docker-sd:
|
||||
image: "stucky/prometheus-docker-sd:latest"
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- prometheus-docker-sd:/prometheus-docker-sd:rw
|
||||
|
||||
nodeexporter:
|
||||
image: prom/node-exporter:v1.2.2
|
||||
@@ -99,7 +80,12 @@ services:
|
||||
expose:
|
||||
- 9100
|
||||
labels:
|
||||
org.label-schema.group: "monitoring"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=9100"
|
||||
- "prometheus-scrape.job_name=nodeexporter"
|
||||
- "org.label-schema.group=monitoring"
|
||||
networks:
|
||||
- monitoring
|
||||
|
||||
cadvisor:
|
||||
image: gcr.io/cadvisor/cadvisor:v0.42.0
|
||||
@@ -117,11 +103,21 @@ services:
|
||||
expose:
|
||||
- 8080
|
||||
labels:
|
||||
org.label-schema.group: "monitoring"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8080"
|
||||
- "prometheus-scrape.job_name=cadvisor"
|
||||
- "org.label-schema.group=monitoring"
|
||||
networks:
|
||||
- monitoring
|
||||
|
||||
### VOLUMES
|
||||
|
||||
volumes:
|
||||
harmony_data:
|
||||
prometheus_data:
|
||||
prometheus-docker-sd:
|
||||
|
||||
### NETWORK
|
||||
|
||||
networks:
|
||||
monitoring:
|
||||
driver: bridge
|
||||
81
pocket-frontend.yml
Normal file
81
pocket-frontend.yml
Normal file
@@ -0,0 +1,81 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:latest
|
||||
container_name: traefik
|
||||
restart: always
|
||||
ports:
|
||||
- "443:443"
|
||||
- "127.0.0.1:8080:8080"
|
||||
expose:
|
||||
- "8082"
|
||||
command:
|
||||
- "--api=true"
|
||||
- "--api.insecure=true"
|
||||
- "--api.dashboard=true"
|
||||
- "--log.level=DEBUG"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--entryPoints.metrics.address=:8082"
|
||||
- "--metrics.prometheus.entryPoint=metrics"
|
||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
||||
# TESTING
|
||||
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
- "--certificatesresolvers.myresolver.acme.email=$MAIL"
|
||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
||||
volumes:
|
||||
- "./traefik/letsencrypt:/letsencrypt"
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
|
||||
haproxy:
|
||||
build: haproxy
|
||||
volumes:
|
||||
- ./haproxy:/usr/local/etc/haproxy
|
||||
expose:
|
||||
- "8404"
|
||||
- "80"
|
||||
ports:
|
||||
- "127.0.0.1:80:80"
|
||||
restart: always
|
||||
labels:
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8404"
|
||||
- "prometheus-scrape.job_name=haproxy"
|
||||
- "prometheus-scrape.metrics_path=/metrics"
|
||||
|
||||
pocket:
|
||||
build: pokt
|
||||
ports:
|
||||
- "127.0.0.1:8081:8081"
|
||||
- "26657:26656"
|
||||
expose:
|
||||
- 26656
|
||||
- 26660
|
||||
- 8081
|
||||
- 8083
|
||||
environment:
|
||||
- POCKET_CORE_KEY=$POCKET_CORE_KEY
|
||||
- POCKET_CORE_PASSPHRASE=$POCKET_CORE_PASSPHRASE
|
||||
- POCKET_SNAPSHOT=$POCKET_SNAPSHOT
|
||||
volumes:
|
||||
- pocket:/home/app/.pocket/data
|
||||
- pocket-addrbook:/home/app/.pocket/addrbook
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.services.pocket.loadbalancer.server.port=8081"
|
||||
- "traefik.http.routers.pocket.entrypoints=websecure"
|
||||
- "traefik.http.routers.pocket.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.pocket.rule=Host(`$DOMAIN`) && Path(`/v1`, `/v1/client/{dispatch|relay|challenge|sim}`)"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8083"
|
||||
- "prometheus-scrape.job_name=pocket"
|
||||
|
||||
### VOLUMES
|
||||
volumes:
|
||||
pocket:
|
||||
pocket-addrbook:
|
||||
147
pocket-lt.yml
Normal file
147
pocket-lt.yml
Normal file
@@ -0,0 +1,147 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
|
||||
traefik:
|
||||
image: traefik:latest
|
||||
container_name: traefik
|
||||
restart: always
|
||||
ports:
|
||||
- "443:443"
|
||||
- "127.0.0.1:8080:8080"
|
||||
expose:
|
||||
- "8082"
|
||||
command:
|
||||
- "--api=true"
|
||||
- "--api.insecure=true"
|
||||
- "--api.dashboard=true"
|
||||
- "--log.level=DEBUG"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--entryPoints.metrics.address=:8082"
|
||||
- "--metrics.prometheus.entryPoint=metrics"
|
||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
||||
# TESTING
|
||||
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
- "--certificatesresolvers.myresolver.acme.email=$MAIL"
|
||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
||||
volumes:
|
||||
- "./traefik/letsencrypt:/letsencrypt"
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
|
||||
### POKT
|
||||
pocket-lt-1:
|
||||
build: pokt
|
||||
ports:
|
||||
- "127.0.0.1:8081:8081"
|
||||
- "26656:26656"
|
||||
expose:
|
||||
- 26656
|
||||
- 26660
|
||||
- 8081
|
||||
- 8083
|
||||
#command: pocket start --simulateRelay
|
||||
environment:
|
||||
- POCKET_CORE_KEY=$POKT_LT_1_POCKET_CORE_KEY
|
||||
- POCKET_CORE_PASSPHRASE=$POKT_LT_1_POCKET_CORE_PASSPHRASE
|
||||
- POCKET_SNAPSHOT=$POCKET_SNAPSHOT
|
||||
volumes:
|
||||
- pocket-lt-1:/home/app/.pocket/data
|
||||
- pocket-lt-1-addrbook:/home/app/.pocket/addrbook
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.services.pocket-lt-1.loadbalancer.server.port=8081"
|
||||
- "traefik.http.routers.pocket-lt-1.entrypoints=websecure"
|
||||
- "traefik.http.routers.pocket-lt-1.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.pocket-lt-1.rule=Host(`$POKT_LT_1_DOMAIN`) && Path(`/v1`, `/v1/client/{dispatch|relay|challenge|sim}`)"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8083"
|
||||
- "prometheus-scrape.job_name=pocket-lt-1"
|
||||
|
||||
|
||||
pocket-lt-2:
|
||||
build: pokt
|
||||
ports:
|
||||
- "127.0.0.1:8082:8081"
|
||||
- "26657:26656"
|
||||
expose:
|
||||
- 26656
|
||||
- 26660
|
||||
- 8081
|
||||
- 8083
|
||||
#command: pocket start --simulateRelay
|
||||
environment:
|
||||
- POCKET_CORE_KEY=$POKT_LT_2_POCKET_CORE_KEY
|
||||
- POCKET_CORE_PASSPHRASE=$POKT_LT_2_POCKET_CORE_PASSPHRASE
|
||||
- POCKET_SNAPSHOT=$POCKET_SNAPSHOT
|
||||
volumes:
|
||||
- pocket-lt-2:/home/app/.pocket/data
|
||||
- pocket-lt-2-addrbook:/home/app/.pocket/addrbook
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.services.pocket-lt-2.loadbalancer.server.port=8081"
|
||||
- "traefik.http.routers.pocket-lt-2.entrypoints=websecure"
|
||||
- "traefik.http.routers.pocket-lt-2.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.pocket-lt-2.rule=Host(`$POKT_LT_2_DOMAIN`) && Path(`/v1`, `/v1/client/{dispatch|relay|challenge|sim}`)"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8083"
|
||||
- "prometheus-scrape.job_name=pocket-lt-2"
|
||||
|
||||
# pocket-lt-3:
|
||||
# build: pokt
|
||||
# ports:
|
||||
# - "127.0.0.1:8082:8081"
|
||||
# - "26657:26656"
|
||||
# expose:
|
||||
# - 26656
|
||||
# - 26660
|
||||
# - 8081
|
||||
# - 8083
|
||||
# #command: pocket start --simulateRelay
|
||||
# environment:
|
||||
# - POCKET_CORE_KEY=$POKT_LT_3_POCKET_CORE_KEY
|
||||
# - POCKET_CORE_PASSPHRASE=$POKT_LT_3_POCKET_CORE_PASSPHRASE
|
||||
# - POCKET_SNAPSHOT=$POCKET_SNAPSHOT
|
||||
# volumes:
|
||||
# - pocket-lt-3:/home/app/.pocket/data
|
||||
# - pocket-lt-3-addrbook:/home/app/.pocket/addrbook
|
||||
# restart: unless-stopped
|
||||
# labels:
|
||||
# - "traefik.enable=true"
|
||||
# - "traefik.http.services.pocket-lt-3.loadbalancer.server.port=8081"
|
||||
# - "traefik.http.routers.pocket-lt-3.entrypoints=websecure"
|
||||
# - "traefik.http.routers.pocket-lt-3.tls.certresolver=myresolver"
|
||||
# - "traefik.http.routers.pocket-lt-3.rule=Host(`$POKT_LT_3_DOMAIN`) && Path(`/v1`, `/v1/client/{dispatch|relay|challenge|sim}`)"
|
||||
# - "prometheus-scrape.enabled=true"
|
||||
# - "prometheus-scrape.port=8083"
|
||||
# - "prometheus-scrape.job_name=pocket-lt-3"
|
||||
|
||||
haproxy:
|
||||
build: haproxy
|
||||
volumes:
|
||||
- ./haproxy:/usr/local/etc/haproxy
|
||||
expose:
|
||||
- "8404"
|
||||
- "80"
|
||||
ports:
|
||||
- "127.0.0.1:80:80"
|
||||
restart: always
|
||||
labels:
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8404"
|
||||
- "prometheus-scrape.job_name=haproxy"
|
||||
- "prometheus-scrape.metrics_path=/metrics"
|
||||
|
||||
### VOLUMES
|
||||
volumes:
|
||||
pocket-lt-1:
|
||||
pocket-lt-1-addrbook:
|
||||
pocket-lt-2:
|
||||
pocket-lt-2-addrbook:
|
||||
# pocket-lt-3:
|
||||
# pocket-lt-3-addrbook:
|
||||
162
pokt-test.yml
Normal file
162
pokt-test.yml
Normal file
@@ -0,0 +1,162 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
|
||||
traefik:
|
||||
image: traefik:latest
|
||||
container_name: traefik
|
||||
restart: always
|
||||
ports:
|
||||
- "443:443"
|
||||
- "127.0.0.1:8080:8080"
|
||||
command:
|
||||
- "--api=true"
|
||||
- "--api.insecure=true"
|
||||
- "--api.dashboard=true"
|
||||
- "--log.level=DEBUG"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
||||
# TESTING
|
||||
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
- "--certificatesresolvers.myresolver.acme.email=$MAIL"
|
||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
||||
volumes:
|
||||
- "./traefik/letsencrypt:/letsencrypt"
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
|
||||
pocket-testnet:
|
||||
build: pokt
|
||||
ports:
|
||||
- "127.0.0.1:8081:8081"
|
||||
- "26656:26656"
|
||||
expose:
|
||||
- 26656
|
||||
- 8081
|
||||
- 8083
|
||||
environment:
|
||||
- POCKET_CORE_KEY=$POCKET_CORE_KEY_TEST
|
||||
- POCKET_CORE_PASSPHRASE=$POCKET_CORE_PASSPHRASE_TEST
|
||||
volumes:
|
||||
- pocket-testnet:/home/app/.pocket/data
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.services.pocket-testnet.loadbalancer.server.port=8081"
|
||||
- "traefik.http.routers.pocket-testnet.entrypoints=websecure"
|
||||
- "traefik.http.routers.pocket-testnet.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.pocket-testnet.rule=Host(`$TEST_DOMAIN_1`) && Path(`/v1`, `/v1/client/{dispatch|relay|challenge|sim}`)"
|
||||
|
||||
pocket-mainnet:
|
||||
build: pokt
|
||||
ports:
|
||||
- "127.0.0.1:8082:8081"
|
||||
- "26657:26656"
|
||||
expose:
|
||||
- 26656
|
||||
- 8081
|
||||
- 8083
|
||||
environment:
|
||||
- POCKET_SNAPSHOT=$POCKET_SNAPSHOT
|
||||
- POCKET_CORE_KEY=$POCKET_CORE_KEY_MAINNET
|
||||
- POCKET_CORE_PASSPHRASE=$POCKET_CORE_PASSPHRASE_MAINNET
|
||||
volumes:
|
||||
- pocket-mainnet:/home/app/.pocket/data
|
||||
- pocket-mainnet-config:/home/app/.pocket/config
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.services.pocket-mainnet.loadbalancer.server.port=8081"
|
||||
- "traefik.http.routers.pocket-mainnet.entrypoints=websecure"
|
||||
- "traefik.http.routers.pocket-mainnet.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.pocket-mainnet.rule=Host(`$TEST_DOMAIN_2`) && Path(`/v1`, `/v1/client/{dispatch|relay|challenge|sim}`)"
|
||||
|
||||
### MONITORING
|
||||
### WIREGUARD
|
||||
wireguard:
|
||||
image: lscr.io/linuxserver/wireguard
|
||||
container_name: wireguard
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- SYS_MODULE
|
||||
environment:
|
||||
- PUID=$PUID
|
||||
- PGID=$PGID
|
||||
volumes:
|
||||
- ./wireguard/config/wg0.conf:/config/wg0.conf
|
||||
- /lib/modules:/lib/modules
|
||||
# Expose prometheus port
|
||||
expose:
|
||||
- 9090
|
||||
ports:
|
||||
- $SERVERPORT:$SERVERPORT/udp
|
||||
sysctls:
|
||||
- net.ipv4.conf.all.src_valid_mark=1
|
||||
restart: unless-stopped
|
||||
|
||||
prometheus:
|
||||
image: prom/prometheus:v2.30.3
|
||||
container_name: prometheus
|
||||
volumes:
|
||||
- ./prometheus:/etc/prometheus
|
||||
- prometheus_data:/prometheus
|
||||
command:
|
||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||
- '--storage.tsdb.path=/prometheus'
|
||||
- '--web.console.libraries=/etc/prometheus/console_libraries'
|
||||
- '--web.console.templates=/etc/prometheus/consoles'
|
||||
- '--storage.tsdb.retention.time=200h'
|
||||
- '--web.enable-lifecycle'
|
||||
restart: unless-stopped
|
||||
network_mode: "service:wireguard"
|
||||
labels:
|
||||
org.label-schema.group: "monitoring"
|
||||
depends_on:
|
||||
- wireguard
|
||||
|
||||
nodeexporter:
|
||||
image: prom/node-exporter:v1.2.2
|
||||
container_name: nodeexporter
|
||||
volumes:
|
||||
- /proc:/host/proc:ro
|
||||
- /sys:/host/sys:ro
|
||||
- /:/rootfs:ro
|
||||
command:
|
||||
- '--path.procfs=/host/proc'
|
||||
- '--path.rootfs=/rootfs'
|
||||
- '--path.sysfs=/host/sys'
|
||||
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
|
||||
restart: unless-stopped
|
||||
expose:
|
||||
- 9100
|
||||
labels:
|
||||
org.label-schema.group: "monitoring"
|
||||
|
||||
cadvisor:
|
||||
image: gcr.io/cadvisor/cadvisor:v0.42.0
|
||||
container_name: cadvisor
|
||||
privileged: true
|
||||
devices:
|
||||
- /dev/kmsg:/dev/kmsg
|
||||
volumes:
|
||||
- /:/rootfs:ro
|
||||
- /var/run:/var/run:ro
|
||||
- /sys:/sys:ro
|
||||
- /var/lib/docker:/var/lib/docker:ro
|
||||
#- /cgroup:/cgroup:ro #doesn't work on MacOS only for Linux
|
||||
restart: unless-stopped
|
||||
expose:
|
||||
- 8080
|
||||
labels:
|
||||
org.label-schema.group: "monitoring"
|
||||
|
||||
### VOLUMES
|
||||
volumes:
|
||||
pocket-testnet:
|
||||
pocket-mainnet:
|
||||
pocket-mainnet-config:
|
||||
prometheus_data:
|
||||
|
||||
13
pokt/Dockerfile
Normal file
13
pokt/Dockerfile
Normal file
@@ -0,0 +1,13 @@
|
||||
FROM poktnetwork/pocket-core:RC-0.9.1.3
|
||||
|
||||
COPY --chown=1005:1001 config.json /home/app/.pocket/config/config.json
|
||||
COPY --chown=1005:1001 chains.json /home/app/.pocket/config/chains.json
|
||||
COPY --chown=1005:1001 bootstrap.sh /home/app/.pocket/bootstrap.sh
|
||||
RUN mkdir /home/app/.pocket/addrbook
|
||||
RUN mkdir /home/app/.pocket/data
|
||||
RUN chown -R 1005:1001 /home/app/.pocket/data
|
||||
|
||||
|
||||
ENV POCKET_MAIN_SEEDS=03b74fa3c68356bb40d58ecc10129479b159a145@seed1.mainnet.pokt.network:20656,64c91701ea98440bc3674fdb9a99311461cdfd6f@seed2.mainnet.pokt.network:21656,0057ee693f3ce332c4ffcb499ede024c586ae37b@seed3.mainnet.pokt.network:22856,9fd99b89947c6af57cd0269ad01ecb99960177cd@seed4.mainnet.pokt.network:23856,f2a4d0ec9d50ea61db18452d191687c899c3ca42@seed5.mainnet.pokt.network:24856,f2a9705924e8d0e11fed60484da2c3d22f7daba8@seed6.mainnet.pokt.network:25856,582177fd65dd03806eeaa2e21c9049e653672c7e@seed7.mainnet.pokt.network:26856,2ea0b13ab823986cfb44292add51ce8677b899ad@seed8.mainnet.pokt.network:27856,a5f4a4cd88db9fd5def1574a0bffef3c6f354a76@seed9.mainnet.pokt.network:28856,d4039bd71d48def9f9f61f670c098b8956e52a08@seed10.mainnet.pokt.network:29856,5c133f07ed296bb9e21e3e42d5f26e0f7d2b2832@poktseed100.chainflow.io:26656,361b1936d3fbe516628ebd6a503920fc4fc0f6a7@seed.pokt.rivet.cloud:26656
|
||||
|
||||
CMD ["bash", "/home/app/.pocket/bootstrap.sh", "&&", "pocket", "start", "--seeds", "03b74fa3c68356bb40d58ecc10129479b159a145@seed1.mainnet.pokt.network:20656,64c91701ea98440bc3674fdb9a99311461cdfd6f@seed2.mainnet.pokt.network:21656,0057ee693f3ce332c4ffcb499ede024c586ae37b@seed3.mainnet.pokt.network:22856,9fd99b89947c6af57cd0269ad01ecb99960177cd@seed4.mainnet.pokt.network:23856,f2a4d0ec9d50ea61db18452d191687c899c3ca42@seed5.mainnet.pokt.network:24856,f2a9705924e8d0e11fed60484da2c3d22f7daba8@seed6.mainnet.pokt.network:25856,582177fd65dd03806eeaa2e21c9049e653672c7e@seed7.mainnet.pokt.network:26856,2ea0b13ab823986cfb44292add51ce8677b899ad@seed8.mainnet.pokt.network:27856,a5f4a4cd88db9fd5def1574a0bffef3c6f354a76@seed9.mainnet.pokt.network:28856,d4039bd71d48def9f9f61f670c098b8956e52a08@seed10.mainnet.pokt.network:29856,5c133f07ed296bb9e21e3e42d5f26e0f7d2b2832@poktseed100.chainflow.io:26656,361b1936d3fbe516628ebd6a503920fc4fc0f6a7@seed.pokt.rivet.cloud:26656", "--mainnet"]
|
||||
10
pokt/bootstrap.sh
Executable file
10
pokt/bootstrap.sh
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ ! -f /home/app/.pocket/data/setupdone ]
|
||||
then
|
||||
mkdir -p /home/app/.pocket/data
|
||||
echo "wget -q -O - '$POCKET_SNAPSHOT' | tar -xvz -C /home/app/.pocket/data/"
|
||||
wget -q -O - $POCKET_SNAPSHOT | tar -xvz -C /home/app/.pocket/data/
|
||||
touch /home/app/.pocket/data/setupdone
|
||||
fi
|
||||
|
||||
58
pokt/chains.json
Normal file
58
pokt/chains.json
Normal file
@@ -0,0 +1,58 @@
|
||||
[
|
||||
{
|
||||
"id": "0001",
|
||||
"url": "http://localhost:8081"
|
||||
},
|
||||
{
|
||||
"id": "0004",
|
||||
"url": "http://haproxy/bsc"
|
||||
},
|
||||
{
|
||||
"id": "0005",
|
||||
"url": "http://haproxy/fuse"
|
||||
},
|
||||
{
|
||||
"id": "0009",
|
||||
"url": "http://haproxy/polygon"
|
||||
},
|
||||
{
|
||||
"id": "0021",
|
||||
"url": "http://haproxy/mainnet"
|
||||
},
|
||||
{
|
||||
"id": "0022",
|
||||
"url": "http://haproxy/erigon"
|
||||
},
|
||||
{
|
||||
"id": "0023",
|
||||
"url": "http://haproxy/ropsten"
|
||||
},
|
||||
{
|
||||
"id": "0025",
|
||||
"url": "http://haproxy/rinkeby"
|
||||
},
|
||||
{
|
||||
"id": "0026",
|
||||
"url": "http://haproxy/goerli"
|
||||
},
|
||||
{
|
||||
"id": "0027",
|
||||
"url": "http://haproxy/xdai"
|
||||
},
|
||||
{
|
||||
"id": "0028",
|
||||
"url": "http://haproxy/erigon"
|
||||
},
|
||||
{
|
||||
"id": "0040",
|
||||
"url": "http://haproxy/harmony"
|
||||
},
|
||||
{
|
||||
"id": "0049",
|
||||
"url": "http://haproxy/fantom"
|
||||
},
|
||||
{
|
||||
"id": "0006",
|
||||
"url": "http://haproxy/solana"
|
||||
}
|
||||
]
|
||||
157
pokt/config.json
Normal file
157
pokt/config.json
Normal file
@@ -0,0 +1,157 @@
|
||||
{
|
||||
"tendermint_config": {
|
||||
"RootDir": "/home/app/.pocket",
|
||||
"ProxyApp": "tcp://127.0.0.1:26658",
|
||||
"Moniker": "stakesquid",
|
||||
"FastSyncMode": true,
|
||||
"DBBackend": "goleveldb",
|
||||
"LevelDBOptions": {
|
||||
"block_cache_capacity": 83886,
|
||||
"block_cache_evict_removed": false,
|
||||
"block_size": 4096,
|
||||
"disable_buffer_pool": true,
|
||||
"open_files_cache_capacity": -1,
|
||||
"write_buffer": 838860
|
||||
},
|
||||
"DBPath": "data",
|
||||
"LogLevel": "*:info, *:error",
|
||||
"LogFormat": "plain",
|
||||
"Genesis": "config/genesis.json",
|
||||
"PrivValidatorKey": "priv_val_key.json",
|
||||
"PrivValidatorState": "priv_val_state.json",
|
||||
"PrivValidatorListenAddr": "",
|
||||
"NodeKey": "node_key.json",
|
||||
"ABCI": "socket",
|
||||
"ProfListenAddress": "",
|
||||
"FilterPeers": false,
|
||||
"RPC": {
|
||||
"RootDir": "/home/app/.pocket",
|
||||
"ListenAddress": "tcp://127.0.0.1:26657",
|
||||
"CORSAllowedOrigins": [],
|
||||
"CORSAllowedMethods": [
|
||||
"HEAD",
|
||||
"GET",
|
||||
"POST"
|
||||
],
|
||||
"CORSAllowedHeaders": [
|
||||
"Origin",
|
||||
"Accept",
|
||||
"Content-Type",
|
||||
"X-Requested-With",
|
||||
"X-Server-Time"
|
||||
],
|
||||
"GRPCListenAddress": "",
|
||||
"GRPCMaxOpenConnections": 2500,
|
||||
"Unsafe": false,
|
||||
"MaxOpenConnections": 2500,
|
||||
"MaxSubscriptionClients": 100,
|
||||
"MaxSubscriptionsPerClient": 5,
|
||||
"TimeoutBroadcastTxCommit": 10000000000,
|
||||
"MaxBodyBytes": 1000000,
|
||||
"MaxHeaderBytes": 1048576,
|
||||
"TLSCertFile": "",
|
||||
"TLSKeyFile": ""
|
||||
},
|
||||
"P2P": {
|
||||
"RootDir": "/home/app/.pocket",
|
||||
"ListenAddress": "tcp://0.0.0.0:26656",
|
||||
"ExternalAddress": "",
|
||||
"Seeds": "",
|
||||
"PersistentPeers": "",
|
||||
"UPNP": false,
|
||||
"AddrBook": "addrbook/addrbook.json",
|
||||
"AddrBookStrict": false,
|
||||
"MaxNumInboundPeers": 14,
|
||||
"MaxNumOutboundPeers": 7,
|
||||
"UnconditionalPeerIDs": "",
|
||||
"PersistentPeersMaxDialPeriod": 0,
|
||||
"FlushThrottleTimeout": 100000000,
|
||||
"MaxPacketMsgPayloadSize": 1024,
|
||||
"SendRate": 5120000,
|
||||
"RecvRate": 5120000,
|
||||
"PexReactor": true,
|
||||
"SeedMode": false,
|
||||
"PrivatePeerIDs": "",
|
||||
"AllowDuplicateIP": true,
|
||||
"HandshakeTimeout": 20000000000,
|
||||
"DialTimeout": 3000000000,
|
||||
"TestDialFail": false,
|
||||
"TestFuzz": false,
|
||||
"TestFuzzConfig": {
|
||||
"Mode": 0,
|
||||
"MaxDelay": 3000000000,
|
||||
"ProbDropRW": 0.2,
|
||||
"ProbDropConn": 0,
|
||||
"ProbSleep": 0
|
||||
}
|
||||
},
|
||||
"Mempool": {
|
||||
"RootDir": "/home/app/.pocket",
|
||||
"Recheck": true,
|
||||
"Broadcast": true,
|
||||
"WalPath": "",
|
||||
"Size": 9000,
|
||||
"MaxTxsBytes": 1073741824,
|
||||
"CacheSize": 9000,
|
||||
"MaxTxBytes": 1048576
|
||||
},
|
||||
"FastSync": {
|
||||
"Version": "v1"
|
||||
},
|
||||
"Consensus": {
|
||||
"RootDir": "/home/app/.pocket",
|
||||
"WalPath": "data/cs.wal/wal",
|
||||
"TimeoutPropose": 120000000000,
|
||||
"TimeoutProposeDelta": 10000000000,
|
||||
"TimeoutPrevote": 60000000000,
|
||||
"TimeoutPrevoteDelta": 10000000000,
|
||||
"TimeoutPrecommit": 60000000000,
|
||||
"TimeoutPrecommitDelta": 10000000000,
|
||||
"TimeoutCommit": 780000000000,
|
||||
"SkipTimeoutCommit": false,
|
||||
"CreateEmptyBlocks": true,
|
||||
"CreateEmptyBlocksInterval": 900000000000,
|
||||
"PeerGossipSleepDuration": 30000000000,
|
||||
"PeerQueryMaj23SleepDuration": 20000000000
|
||||
},
|
||||
"TxIndex": {
|
||||
"Indexer": "kv",
|
||||
"IndexKeys": "tx.hash,tx.height,message.sender,transfer.recipient",
|
||||
"IndexAllKeys": false
|
||||
},
|
||||
"Instrumentation": {
|
||||
"Prometheus": true,
|
||||
"PrometheusListenAddr": ":26660",
|
||||
"MaxOpenConnections": 3,
|
||||
"Namespace": "tendermint"
|
||||
}
|
||||
},
|
||||
"pocket_config": {
|
||||
"data_dir": "/home/app/.pocket",
|
||||
"genesis_file": "genesis.json",
|
||||
"chains_name": "chains.json",
|
||||
"evidence_db_name": "pocket_evidence",
|
||||
"tendermint_uri": "tcp://localhost:26657",
|
||||
"keybase_name": "pocket-keybase",
|
||||
"rpc_port": "8081",
|
||||
"client_block_sync_allowance": 10,
|
||||
"max_evidence_cache_entries": 500,
|
||||
"max_session_cache_entries": 500,
|
||||
"json_sort_relay_responses": true,
|
||||
"remote_cli_url": "http://localhost:8081",
|
||||
"user_agent": "",
|
||||
"validator_cache_size": 40000,
|
||||
"application_cache_size": 10000,
|
||||
"rpc_timeout": 30000,
|
||||
"pocket_prometheus_port": "8083",
|
||||
"prometheus_max_open_files": 3,
|
||||
"max_claim_age_for_proof_retry": 32,
|
||||
"proof_prevalidation": false,
|
||||
"ctx_cache_size": 20,
|
||||
"abci_logging": false,
|
||||
"show_relay_errors": true,
|
||||
"disable_tx_events": true,
|
||||
"iavl_cache_size": 5000000,
|
||||
"chains_hot_reload": false
|
||||
}
|
||||
}
|
||||
34
polygon-archive.yml
Normal file
34
polygon-archive.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
bor:
|
||||
build:
|
||||
args:
|
||||
UPSTREAM_VERSION: v0.2.14
|
||||
context: ./polygon/bor
|
||||
dockerfile: Dockerfile
|
||||
environment:
|
||||
- SNAPSHOT_URL=https://matic-blockchain-snapshots.s3-accelerate.amazonaws.com/matic-mainnet/bor-archive-node-snapshot-2022-03-17.tar.gz
|
||||
- BOOTSTRAP=1
|
||||
- ARCHIVE=1
|
||||
volumes:
|
||||
- "bor-archive_data:/datadir"
|
||||
ports:
|
||||
- "40303:40303"
|
||||
- "40303:40303/udp"
|
||||
depends_on:
|
||||
- heimdallr
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.bor-stripprefix.stripprefix.prefixes=/polygon-archive"
|
||||
- "traefik.http.services.bor.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.bor.entrypoints=websecure"
|
||||
- "traefik.http.routers.bor.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.bor.rule=Host(`$DOMAIN`) && PathPrefix(`/polygon-archive`)"
|
||||
- "traefik.http.routers.bor.middlewares=bor-stripprefix, ipwhitelist"
|
||||
networks:
|
||||
- chains
|
||||
|
||||
volumes:
|
||||
bor-archive_data:
|
||||
52
polygon-base.yml
Normal file
52
polygon-base.yml
Normal file
@@ -0,0 +1,52 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
|
||||
rabbitmq:
|
||||
container_name: rabbitmq
|
||||
image: "rabbitmq:3-alpine"
|
||||
expose:
|
||||
- "5672"
|
||||
restart: unless-stopped
|
||||
|
||||
heimdalld:
|
||||
build: &ref_0
|
||||
args:
|
||||
UPSTREAM_VERSION: v0.2.8
|
||||
context: ./polygon/heimdall
|
||||
dockerfile: Dockerfile
|
||||
volumes:
|
||||
- "heimdall_data:/root/.heimdalld"
|
||||
ports:
|
||||
- "26656:26656"
|
||||
- "127.0.0.1:26657:26657"
|
||||
depends_on:
|
||||
- rabbitmq
|
||||
- geth-mainnet
|
||||
environment:
|
||||
- MONIKER=StakeSquid
|
||||
- SNAPSHOT_URL=https://matic-blockchain-snapshots.s3-accelerate.amazonaws.com/matic-mainnet/heimdall-snapshot-2022-10-17.tar.gz
|
||||
- BOOTSTRAP=1
|
||||
- "ETH1_RPC_URL=http://geth-mainnet:8545/"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- chains
|
||||
|
||||
heimdallr:
|
||||
environment:
|
||||
- REST_SERVER=1
|
||||
- "ETH1_RPC_URL=http://geth-mainnet:8545/"
|
||||
build: *ref_0
|
||||
volumes:
|
||||
- "heimdall_data:/root/.heimdalld"
|
||||
expose:
|
||||
- "1317"
|
||||
depends_on:
|
||||
- heimdalld
|
||||
- geth-mainnet
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- chains
|
||||
|
||||
volumes:
|
||||
heimdall_data:
|
||||
37
polygon-fullnode.yml
Normal file
37
polygon-fullnode.yml
Normal file
@@ -0,0 +1,37 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
bor:
|
||||
build:
|
||||
args:
|
||||
UPSTREAM_VERSION: v0.2.14
|
||||
context: ./polygon/bor
|
||||
dockerfile: Dockerfile
|
||||
sysctls:
|
||||
net.ipv4.tcp_slow_start_after_idle: 0
|
||||
net.ipv4.tcp_no_metrics_save: 1
|
||||
environment:
|
||||
- SNAPSHOT_URL=https://matic-blockchain-snapshots.s3-accelerate.amazonaws.com/matic-mainnet/bor-fullnode-snapshot-2022-10-10.tar.gz
|
||||
- BOOTSTRAP=1
|
||||
- ARCHIVE=0
|
||||
volumes:
|
||||
- "bor_data:/datadir"
|
||||
ports:
|
||||
- "40303:40303"
|
||||
- "40303:40303/udp"
|
||||
depends_on:
|
||||
- heimdallr
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.bor-stripprefix.stripprefix.prefixes=/polygon"
|
||||
- "traefik.http.services.bor.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.bor.entrypoints=websecure"
|
||||
- "traefik.http.routers.bor.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.bor.rule=Host(`$DOMAIN`) && PathPrefix(`/polygon`)"
|
||||
- "traefik.http.routers.bor.middlewares=bor-stripprefix, ipwhitelist"
|
||||
networks:
|
||||
- chains
|
||||
|
||||
volumes:
|
||||
bor_data:
|
||||
28
polygon/bor/Dockerfile
Normal file
28
polygon/bor/Dockerfile
Normal file
@@ -0,0 +1,28 @@
|
||||
# Build Bor in a stock Go builder container
|
||||
FROM golang:1.16-alpine as builder
|
||||
|
||||
# Install packages we need
|
||||
RUN apk add --no-cache make gcc musl-dev linux-headers git
|
||||
|
||||
# Make a folder to work in
|
||||
RUN mkdir /bor
|
||||
|
||||
# Grab UPSTREAM_VERSION from Build Args
|
||||
ARG UPSTREAM_VERSION
|
||||
|
||||
# Clone the repo to that folder
|
||||
RUN git clone --branch ${UPSTREAM_VERSION} https://github.com/maticnetwork/bor.git /bor
|
||||
|
||||
# Build Bor
|
||||
RUN cd /bor && make bor
|
||||
|
||||
# Pull Bor into a second stage deploy alpine container
|
||||
FROM alpine:latest
|
||||
|
||||
RUN apk add --no-cache ca-certificates curl jq
|
||||
COPY --from=builder /bor/build/bin/bor /usr/local/bin/
|
||||
|
||||
# Set entrypoint
|
||||
COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod u+x /usr/local/bin/entrypoint.sh
|
||||
ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ]
|
||||
60
polygon/bor/scripts/entrypoint.sh
Executable file
60
polygon/bor/scripts/entrypoint.sh
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/bin/sh
|
||||
|
||||
# exit script on any error
|
||||
set -e
|
||||
|
||||
# Set Bor Home Directory
|
||||
BOR_HOME=/datadir
|
||||
|
||||
# Check for genesis file and download or update it if needed
|
||||
if [ ! -f "${BOR_HOME}/genesis.json" ];
|
||||
then
|
||||
echo "setting up initial configurations"
|
||||
cd ${BOR_HOME}
|
||||
echo "downloading launch genesis file"
|
||||
wget https://raw.githubusercontent.com/maticnetwork/launch/master/mainnet-v1/sentry/sentry/bor/genesis.json
|
||||
echo "initializing bor with genesis file"
|
||||
bor --datadir ${BOR_HOME} init ${BOR_HOME}/genesis.json
|
||||
else
|
||||
# Check if genesis file needs updating
|
||||
cd ${BOR_HOME}
|
||||
GREPSTRING=$(grep londonBlock genesis.json | wc -l) # v0-2-13 Update
|
||||
if [ ${GREPSTRING} == 0 ];
|
||||
then
|
||||
echo "Updating Genesis File"
|
||||
wget https://raw.githubusercontent.com/maticnetwork/launch/master/mainnet-v1/sentry/sentry/bor/genesis.json
|
||||
bor --datadir ${BOR_HOME} init ${BOR_HOME}/genesis.json
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${BOOTSTRAP}" == 1 ] && [ -n "${SNAPSHOT_URL}" ] && [ ! -f "${BOR_HOME}/bootstrapped" ];
|
||||
then
|
||||
echo "downloading snapshot from ${SNAPSHOT_URL}"
|
||||
mkdir -p ${BOR_HOME}/bor/chaindata
|
||||
wget --tries=0 -O - "${SNAPSHOT_URL}" | tar -xz -C ${BOR_HOME}/bor/chaindata && touch ${BOR_HOME}/bootstrapped
|
||||
fi
|
||||
|
||||
READY=$(curl -s http://heimdalld:26657/status | jq '.result.sync_info.catching_up')
|
||||
while [[ "${READY}" != "false" ]];
|
||||
do
|
||||
echo "Waiting for heimdalld to catch up."
|
||||
sleep 30
|
||||
READY=$(curl -s heimdalld:26657/status | jq '.result.sync_info.catching_up')
|
||||
done
|
||||
|
||||
if [ "${ARCHIVE}" == 1 ];
|
||||
then
|
||||
exec bor --port=40303 --maxpeers=${MAXPEERS:-200} --datadir=/datadir --networkid=137 --syncmode=full --gcmode=archive \
|
||||
--ipcpath ${BOR_HOME}/bor.ipc --bor.heimdall=http://heimdallr:1317 \
|
||||
--txpool.accountslots=16 --txpool.globalslots=131072 --txpool.accountqueue=64 --txpool.globalqueue=131072 \
|
||||
--txpool.lifetime='1h30m0s' --miner.gaslimit=200000000 --miner.gastarget=20000000 --miner.gasprice '30000000000' \
|
||||
--http --http.addr=0.0.0.0 --http.port=8545 --http.api=eth,net,web3,txpool,bor --http.corsdomain="*" --http.vhosts="*" \
|
||||
--ws --ws.addr=0.0.0.0 --ws.port=8545 --ws.api=eth,net,web3,txpool,bor --ws.origins="*"
|
||||
else
|
||||
exec bor --port=40303 --maxpeers=${MAXPEERS:-200} --datadir=/datadir --networkid=137 --syncmode=full \
|
||||
--ipcpath ${BOR_HOME}/bor.ipc --bor.heimdall=http://heimdallr:1317 \
|
||||
--txpool.accountslots=16 --txpool.globalslots=131072 --txpool.accountqueue=64 --txpool.globalqueue=131072 \
|
||||
--txpool.lifetime='1h30m0s' --miner.gaslimit=200000000 --miner.gastarget=20000000 --miner.gasprice '30000000000' \
|
||||
--http --http.addr=0.0.0.0 --http.port=8545 --http.api=eth,net,web3,txpool,bor --http.corsdomain="*" --http.vhosts="*" \
|
||||
--ws --ws.addr=0.0.0.0 --ws.port=8545 --ws.api=eth,net,web3,txpool,bor --ws.origins="*"
|
||||
fi
|
||||
31
polygon/erigon/Dockerfile
Normal file
31
polygon/erigon/Dockerfile
Normal file
@@ -0,0 +1,31 @@
|
||||
# Build Bor in a stock Go builder container
|
||||
FROM golang:1.19-alpine as builder
|
||||
|
||||
# Install packages we need
|
||||
RUN apk add --no-cache make g++ gcc musl-dev linux-headers git
|
||||
|
||||
# Grab ERIGON_VERSION from Build Args
|
||||
ARG ERIGON_VERSION
|
||||
|
||||
# Clone the repo to that folder
|
||||
RUN git clone --recurse-submodules -j8 https://github.com/maticnetwork/erigon.git
|
||||
|
||||
# change into repo
|
||||
WORKDIR ./erigon
|
||||
|
||||
# checkout version
|
||||
RUN git checkout ${ERIGON_VERSION}
|
||||
|
||||
# Build Bor
|
||||
RUN make erigon
|
||||
|
||||
# Pull Bor into a second stage deploy alpine container
|
||||
FROM alpine:latest
|
||||
|
||||
RUN apk add --no-cache ca-certificates curl jq libstdc++ libgcc
|
||||
COPY --from=builder /go/erigon/build/bin/erigon /usr/local/bin/
|
||||
|
||||
# Set entrypoint
|
||||
COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod u+x /usr/local/bin/entrypoint.sh
|
||||
ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ]
|
||||
37
polygon/erigon/scripts/entrypoint.sh
Normal file
37
polygon/erigon/scripts/entrypoint.sh
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
|
||||
# exit script on any error
|
||||
set -e
|
||||
|
||||
# Set Bor Home Directory
|
||||
ERIGON_HOME=/datadir
|
||||
|
||||
|
||||
if [ "${BOOTSTRAP}" == 1 ] && [ -n "${SNAPSHOT_URL}" ] && [ ! -f "${ERIGON_HOME}/bootstrapped" ];
|
||||
then
|
||||
echo "downloading snapshot from ${SNAPSHOT_URL}"
|
||||
mkdir -p ${ERIGON_HOME}
|
||||
wget --tries=0 -O - "${SNAPSHOT_URL}" | tar -xz -C ${ERIGON_HOME} && touch ${ERIGON_HOME}/bootstrapped
|
||||
fi
|
||||
|
||||
READY=$(curl -s http://heimdalld:26657/status | jq '.result.sync_info.catching_up')
|
||||
while [[ "${READY}" != "false" ]];
|
||||
do
|
||||
echo "Waiting for heimdalld to catch up."
|
||||
sleep 30
|
||||
READY=$(curl -s heimdalld:26657/status | jq '.result.sync_info.catching_up')
|
||||
done
|
||||
|
||||
# add snap.keepblocks=true as mentioned on https://snapshot.polygon.technology/
|
||||
|
||||
exec erigon \
|
||||
--chain=bor-mainnet \
|
||||
--bor.heimdall=http://heimdallr:1317 \
|
||||
--datadir=${ERIGON_HOME} \
|
||||
--http --http.addr="0.0.0.0" --http.port="8545" --http.compression --http.vhosts="*" --http.corsdomain="*" --http.api="eth,debug,net,trace,web3,erigon,bor" \
|
||||
--ws --ws.compression \
|
||||
--snap.keepblocks=true \
|
||||
--snapshots="true" \
|
||||
--torrent.upload.rate="1250mb" --torrent.download.rate="1250mb" \
|
||||
--metrics --metrics.addr=0.0.0.0 --metrics.port=6060 \
|
||||
--pprof --pprof.addr=0.0.0.0 --pprof.port=6061
|
||||
28
polygon/heimdall/Dockerfile
Normal file
28
polygon/heimdall/Dockerfile
Normal file
@@ -0,0 +1,28 @@
|
||||
# Build and Install Heimdall in a stock Go builder container
|
||||
FROM golang:1.17-alpine
|
||||
|
||||
# Install packages we need
|
||||
RUN apk add --no-cache make gcc musl-dev linux-headers git
|
||||
|
||||
# create go src directory and clone heimdall
|
||||
RUN mkdir -p /root/heimdall
|
||||
|
||||
# Grab UPSTREAM_VERSION from Build Args
|
||||
ARG UPSTREAM_VERSION
|
||||
|
||||
# Clone hemidall release into folder
|
||||
RUN git clone --branch ${UPSTREAM_VERSION} https://github.com/maticnetwork/heimdall.git /root/heimdall
|
||||
|
||||
# change work directory
|
||||
WORKDIR /root/heimdall
|
||||
|
||||
# GOBIN required for go install
|
||||
ENV GOBIN $GOPATH/bin
|
||||
|
||||
# Make and Install Heimdall
|
||||
RUN make install
|
||||
|
||||
# Set entrypoint
|
||||
COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||
RUN chmod u+x /usr/local/bin/entrypoint.sh
|
||||
ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ]
|
||||
50
polygon/heimdall/scripts/entrypoint.sh
Executable file
50
polygon/heimdall/scripts/entrypoint.sh
Executable file
@@ -0,0 +1,50 @@
|
||||
#!/bin/sh
|
||||
|
||||
# exit script on any error
|
||||
set -e
|
||||
|
||||
# Set Heimdall Home Directory
|
||||
HEIMDALLD_HOME=/root/.heimdalld
|
||||
|
||||
if [ ! -f "$HEIMDALLD_HOME/config/config.toml" ];
|
||||
then
|
||||
echo "setting up initial configurations"
|
||||
heimdalld init
|
||||
cd $HEIMDALLD_HOME/config
|
||||
|
||||
echo "removing autogenerated genesis file"
|
||||
rm genesis.json
|
||||
|
||||
echo "downloading launch genesis file"
|
||||
wget https://raw.githubusercontent.com/maticnetwork/launch/master/mainnet-v1/without-sentry/heimdall/config/genesis.json
|
||||
|
||||
echo "overwriting toml config lines"
|
||||
# config.toml
|
||||
# CORS
|
||||
sed -i "s#^cors_allowed_origins.*#cors_allowed_origins = [\"*\"]#" config.toml
|
||||
# SEEDS
|
||||
sed -i "s#^seeds.*#seeds = \"${BOOTNODES:-"f4f605d60b8ffaaf15240564e58a81103510631c@159.203.9.164:26656,4fb1bc820088764a564d4f66bba1963d47d82329@44.232.55.71:26656,2eadba4be3ce47ac8db0a3538cb923b57b41c927@35.199.4.13:26656,3b23b20017a6f348d329c102ddc0088f0a10a444@35.221.13.28:26656,25f5f65a09c56e9f1d2d90618aa70cd358aa68da@35.230.116.151:26656"}\"#" config.toml
|
||||
# heimdall-config.toml
|
||||
# BOR
|
||||
sed -i "s#^bor_rpc_url.*#bor_rpc_url = \"http://bor:8545\"#" heimdall-config.toml
|
||||
# ETH1
|
||||
sed -i "s#^eth_rpc_url.*#eth_rpc_url = \"${ETH1_RPC_URL}\"#" heimdall-config.toml
|
||||
# RABBITMQ
|
||||
sed -i "s#^amqp_url.*#amqp_url = \"amqp://guest:guest@rabbitmq:5672\"#" heimdall-config.toml
|
||||
fi
|
||||
|
||||
if [ "${BOOTSTRAP}" == 1 ] && [ -n "${SNAPSHOT_URL}" ] && [ ! -f "$HEIMDALLD_HOME/bootstrapped" ];
|
||||
then
|
||||
echo "downloading snapshot from ${SNAPSHOT_URL}"
|
||||
mkdir -p ${HEIMDALLD_HOME}/data
|
||||
wget -c "${SNAPSHOT_URL}" -O - | tar -xz -C ${HEIMDALLD_HOME}/data && touch ${HEIMDALLD_HOME}/bootstrapped
|
||||
fi
|
||||
|
||||
if [ -n "$REST_SERVER" ];
|
||||
then
|
||||
EXEC="heimdalld rest-server --chain-id=137 --laddr=tcp://0.0.0.0:1317 --max-open=1000 --node=tcp://heimdalld:26657 --trust-node=true"
|
||||
else
|
||||
EXEC="heimdalld start --moniker=$MONIKER --fast_sync --p2p.laddr=tcp://0.0.0.0:26656 --p2p.upnp=false --pruning=syncable --rpc.laddr=tcp://0.0.0.0:26657 --with-tendermint=true"
|
||||
fi
|
||||
|
||||
exec ${EXEC}
|
||||
@@ -13,29 +13,13 @@ rule_files:
|
||||
|
||||
# A scrape configuration containing exactly one endpoint to scrape.
|
||||
scrape_configs:
|
||||
- job_name: 'nodeexporter'
|
||||
scrape_interval: 5s
|
||||
static_configs:
|
||||
- targets: ['nodeexporter:9100']
|
||||
|
||||
- job_name: 'cadvisor'
|
||||
scrape_interval: 5s
|
||||
static_configs:
|
||||
- targets: ['cadvisor:8080']
|
||||
|
||||
- job_name: 'prometheus'
|
||||
scrape_interval: 10s
|
||||
static_configs:
|
||||
- targets: ['localhost:9090']
|
||||
|
||||
- job_name: 'harmony-mainnet'
|
||||
scrape_interval: 10s
|
||||
honor_labels: true
|
||||
static_configs:
|
||||
- targets: ['harmony-mainnet:9900']
|
||||
|
||||
- job_name: 'traefik'
|
||||
scrape_interval: 10s
|
||||
honor_labels: true
|
||||
static_configs:
|
||||
- targets: ['traefik:8082']
|
||||
- job_name: 'service_discovery'
|
||||
file_sd_configs:
|
||||
- files:
|
||||
- '/prometheus-docker-sd/docker-targets.json'
|
||||
29
prysm.yml
Normal file
29
prysm.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
prysm:
|
||||
image: prysmaticlabs/prysm-beacon-chain:stable
|
||||
ports:
|
||||
- "127.0.0.1:3500:3500"
|
||||
- "13000:13000"
|
||||
- "12000:12000/udp"
|
||||
command:
|
||||
[
|
||||
"--datadir=/data",
|
||||
"--jwt-secret=/jwtsecret",
|
||||
"--rpc-host=0.0.0.0",
|
||||
"--grpc-gateway-host=0.0.0.0",
|
||||
"--monitoring-host=0.0.0.0",
|
||||
"--execution-endpoint=http://$EXECUTION_CLIENT:8551",
|
||||
"--accept-terms-of-use"
|
||||
]
|
||||
networks:
|
||||
- chains
|
||||
volumes:
|
||||
- "prysm_data:/data"
|
||||
- ".jwtsecret:/jwtsecret"
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 1m
|
||||
|
||||
volumes:
|
||||
prysm_data:
|
||||
48
rpc-base.yml
Normal file
48
rpc-base.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
|
||||
traefik:
|
||||
image: traefik:latest
|
||||
container_name: traefik
|
||||
restart: always
|
||||
expose:
|
||||
- "8082"
|
||||
ports:
|
||||
- "443:443"
|
||||
- "127.0.0.1:8080:8080"
|
||||
command:
|
||||
- "--api=true"
|
||||
- "--api.insecure=true"
|
||||
- "--api.dashboard=true"
|
||||
- "--log.level=DEBUG"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--providers.file.filename=/dynamic_config.yml"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--entryPoints.metrics.address=:8082"
|
||||
- "--metrics.prometheus.entryPoint=metrics"
|
||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
||||
# TESTING
|
||||
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
- "--certificatesresolvers.myresolver.acme.email=$MAIL"
|
||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
||||
volumes:
|
||||
- "./traefik/letsencrypt:/letsencrypt"
|
||||
- "./traefik/config/dynamic_config.yml:/dynamic_config.yml"
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
networks:
|
||||
- chains
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.ipwhitelist.ipwhitelist.sourcerange=$WHITELIST"
|
||||
- "prometheus-scrape.enabled=true"
|
||||
- "prometheus-scrape.port=8082"
|
||||
- "prometheus-scrape.job_name=traefik"
|
||||
|
||||
networks:
|
||||
chains:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.0.1/27
|
||||
13
traefik/config/dynamic_config.yml
Normal file
13
traefik/config/dynamic_config.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
tls:
|
||||
options:
|
||||
default:
|
||||
minVersion: VersionTLS12
|
||||
cipherSuites:
|
||||
# Recommended ciphers for TLSv1.2
|
||||
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
|
||||
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
|
||||
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
|
||||
# Recommended ciphers for TLSv1.3
|
||||
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
|
||||
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
|
||||
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
|
||||
0
traefik/letsencrypt/.skel
Normal file
0
traefik/letsencrypt/.skel
Normal file
60
wireguard-server.yml
Normal file
60
wireguard-server.yml
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
version: "3.1"
|
||||
services:
|
||||
wireguard:
|
||||
image: lscr.io/linuxserver/wireguard
|
||||
container_name: wireguard
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- SYS_MODULE
|
||||
environment:
|
||||
- PUID=$PUID
|
||||
- PGID=$PGID
|
||||
- TZ=Europe/London
|
||||
- SERVERURL=$SERVERURL
|
||||
- SERVERPORT=$SERVERPORT
|
||||
- PEERS=$PEERS
|
||||
- PEERDNS=none
|
||||
- ALLOWEDIPS=$ALLOWEDIPS
|
||||
- INTERNAL_SUBNET=$INTERNAL_SUBNET
|
||||
volumes:
|
||||
- ./wireguard/config:/config
|
||||
- /lib/modules:/lib/modules
|
||||
ports:
|
||||
- $SERVERPORT:$SERVERPORT/udp
|
||||
- 127.0.0.1:3000:3000
|
||||
- 127.0.0.1:5050:5000
|
||||
sysctls:
|
||||
- net.ipv4.conf.all.src_valid_mark=1
|
||||
- net.ipv4.ip_forward=1
|
||||
restart: unless-stopped
|
||||
|
||||
grafana:
|
||||
image: grafana/grafana:8.3.3
|
||||
container_name: grafana
|
||||
volumes:
|
||||
- grafana_data:/var/lib/grafana
|
||||
- ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
|
||||
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_USER=$ADMIN
|
||||
- GF_SECURITY_ADMIN_PASSWORD=$PASSWORD
|
||||
- GF_USERS_ALLOW_SIGN_UP=false
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
org.label-schema.group: "monitoring"
|
||||
network_mode: "service:wireguard"
|
||||
depends_on:
|
||||
- wireguard
|
||||
|
||||
dynaconf:
|
||||
build: ./dynaconf
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- database:/src/database
|
||||
network_mode: "service:wireguard"
|
||||
|
||||
|
||||
volumes:
|
||||
database:
|
||||
grafana_data:
|
||||
87
xdai-archive.yml
Normal file
87
xdai-archive.yml
Normal file
@@ -0,0 +1,87 @@
|
||||
version: '3.1'
|
||||
|
||||
# Client https://github.com/NethermindEth/nethermind
|
||||
# Nethermind container as in https://github.com/gnosischain/documentation/blob/a46e0964c7e4f75bed0ff02f7ae157c4417f60bd/docs/node/execution-layer-validator.md#setup-as-archive-node
|
||||
# Beaconchain container as in https://github.com/gnosischain/lighthouse-launch
|
||||
|
||||
services:
|
||||
xdai-archive:
|
||||
hostname: xdai-archive
|
||||
container_name: xdai-archive
|
||||
image: nethermindeth/nethermind:trace-db
|
||||
restart: always
|
||||
stop_grace_period: 1m
|
||||
command: '--JsonRpc.Enabled true --JsonRpc.Host 0.0.0.0 --Metrics.Enabled true --TraceStore.Enabled true --TraceStore.BlocksToKeep 0 --TraceStore.TraceTypes Trace,Rewards'
|
||||
ports:
|
||||
- '30303:30303/tcp' # p2p
|
||||
- '30303:30303/udp' # p2p
|
||||
- '127.0.0.1:8545:8545'
|
||||
- '127.0.0.1:9091:9091'
|
||||
networks:
|
||||
- chains
|
||||
volumes:
|
||||
- nethermind_db:/nethermind/nethermind_db
|
||||
- nethermind_keystore:/nethermind/keystore
|
||||
- nethermind_logs:/nethermind/logs
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
- NETHERMIND_CONFIG=xdai_archive
|
||||
- NETHERMIND_JSONRPCCONFIG_ENGINEENABLEDMODULES=[Eth,AccountAbstraction,Subscribe,TxPool,Web3,Personal,Proof,Net,Parity,Health,Trace]
|
||||
- NETHERMIND_METRICSCONFIG_EXPOSEPORT=9091
|
||||
- NETHERMIND_NETWORKCONFIG_MAXACTIVEPEERS=150
|
||||
logging:
|
||||
options:
|
||||
max-size: "1000m"
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.xdai-archive-stripprefix.stripprefix.prefixes=/xdai-archive"
|
||||
- "traefik.http.services.xdai-archive.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.xdai-archive.entrypoints=websecure"
|
||||
- "traefik.http.routers.xdai-archive.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.xdai-archive.rule=Host(`$DOMAIN`) && PathPrefix(`/xdai-archive`)"
|
||||
- "traefik.http.routers.xdai-archive.middlewares=xdai-archive-stripprefix, ipwhitelist"
|
||||
|
||||
xdai-beacon:
|
||||
image: sigp/lighthouse:v3.2.1
|
||||
hostname: lighthouse-xdai
|
||||
restart: always
|
||||
stop_grace_period: 1m
|
||||
command: |
|
||||
lighthouse beacon_node
|
||||
--network gnosis
|
||||
--checkpoint-sync-url https://rpc-gbc.gnosischain.com/
|
||||
--discovery-port 12000
|
||||
--port 13000
|
||||
--eth1-endpoints $XDAI_RPC_URL
|
||||
--datadir /home/.eth2/beaconchaindata
|
||||
--http-address 0.0.0.0
|
||||
--http
|
||||
--enr-address $PUBLIC_IP
|
||||
--enr-udp-port 12000
|
||||
--target-peers $TARGET_PEERS
|
||||
--metrics
|
||||
--metrics-address 0.0.0.0
|
||||
--metrics-allow-origin *
|
||||
--debug-level info
|
||||
ports:
|
||||
# HTTPPORT
|
||||
# - 5052
|
||||
# P2P
|
||||
- '12000:12000/udp'
|
||||
- '13000:13000'
|
||||
networks:
|
||||
- chains
|
||||
volumes:
|
||||
- lighthouse_xdai:/home/.eth2/beaconchaindata
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "100m"
|
||||
max-file: "1"
|
||||
|
||||
volumes:
|
||||
nethermind_db:
|
||||
nethermind_keystore:
|
||||
nethermind_logs:
|
||||
lighthouse_xdai:
|
||||
30
xdai.yml
Normal file
30
xdai.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
version: '3.1'
|
||||
|
||||
services:
|
||||
xdai:
|
||||
image: nethermind/nethermind:1.12.7
|
||||
expose:
|
||||
- "8545"
|
||||
- "40444"
|
||||
ports:
|
||||
- "40444:40444"
|
||||
- "40444:40444/udp"
|
||||
volumes:
|
||||
- xdai:/nethermind_db/xdai
|
||||
- ./xdai/xdai.cfg:/xdai.cfg
|
||||
- ./xdai/xdai.json:/xdai.json
|
||||
networks:
|
||||
- chains
|
||||
command: "--config /xdai.cfg"
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.middlewares.xdai-stripprefix.stripprefix.prefixes=/xdai"
|
||||
- "traefik.http.services.xdai.loadbalancer.server.port=8545"
|
||||
- "traefik.http.routers.xdai.entrypoints=websecure"
|
||||
- "traefik.http.routers.xdai.tls.certresolver=myresolver"
|
||||
- "traefik.http.routers.xdai.rule=Host(`$DOMAIN`) && PathPrefix(`/xdai`)"
|
||||
- "traefik.http.routers.xdai.middlewares=xdai-stripprefix, ipwhitelist"
|
||||
|
||||
volumes:
|
||||
xdai:
|
||||
61
xdai/xdai.cfg
Normal file
61
xdai/xdai.cfg
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"Init": {
|
||||
"WebSocketsEnabled": false,
|
||||
"StoreReceipts": true,
|
||||
"IsMining": false,
|
||||
"ChainSpecPath": "/xdai.json",
|
||||
"GenesisHash": "0x4f1dd23188aab3a76b463e4af801b52b1248ef073c648cbdc4c9333d3da79756",
|
||||
"BaseDbPath": "/nethermind_db/xdai",
|
||||
"LogFileName": "xdai.logs.txt",
|
||||
"MemoryHint": 768000000
|
||||
},
|
||||
"Network": {
|
||||
"DiscoveryPort": 40444,
|
||||
"P2PPort": 40444
|
||||
},
|
||||
"TxPool": {
|
||||
"Size": 2048
|
||||
},
|
||||
"JsonRpc": {
|
||||
"Enabled": true,
|
||||
"Timeout": 20000,
|
||||
"Host": "0.0.0.0",
|
||||
"Port": 8545,
|
||||
"WebSocketsPort": 8546
|
||||
},
|
||||
"Db": {
|
||||
"CacheIndexAndFilterBlocks": false
|
||||
},
|
||||
"Sync": {
|
||||
"FastSync": true,
|
||||
"PivotNumber": 18110000,
|
||||
"PivotHash": "0xb06aa318f3968e3ec3ee9a5d67562bc6a470cacb76497d433f31da65f6abdf80",
|
||||
"PivotTotalDifficulty": "6162513664938195573321714140589322309123831870",
|
||||
"FastBlocks": true,
|
||||
"UseGethLimitsInFastBlocks": false,
|
||||
"FastSyncCatchUpHeightDelta": 10000000000
|
||||
},
|
||||
"EthStats": {
|
||||
"Enabled": false,
|
||||
"Server": "ws://localhost:3000/api",
|
||||
"Name": "Nethermind xDai",
|
||||
"Secret": "secret",
|
||||
"Contact": "hello@nethermind.io"
|
||||
},
|
||||
"Metrics": {
|
||||
"NodeName": "xDai",
|
||||
"Enabled": false,
|
||||
"PushGatewayUrl": "http://localhost:9091/metrics",
|
||||
"IntervalSeconds": 5
|
||||
},
|
||||
"Aura": {
|
||||
"ForceSealing": true
|
||||
},
|
||||
"Bloom": {
|
||||
"IndexLevelBucketSizes": [
|
||||
16,
|
||||
16,
|
||||
16
|
||||
]
|
||||
}
|
||||
}
|
||||
282
xdai/xdai.json
Normal file
282
xdai/xdai.json
Normal file
@@ -0,0 +1,282 @@
|
||||
{
|
||||
"name": "DaiChain",
|
||||
"engine": {
|
||||
"authorityRound": {
|
||||
"params": {
|
||||
"stepDuration": 5,
|
||||
"blockReward": "0x0",
|
||||
"maximumUncleCountTransition": 0,
|
||||
"maximumUncleCount": 0,
|
||||
"validators": {
|
||||
"multi": {
|
||||
"0": {
|
||||
"list": [
|
||||
"0xcace5b3c29211740e595850e80478416ee77ca21"
|
||||
]
|
||||
},
|
||||
"1300": {
|
||||
"safeContract": "0x22e1229a2c5b95a60983b5577f745a603284f535"
|
||||
},
|
||||
"9186425": {
|
||||
"contract": "0xB87BE9f7196F2AE084Ca1DE6af5264292976e013"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blockRewardContractAddress": "0x867305d19606aadba405ce534e303d0e225f9556",
|
||||
"blockRewardContractTransition": 1310,
|
||||
"blockRewardContractTransitions": {
|
||||
"9186425": "0x481c034c6d9441db23Ea48De68BCAe812C5d39bA"
|
||||
},
|
||||
"randomnessContractAddress": {
|
||||
"9186425": "0x5870b0527DeDB1cFBD9534343Feda1a41Ce47766"
|
||||
},
|
||||
"posdaoTransition": 9186425
|
||||
}
|
||||
}
|
||||
},
|
||||
"params": {
|
||||
"gasLimitBoundDivisor": "0x400",
|
||||
"maximumExtraDataSize": "0x20",
|
||||
"minGasLimit": "0x1388",
|
||||
"networkID": "100",
|
||||
"eip140Transition": "0x0",
|
||||
"eip211Transition": "0x0",
|
||||
"eip214Transition": "0x0",
|
||||
"eip658Transition": "0x0",
|
||||
"eip145Transition": 1604400,
|
||||
"eip1014Transition": 1604400,
|
||||
"eip1052Transition": 1604400,
|
||||
"eip1283Transition": 1604400,
|
||||
"eip1283DisableTransition": 2508800,
|
||||
"eip152Transition": 7298030,
|
||||
"eip1108Transition": 7298030,
|
||||
"eip1283ReenableTransition": 7298030,
|
||||
"eip1344Transition": 7298030,
|
||||
"eip1706Transition": 7298030,
|
||||
"eip1884Transition": 7298030,
|
||||
"eip2028Transition": 7298030,
|
||||
"eip2565Transition": 16101500,
|
||||
"eip2929Transition": 16101500,
|
||||
"eip2930Transition": 16101500,
|
||||
"eip3198Transition": 19040000,
|
||||
"eip3529Transition": 19040000,
|
||||
"eip3541Transition": 19040000,
|
||||
"eip1559Transition": 19040000,
|
||||
"eip1559BaseFeeMaxChangeDenominator": "0x8",
|
||||
"eip1559ElasticityMultiplier": "0x2",
|
||||
"eip1559BaseFeeInitialValue": "0x3b9aca00",
|
||||
"eip1559FeeCollector": "0x6BBe78ee9e474842Dbd4AB4987b3CeFE88426A92",
|
||||
"eip1559FeeCollectorTransition": 19040000,
|
||||
"registrar": "0x6B53721D4f2Fb9514B85f5C49b197D857e36Cf03",
|
||||
"transactionPermissionContract": "0x7Dd7032AA75A37ea0b150f57F899119C7379A78b",
|
||||
"transactionPermissionContractTransition": 9186425
|
||||
},
|
||||
"genesis": {
|
||||
"seal": {
|
||||
"authorityRound": {
|
||||
"step": "0x0",
|
||||
"signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
|
||||
}
|
||||
},
|
||||
"difficulty": "0x20000",
|
||||
"gasLimit": "0x989680"
|
||||
},
|
||||
"nodes": [
|
||||
"enode://a20c13b1712d32028a277958346a5c29350e8a3e32d40de43a62cb35baa99f96f274960591e46be5a643be7ee77a15d6a4963170460156a77abcf500f0ba0ff0@104.237.150.151:30303",
|
||||
"enode://f372b16932a4ee5b6be947556bcca1cf57e498267dd78a7a643a87514a0a5ef4f112cb6934aab5775d3e8940ba535e8f53dfa704e162a72970de61e6ef9fd9aa@45.79.158.26:30303",
|
||||
"enode://fe9720c93e6335b8cacffa10df594c8c166208fa4be8dcb9275788e54111ae88899022fa9c358f2d0029ee57c2223a7fbc97eb06b294422d35ef796a49d87bff@94.237.98.201:30303",
|
||||
"enode://6d12181aa8527251dd8f9d37a2ff7eadb46f2a90c69f2282352ac7889b105d6b5787a532facee656b29599ee1ee51eb5b1eb01d2a17190e32a6cbe6dfc996828@45.79.158.8:30303",
|
||||
"enode://389a625160876776946bfea5a6ce4f4c761bd2062cf8e45e510da77595399ee50a802060868d9bf4580431fc2248cadc9ce61826b3513e090bd1cdd4ce11a9d8@161.97.172.191:30303",
|
||||
"enode://d086bfbe0d15e841e403695c151920459261dd5d5f259858b32727e2bc64d92f48bdad3cc0120703dbb0e2abd2f51c0459cff517bfa16e683ca27018d82a6dcf@66.175.215.67:30303",
|
||||
"enode://540a0bc258ba93e6fafc238f49eca0a2032b5d40b79c077dc9b9a304fd636af4167b638eb0f80aa455f5da1cf49b76c881f651ed301a1e28d6855a8a3fbe21a0@167.71.174.1:30303",
|
||||
"enode://1ceea9d3fb22247edf85102f1e78cd31c2f330ace6ac2789c82766a232d56d7c3c1b2aeb504f2f761de754da22e7dfc5bdde3b00b8b98d1d003f6dd81612f8b3@66.175.211.178:30303",
|
||||
"enode://4175e9ffd9ac9819c9c596a60b7748cc1c1846cf7e8db47ee97f8aa57e42e8cb3dad4201726498d34af94505b2c1429f9d3a508594c521080e8cd1a3fa24a3d5@37.120.245.155:30303",
|
||||
"enode://b5eba653df9c583238ea238ca7cadf5d2746f1b4da81a8cfb2c1b600f62fe37df000fa5b5292059f74faa6bbf5af01b3b81f99284a1fbd5c0971d74db7dc4a34@66.175.213.149:30303",
|
||||
"enode://2a8b64e96da7e67e525f04a157a0016b886dfb2d02553501abd0326b7b061aace7e92ad87c1225dc7d261b05e7886391552c812b386451597bff4b040eb43bec@173.212.236.163:30303",
|
||||
"enode://5f187ae73b07db889c91e8955619b1e6b799696a4b7aab306f7c500a2ec4c7f66dfbea8ac28bde65100653a2fe84b96f2079aed2d61871e06b5a1e32c0f021af@45.79.150.105:30303",
|
||||
"enode://22e442bf7b7fa9bb5960344ef5aa907b920a931bce83e14620b0378318b7eb73753f7245f0a8252590a71ad9568bcfbb9e5f03bd88ab3feb9c1096227bb8704a@168.119.136.44:30303",
|
||||
"enode://ef98bc3c9195b9f27312ac646edb6d0096b04c983f93864c30b8f2b20c699ec974a7066cfae090832679e497d23655e0e315a2c96da4a27d75cc4693e6335bba@192.155.90.129:30303",
|
||||
"enode://de1ab49beedda656976a8fcb01f91ebdb474178fd46e5ce87cf22f0eb90bc3a6721d619ec90c4a6453770a2c24a4bdbc4ef8b8111ffd49f491eb84016a3842d6@54.217.41.94:30303",
|
||||
"enode://ba04a77c7c8ac0fdd325de91536c33bce3b71095de563aafc72e6ac4111ebf093570c7bdba48b06cc83b0af5596f72fc32563547160e067fcb45a1786b8f7150@45.56.105.53:30303",
|
||||
"enode://56510b2d296000427e56eb0016d8454998c16347ec2c4ffed84cb82a996707de40ca2b9ea13c8796b4230b4c19ce46f844720ded93135d710b7bbc7352a061d3@50.35.89.213:30304",
|
||||
"enode://a68b3f3f58ea56dcc70450d371bf0b83363d74cbfdb5f982be00536ae3168aa679c7e7e93bd9ffe34b59527173d73e0ebed0a105c095af2ee16bd1cc66103c80@69.164.215.62:30303",
|
||||
"enode://e8c7a0db430429bb374c981438c0dbd95e565088a483388aa46d8377a3bd62f02cd83d7e2c7e5fc77606141bfef29d23d4285a7c1d9b7e743cf3029314506df7@80.240.16.221:30303",
|
||||
"enode://80c8f6f27f80ba91830002a8ca64771f6baf440fd134e88fbecae3a67c8bc58722d624cecbd6439e1a2d28fbd0297d489fdaa40b10c2f3e07fee1913d52b3e30@45.79.185.92:30303",
|
||||
"enode://da2449aaba873c40c6daf764de55f4b9eae24c4738daec893ef95b6ada96463c6b9624f8e376e1073d21dd820c5bb361e14575121b09bbd7735b6b556ee1b768@67.205.176.117:30303",
|
||||
"enode://481e43a8e30cdfecfe3159dde960d9e65347c3e8c64dcedea87922df875e4d47a813f53c012920b6754e43cde47302cdfb120fd409b6aa2b47c48e391494c7f5@173.255.233.100:30303",
|
||||
"enode://90b0a0e74a9a1ad258531b4ceec25587d8b52ff2cfb36206a34bf6ba1a8d21b2abd20da13260102508a2ac67afbeb2d2ab7a5e9d6bea3bce845cd81e655585cc@45.77.110.159:30303",
|
||||
"enode://6012c883efeee664847a48784459980176a22f31bc98c2aae30011ad7ef0b44011364a0a9ae5eb056db1f052cf3556757bd97485677bbaf1781b131e43204971@69.164.222.63:30303",
|
||||
"enode://5bc43a57273eb4012b59ce268f986cbeeb5f0f878aa25e3d2d71d9b7ff64029a9dd25a84303f80820a78d83ff3a2c570988d0fc68a17d355a98c20c0784aa14d@8.9.5.108:30303",
|
||||
"enode://89e046a4f10c64265941789b2e3be900adf5132ced13756aeea126cf59b516445ed8053b600aa764860f1aad552f4f4f3b4250c59b3b8a84ead3d3527c005606@172.104.24.215:30303",
|
||||
"enode://ab7f6c633ba2dc54795dfd2c739ba7d964f499541c0b8d8ba9d275bd3df1b789470a21a921a469fa515a3dfccc96a434a3fd016a169d88d0043fc6744f34288e@67.205.180.17:30303",
|
||||
"enode://6674773f7aac78d5527fa90c847dcbca198de4081306406a8fec5c15f7a2e141362344041291dd10d0aafa7706a3d8f21a08b6f6834a5b1aab9cccd8ca35ccee@143.110.226.15:30303",
|
||||
"enode://0caa2d84aef00d0bc5de6cf9db3e736da245d882ec8f91e201b3e1635960e62cbb2f8bfc57e679ff3e1d53da2773e31df624a56b2f457ecb51d09fdf9970c86b@167.99.4.175:30303",
|
||||
"enode://7aa4c137b1ec078f2df3c17552e23c7213662819132821ed3aaa42f0212cb889dbb21211f9c5912c68fce577ab7fc99b0a47c0cb469ec0ad29c0acd9ce297659@45.33.84.107:30303",
|
||||
"enode://e026b1a68e8a19106d14effc0df66050c494e10a6b8a4e9f6fd196d95306d7062d129a8c9510ffdbeaf3fe0154b884c116a0e77aec876c368e507de3420fba05@149.28.32.225:30303",
|
||||
"enode://0a978bd436b850f61e31778fbbeb3e0182f91bb98a30c073674c741c182611e71842333c098d3db5108f06cd589c3a8341172e34be0421fa66d82f0dd83d8ae1@51.81.244.170:30303",
|
||||
"enode://75f05df1e5a3094ed2c9df36f122b95852206c52288f777982503946d5b273c7ffd8bb06ad60a0df7a31510906d4090c7bd5fd9bcb04a5b4ac1825a2b7212f32@45.63.18.245:30303"
|
||||
],
|
||||
"accounts": {
|
||||
"0x0000000000000000000000000000000000000005": {
|
||||
"builtin": {
|
||||
"name": "modexp",
|
||||
"pricing": {
|
||||
"0": {
|
||||
"price": {
|
||||
"modexp": {
|
||||
"divisor": 20
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"0x0000000000000000000000000000000000000006": {
|
||||
"builtin": {
|
||||
"name": "alt_bn128_add",
|
||||
"pricing": {
|
||||
"0": {
|
||||
"price": {
|
||||
"alt_bn128_const_operations": {
|
||||
"price": 500
|
||||
}
|
||||
}
|
||||
},
|
||||
"7298030": {
|
||||
"info": "Istanbul HF",
|
||||
"price": {
|
||||
"alt_bn128_const_operations": {
|
||||
"price": 150
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"0x0000000000000000000000000000000000000007": {
|
||||
"builtin": {
|
||||
"name": "alt_bn128_mul",
|
||||
"pricing": {
|
||||
"0": {
|
||||
"price": {
|
||||
"alt_bn128_const_operations": {
|
||||
"price": 40000
|
||||
}
|
||||
}
|
||||
},
|
||||
"7298030": {
|
||||
"info": "Istanbul HF",
|
||||
"price": {
|
||||
"alt_bn128_const_operations": {
|
||||
"price": 6000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"0x0000000000000000000000000000000000000008": {
|
||||
"builtin": {
|
||||
"name": "alt_bn128_pairing",
|
||||
"pricing": {
|
||||
"0": {
|
||||
"price": {
|
||||
"alt_bn128_pairing": {
|
||||
"base": 100000,
|
||||
"pair": 80000
|
||||
}
|
||||
}
|
||||
},
|
||||
"7298030": {
|
||||
"info": "Istanbul HF",
|
||||
"price": {
|
||||
"alt_bn128_pairing": {
|
||||
"base": 45000,
|
||||
"pair": 34000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"0x0000000000000000000000000000000000000009": {
|
||||
"builtin": {
|
||||
"name": "blake2_f",
|
||||
"pricing": {
|
||||
"7298030": {
|
||||
"info": "Istanbul HF",
|
||||
"price": {
|
||||
"blake2_f": {
|
||||
"gas_per_round": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"0x0000000000000000000000000000000000000001": {
|
||||
"balance": "1",
|
||||
"builtin": {
|
||||
"name": "ecrecover",
|
||||
"pricing": {
|
||||
"0": {
|
||||
"price": {
|
||||
"linear": {
|
||||
"base": 3000,
|
||||
"word": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"0x0000000000000000000000000000000000000002": {
|
||||
"balance": "1",
|
||||
"builtin": {
|
||||
"name": "sha256",
|
||||
"pricing": {
|
||||
"0": {
|
||||
"price": {
|
||||
"linear": {
|
||||
"base": 60,
|
||||
"word": 12
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"0x0000000000000000000000000000000000000003": {
|
||||
"balance": "1",
|
||||
"builtin": {
|
||||
"name": "ripemd160",
|
||||
"pricing": {
|
||||
"0": {
|
||||
"price": {
|
||||
"linear": {
|
||||
"base": 600,
|
||||
"word": 120
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"0x0000000000000000000000000000000000000004": {
|
||||
"balance": "1",
|
||||
"builtin": {
|
||||
"name": "identity",
|
||||
"pricing": {
|
||||
"0": {
|
||||
"price": {
|
||||
"linear": {
|
||||
"base": 15,
|
||||
"word": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user