211 Commits

Author SHA1 Message Date
czarly
0046553005 fix 2022-10-19 14:58:27 +04:00
czarly
e7efbbb746 make upstreams variable 2022-10-19 14:20:23 +04:00
czarly
a12453aa1d fix 2022-10-19 14:02:31 +04:00
czarly
adfff835d1 fix 2022-10-19 13:47:55 +04:00
czarly
4fdba5f39a fix 2022-10-19 13:41:34 +04:00
czarly
5a89240a61 fix 2022-10-19 13:33:49 +04:00
czarly
4b40259c93 fix 2022-10-19 13:33:02 +04:00
czarly
79e58187f1 route dshackle via traefik and add prometheus scraping 2022-10-19 13:29:55 +04:00
czarly
cca28c35a7 added dshackle confgured with free node providers for ethereum 2022-10-19 13:20:24 +04:00
cventastic
7163d7e630 extend heimdall bootnodes/seeds 2022-10-17 17:45:04 +02:00
cventastic
81f70d04c2 remove testnets goerli.yml, rinkeby.yml, ropsten.yml 2022-10-17 12:03:37 +02:00
cventastic
7f5b7fbec6 new snapshot urls for bootstrapping polygon 2022-10-17 11:58:35 +02:00
cventastic
2f4a4011f8 pocket-fr.yml doesnt exist anymore, its now pokt-lt-2 2022-10-06 09:57:33 +02:00
cventastic
0553baaac8 new pocket release candidate added to pokt/Dockerfile 2022-10-06 09:46:39 +02:00
cventastic
4a8b3a4cc1 revert ulimit for rpc-base.yml and erigon.yml 2022-10-05 13:46:47 +02:00
cventastic
31cda87d29 ulimit for rpc-base.yml and erigon.yml 2022-10-05 09:37:40 +02:00
cventastic
eaae1ef854 revert:
ulimit and loglevel again
2022-10-04 11:59:50 +02:00
cventastic
e91ef6a623 ulimit and loglevel. to test side-by-side. 2022-10-04 11:50:28 +02:00
cventastic
5073b5543c no noticeable impact on performance by traefik log settings. revert to DEBUG 2022-10-04 11:15:48 +02:00
cventastic
ef6c33b3b4 test traefik loglevel impact on performance 2022-10-04 11:07:55 +02:00
cventastic
44d6000048 no performance gain 2022-10-03 16:34:48 +02:00
cventastic
a8a60fb947 test ulimit for concurrent connections 2022-10-03 16:31:53 +02:00
cventastic
badd46c679 update datasources.yml with new rpcs 2022-09-28 17:46:05 +02:00
cventastic
d7d4acbb58 update pokt-metrics for consolidated nodes 2022-09-28 17:31:04 +02:00
cventastic
80d7e588b6 add TODO 2022-09-27 11:16:42 +02:00
cventastic
7a37728c8b cleanup 2022-09-27 10:18:26 +02:00
cventastic
16d1a1abce move pokt-fr-1 to pokt-lt-2 2022-09-26 14:22:02 +02:00
cventastic
066b7be393 forgot volumes 2022-09-26 11:17:49 +02:00
cventastic
8c4e29d98b remove redundant nodes, stake weighting 2022-09-26 11:17:23 +02:00
cventastic
63beaf9258 cleanup 2022-09-26 00:23:10 +02:00
cventastic
9e0b47a9fc util scripts redundant 2022-09-26 00:12:51 +02:00
cventastic
2ab055e7a8 add port 2022-09-25 23:58:20 +02:00
cventastic
d30accaa19 add whitelist service 2022-09-25 23:54:04 +02:00
cventastic
48fdbf0aac add protokoll? 2022-09-12 18:07:35 +02:00
cventastic
989d2c06c8 add protokoll 2022-09-12 18:07:16 +02:00
cventastic
04d4dd003f add port? 2022-09-12 18:06:27 +02:00
cventastic
be497cfcaf accept TOS 2022-09-12 17:59:10 +02:00
cventastic
3dbdefe715 add prysm.yml 2022-09-12 17:57:32 +02:00
cventastic
303dcdca99 add grace period 2022-09-12 17:31:05 +02:00
cventastic
cfb4490a6d forgot comma 2022-09-12 17:21:54 +02:00
cventastic
d5e5288bd2 update geth for merge 2022-09-12 17:20:33 +02:00
cventastic
1b0de278ae update chain dash 2022-09-08 15:32:21 +02:00
cventastic
0fbcaf1c7e naming of dashboards 2022-09-08 15:23:39 +02:00
cventastic
0ac21e3c4e add erigon dash 2022-09-08 14:48:59 +02:00
cventastic
b693c45ddd default grace period to aggressive with 10 sec 2022-09-08 01:09:50 +02:00
cventastic
460478c6a2 forgot metric ports 2022-09-07 23:51:59 +02:00
cventastic
0136227b4c forgot metric ports 2022-09-07 23:16:13 +02:00
cventastic
f6d85e4014 add monitoring network 2022-09-07 23:08:31 +02:00
cventastic
22c91bf68c add monitoring network 2022-09-07 22:29:48 +02:00
cventastic
a50380028f bump monitoring.yml 2022-09-06 17:15:44 +02:00
cventastic
1c8dd77738 bump pocket version 2022-09-06 16:36:39 +02:00
cventastic
ffd67953f7 bump erigon to 2022.08.03 2022-09-06 13:22:17 +02:00
cventastic
8a483e88fa no storage 2022-09-05 10:25:00 +02:00
cventastic
529a5f00f4 wrong address format 2022-09-05 10:18:26 +02:00
cventastic
e66fe77265 wrong port 2022-09-05 10:17:23 +02:00
cventastic
ae3dc849e4 added beaconchain api and traefik to lighthouse 2022-09-05 10:16:58 +02:00
cventastic
fabe1aa013 remove quotation 2022-08-26 15:12:02 +02:00
cventastic
0ccb87cb94 connect lighthouse 2022-08-26 15:11:08 +02:00
cventastic
ea12105a03 set correct release tag 2022-08-26 14:52:14 +02:00
cventastic
76b214e5bf rework erigon for merge 2022-08-26 14:49:15 +02:00
cventastic
1a9e41eca3 bump to new pokt version 2022-08-15 10:23:24 +02:00
cventastic
1f5d23a1a9 remove tendermind port... metrics also get exposed over 8083 2022-07-06 20:56:26 +02:00
cventastic
9554eaa726 add prometheus to pocket-frontend.yml 2022-07-04 12:06:20 +02:00
cventastic
fae11760d2 add all chains to dash 2022-07-01 17:15:53 +02:00
cventastic
417f01da21 remove datasource 2022-07-01 14:49:24 +02:00
cventastic
b6f1f4f2ab remove datasource 2022-07-01 14:48:05 +02:00
cventastic
7c81a895d5 forgot prometheus labels 2022-07-01 14:37:06 +02:00
cventastic
ba0674fcb1 modularize pocket-lt.yml file 2022-07-01 14:34:07 +02:00
cventastic
6abd3efb95 add autodiscover to pocket-lt.yml 2022-07-01 14:31:03 +02:00
cventastic
5d7e8809e3 remove duplicate 2022-07-01 14:23:49 +02:00
cventastic
499dcdd4c4 depends_on has to be array 2022-07-01 14:21:58 +02:00
cventastic
be27baa9e5 add depends on, otherwise network gets lost 2022-07-01 14:20:09 +02:00
cventastic
7410de9dcf conflicting parameters expose/network_mode 2022-07-01 14:18:08 +02:00
cventastic
b966320f77 conflicting parameters expose/network_mode 2022-06-28 12:26:32 +02:00
cventastic
dbdb6e963c conflicting parameters port/network_mode 2022-06-28 12:25:39 +02:00
cventastic
7235941152 put promehteus into wireguard network 2022-06-28 12:24:03 +02:00
cventastic
2d7342c91a added new format for scraping target, comma seperated ports 2022-06-28 11:12:04 +02:00
cventastic
e3b2558333 added forked prometheus-docker-sd 2022-06-28 11:07:51 +02:00
cventastic
b625adc085 format still doesnt work 2022-06-23 14:36:51 +02:00
cventastic
8a6cd18038 format doesnt work 2022-06-23 14:33:02 +02:00
cventastic
1b1913d335 overhaul monitoring 2022-06-23 14:30:17 +02:00
cventastic
a825b27ccd "latest" tag actually was "stable"-tag. with old db schema. 2022-06-19 14:47:18 +02:00
cventastic
8665068892 thought the i built from source. turns out i left image argument inside. latest=devel. 2022-06-19 12:28:33 +02:00
cventastic
b4a68effbc update to "stable" which still uses old db-format. not going to be useful for the merge 2022-06-17 11:58:46 +02:00
cventastic
0567c540ce update to 2022.03.02 first 2022-06-17 10:26:28 +02:00
cventastic
a24a94df2b reeeewind. must update to previous versions first for db update. 2022-06-17 10:05:04 +02:00
cventastic
7108f5521b new version for gray glacier fork 2022-06-17 10:00:54 +02:00
cventastic
ca8ec01603 new version for bsc fork 2022-06-16 14:02:09 +02:00
cventastic
9a0e0e7e6c grey glacier fork 2022-06-16 10:49:27 +02:00
cventastic
5244b20f21 addrbook volume for pocket-frontend.yml 2022-06-13 14:35:11 +02:00
cventastic
b108e7ad9a add pocket-de.yml 2022-06-13 13:55:53 +02:00
cventastic
2242491f83 pocket-lt.yml make addressbook persistent but not the rest of the config files 2022-06-13 13:02:25 +02:00
cventastic
6206fed2f8 add volume for addrbook 2022-06-13 11:50:31 +02:00
cventastic
1f9087aee2 put addrbook in its own folder, so it can be persisted in volume 2022-06-13 11:48:56 +02:00
cventastic
20059b3ebf put addrbook in its own folder, so it can be persisted in volume 2022-06-13 11:46:20 +02:00
cventastic
e70a7d78ab rewind 2022-06-10 19:03:14 +02:00
cventastic
f757bb53d9 update volume to bind mount 2022-06-10 18:49:35 +02:00
cventastic
d4439b4cd4 update chains.json, use local pokt-rpc 2022-06-10 17:57:09 +02:00
cventastic
6e0abad03c expose port 2022-06-02 16:23:08 +02:00
cventastic
8647d4467d label missing 2022-06-02 16:22:06 +02:00
cventastic
593d610461 update port because its occupied on the interims server 2022-06-02 16:20:57 +02:00
cventastic
569f5c3f9b path to dockerfile 2022-06-02 16:11:16 +02:00
cventastic
355c998d60 list -> array... 2022-06-02 16:10:20 +02:00
cventastic
52aa024568 network -> networks 2022-06-02 16:09:01 +02:00
cventastic
5b024c9a36 added erigon-bsc 2022-06-02 16:07:11 +02:00
cventastic
d06f8949bf add new chain and add persistent config-dir for pocket 2022-05-19 13:58:11 +02:00
cventastic
0f6ad2bca8 add new chain and add persistent config-dir for pocket 2022-05-19 13:55:26 +02:00
cventastic
aed1577472 add fantom to chains network 2022-05-16 10:25:48 +02:00
cventastic
805e283687 account for new config params iavl_cache_size, chains_hot_reload 2022-05-16 07:31:00 +02:00
cventastic
97eb058ecf fix tar syntax for new snapshot format 2022-05-11 15:55:53 +02:00
cventastic
9aea8d8c8a hmm wrong syntax? 2022-05-11 15:47:03 +02:00
cventastic
e5ae6029c2 snapshots are now .gz 2022-05-11 15:43:49 +02:00
cventastic
822f21eea8 cant use different docker-compose file versions 2022-05-11 11:13:32 +02:00
cventastic
fea3390ef3 remove redundancy 2022-05-11 11:07:23 +02:00
cventastic
839da8855c balance right port 2022-05-11 10:59:36 +02:00
cventastic
10bb09a8cc Merge branch 'main' of github.com:cventastic/POKT_DOKT 2022-05-11 10:40:06 +02:00
cventastic
b09445ffae RPC Port is 18545 2022-05-11 10:39:47 +02:00
cventastic
8ac4b09771 added fantom 2022-05-11 10:34:34 +02:00
Sebastian
3d2f33309a added solana to chains list 2022-05-03 13:10:20 +02:00
cventastic
27862bf4c9 haproxy healthcheck permissions 2022-04-27 22:17:42 +02:00
cventastic
e847bfa9fc add pokt-lt 2022-04-26 11:39:12 +02:00
cventastic
8055376766 remove owner/group to bootstrap.sh
add it to dockerfile
2022-04-26 11:09:57 +02:00
cventastic
515be43181 add owner/group to bootstrap.sh 2022-04-26 10:57:05 +02:00
cventastic
ae1597fb53 add haproxy to pokt-fr 2022-04-26 09:48:02 +02:00
cventastic
d174d77c0d add pokt-fr 2022-04-26 09:42:52 +02:00
cventastic
30bedc0c15 add it to the actual command, not the echo... 2022-04-25 13:10:58 +02:00
cventastic
d2782e3433 add unzip flag to tar because of new snapshot format 2022-04-25 13:05:09 +02:00
cventastic
38c14d7d9b remove old chains_mainnet.json
remove old pokt bootstrap skript
added correct chains.json
2022-04-25 12:01:41 +02:00
cventastic
e825e4fa37 only mount chaindir 2022-04-25 11:45:38 +02:00
cventastic
dc7998aa74 change mount path 2022-04-25 09:54:06 +02:00
cventastic
431b9430e2 remove commands that went into Dockerfile 2022-04-25 09:38:28 +02:00
cventastic
34a209dee9 remove files that get copied in Dockerfile 2022-04-25 09:29:17 +02:00
cventastic
1a0b185def use RC-0.8.2 2022-04-25 09:20:23 +02:00
cventastic
aae8cc43f9 add pokt-test for RC 0.8.2 2022-04-25 09:17:00 +02:00
cventastic
8775a70590 hardfork xdai 2022-04-20 17:56:42 +02:00
cventastic
33705263e3 restart geth-mainnet unless stopped 2022-04-20 10:22:55 +02:00
cventastic
a34dc194a1 removed ipwhitelist middleware from avalanche.yml 2022-04-19 19:26:34 +02:00
cventastic
5d377d0e51 added network to haproxy 2022-04-19 17:33:30 +02:00
cventastic
b01b21f271 added portforwarding to localhost for haproxy 2022-04-19 16:44:29 +02:00
cventastic
fe28278076 added permission to healthcheck 2022-04-19 16:24:10 +02:00
cventastic
f95d277640 fix traefik labels 2022-04-19 16:22:43 +02:00
cventastic
770e777e15 add polygon healthcheck 2022-04-19 16:15:02 +02:00
Sebastian
41848d2dc1 fix the docker 2022-04-19 15:10:01 +02:00
Sebastian
f722a9e4ca jo 2022-04-19 14:54:33 +02:00
Sebastian
c646654d65 empty chains config 2022-04-19 14:48:29 +02:00
Sebastian
2310f4bb02 make init script executable 2022-04-19 14:41:37 +02:00
Sebastian
9d3c09e499 add missing init script 2022-04-19 14:41:01 +02:00
Sebastian
160da9ebea added network 2022-04-19 13:44:06 +02:00
Sebastian
cf2a242872 updates 2022-04-19 13:42:31 +02:00
Sebastian
4c18e0e983 add a proxy only 2022-04-19 13:28:36 +02:00
cventastic
05de20ee72 added tweaks for polygon-fullnode.yml 2022-04-04 22:41:10 +02:00
cventastic
74a9f8ac7f bootscipt also runs as pokt-user 2022-04-04 15:32:59 +02:00
cventastic
8e55c751f8 oops 2 2022-04-01 14:10:23 +02:00
cventastic
c046563bef oops 2022-03-31 16:14:47 +02:00
cventastic
dd0e402511 fixed traefik label 2022-03-31 13:50:45 +02:00
cventastic
9de6badecc removed eth-api parameter eth 2022-03-29 22:02:25 +02:00
czarly
cc02077bf4 robust snapshot download 2022-03-25 04:22:14 +04:00
czarly
115c4fd30f robust snapshot download 2022-03-25 04:20:24 +04:00
czarly
b24601f47a robust snapshot download 2022-03-25 04:16:49 +04:00
czarly
297d2be210 update snapshot url and make archive node bootstrapping 2022-03-24 22:27:47 +04:00
cventastic
5f36d3920b forgot to add file... 2022-03-22 18:07:28 +01:00
cventastic
b80cd5f40d added tls options/dynamic config file 2022-03-22 18:06:42 +01:00
cventastic
26a0c276f3 one tab too much 2022-03-22 12:11:48 +01:00
cventastic
fae0461504 polygon/heimdall update 2022-03-22 12:05:52 +01:00
cventastic
9673c5223b add metrics autodiscovery for harmony 2022-03-17 13:20:02 +01:00
cventastic
faa4c41b89 added fuse metrics and autodiscovery 2022-03-17 13:04:50 +01:00
cventastic
00b8453faf added fuse metrics 2022-03-17 13:03:47 +01:00
cventastic
7f3824b5f9 added avalanche metrics 2022-03-17 12:02:29 +01:00
cventastic
7ab717dc91 forgot geth-mainnet labels 2022-03-16 16:01:59 +01:00
cventastic
e76bf13833 added all geth clients for prometheus autodiscovery 2022-03-16 15:59:27 +01:00
cventastic
633227fb49 added correct geth metrics path 2022-03-16 15:53:34 +01:00
cventastic
f89e002d9a added metrics ropsten 2022-03-16 14:40:58 +01:00
cventastic
7c082289f9 added metrics ropsten 2022-03-16 14:38:17 +01:00
cventastic
d24d7b45a3 remove prometheus.yml and remove nodeexporter/cadvisor from autodiscover, because they too should be autodiscovered. 2022-03-16 14:33:25 +01:00
cventastic
33e2908492 put prometheus into chains network... 2022-03-16 14:19:59 +01:00
cventastic
b10221e068 remove internal network...
cant reach prometheus for queries this way
2022-03-16 14:17:21 +01:00
cventastic
766caca32d fix typo 2022-03-16 14:06:02 +01:00
cventastic
892c5eb1e6 prom autodiscovery 2022-03-16 14:01:50 +01:00
cventastic
7f1cb0474e removed new line 2022-03-16 12:41:17 +01:00
cventastic
a28269caee added newline 2022-03-16 12:13:52 +01:00
czarly
2bf10202ae more fix pokt 2022-03-16 13:25:55 +04:00
czarly
629a72f068 more fix pokt 2022-03-16 13:24:55 +04:00
czarly
8713748aad more fix pokt 2022-03-16 13:23:42 +04:00
czarly
fe828e0645 more fix pokt 2022-03-16 13:16:06 +04:00
czarly
93afe6ccae more fix pokt 2022-03-16 13:14:28 +04:00
czarly
a77d152f8d final fix pokt 2022-03-16 13:11:16 +04:00
czarly
d620891dff more pokt node fixes 2022-03-16 13:04:07 +04:00
czarly
4a5ef8721e more pokt node fixes 2022-03-16 13:00:36 +04:00
czarly
2f48795651 more pokt node fixes 2022-03-16 12:57:37 +04:00
czarly
623c458776 move pokt config inside the container 2022-03-16 12:46:47 +04:00
czarly
224326487c remove some files 2022-03-15 17:56:31 +04:00
czarly
b935d3e71f fix xdai rpc 2022-03-15 17:49:41 +04:00
czarly
459e253686 missing Dockerfile 2022-03-15 16:27:43 +04:00
czarly
7a07b719a8 first try of a frontend config 2022-03-15 15:51:58 +04:00
czarly
5c06b75b12 move the ip whitelist to the traefik container 2022-03-15 14:35:57 +04:00
czarly
165a7426d1 tag the image versions for more stability 2022-03-14 20:09:57 +04:00
czarly
147d398067 proper path to avalanche 2022-03-14 20:09:33 +04:00
czarly
bf8653ae6c fix polygon heimdall snapshot 2022-03-14 18:58:25 +04:00
czarly
7ca937a745 fix polygon archive data volume 2022-03-14 18:54:01 +04:00
czarly
785aac52c5 fix polygon archive data volume 2022-03-14 18:52:45 +04:00
czarly
c70dc42833 interims fix 2022-03-14 18:32:03 +04:00
czarly
e18d3bd2be interims fix 2022-03-14 18:27:36 +04:00
czarly
52adfce138 fix 2022-03-14 18:16:34 +04:00
czarly
b5dc667a1c fix 2022-03-14 18:15:41 +04:00
czarly
8a7fa9ef6f added geth 2022-03-14 18:14:52 +04:00
czarly
11ac3d9f0a fix 2022-03-14 18:07:56 +04:00
czarly
a66da89fdb fix 2022-03-14 18:06:17 +04:00
czarly
1d03732438 fix 2022-03-14 18:01:31 +04:00
czarly
70b1ccb458 fix the monitoring to come up 2022-03-14 17:59:30 +04:00
czarly
b119d8da26 typo 2022-03-14 17:55:03 +04:00
czarly
6ddc7d5926 split up the big files 2022-03-14 17:49:20 +04:00
71 changed files with 30456 additions and 169 deletions

View File

@@ -1,20 +1,8 @@
Place val.key and val.pass into ./harmony/keyfiles
### Docs
```
docker-compose up -d
```
Check if Bootstrap is working.
```
docker logs -f pokt_dokt_harmony-mainnet_1
```
Logs are at:
```
harmony/log
```
TODO:
HARMONY QUERY
```
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
View 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
View 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:

View 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
View 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
View 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 = ""

60
dshackle.yml Normal file
View File

@@ -0,0 +1,60 @@
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
expose:
- 8080 # /eth
- 8081 # /metrics
- 8082 # healthcheck
- 2449 # grpc
networks:
- chains
ports:
- "127.0.0.1:8082:8082" # healthcheck
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=/dshackle"
# - "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(`/dshackle`)"
# - "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 ""'

View 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
View 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"

View 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}"

View 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"

View 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}

View 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"

View 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}

View File

@@ -0,0 +1,64 @@
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
cluster:
defaults:
- chains:
- ethereum
options:
min-peers: 10
include:
# Private Nodes
#- "besu.yaml"
#- "geth.yaml"
#- "nethermind.yaml"
#- "erigon.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"

View 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}"

View 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}"

View 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
View 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
View 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)

View File

@@ -0,0 +1,9 @@
table, th, td {
border: 1px solid black;
}
.table a
{
display:block;
text-decoration:none;
}

View 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
View 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:

93
erigon.yml Normal file
View File

@@ -0,0 +1,93 @@
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
--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:

25
eth_proxy.yml Normal file
View File

@@ -0,0 +1,25 @@
version: '3.1'
services:
eth_proxy:
image: stakesquid/eth-proxy:latest
expose:
- "8080"
- "12449"
ports:
- "127.0.0.1:12449:12449"
environment:
- DSHACKLE_GRPC=http://dshackle:2449
- UPSTREAM_RPCS=${ETH_PROXY_UPSTREAM_RPCS}
networks:
- chains
restart: always
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.eth_proxy-stripprefix.stripprefix.prefixes=/eth-proxy"
- "traefik.http.services.eth_proxy.loadbalancer.server.port=8080"
- "traefik.http.routers.eth_proxy.entrypoints=websecure"
- "traefik.http.routers.eth_proxy.tls.certresolver=myresolver"
- "traefik.http.routers.eth_proxy.rule=Host(`$DOMAIN`) && PathPrefix(`/eth-proxy`)"
- "traefik.http.routers.eth_proxy.middlewares=eth_proxy-stripprefix, ipwhitelist"

27
evmos.yml Normal file
View 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
View 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
View 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" ]

View 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
View 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
View 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:

View 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": ""
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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": ""
}

View 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

View 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
View 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
View 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
View 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
View 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
View 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:

View File

@@ -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

View File

@@ -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

86
pocket-de.yml Normal file
View File

@@ -0,0 +1,86 @@
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-de-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_DE_1_POCKET_CORE_KEY
- POCKET_CORE_PASSPHRASE=$POKT_DE_1_POCKET_CORE_PASSPHRASE
- POCKET_SNAPSHOT=$POCKET_SNAPSHOT
volumes:
- pocket-de-1:/home/app/.pocket/data
- pocket-de-1-addrbook:/home/app/.pocket/addrbook
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.services.pocket-fr-1.loadbalancer.server.port=8081"
- "traefik.http.routers.pocket-fr-1.entrypoints=websecure"
- "traefik.http.routers.pocket-fr-1.tls.certresolver=myresolver"
- "traefik.http.routers.pocket-fr-1.rule=Host(`$POKT_DE_1_DOMAIN`) && Path(`/v1`, `/v1/client/{dispatch|relay|challenge|sim}`)"
- "prometheus-scrape.enabled=true"
- "prometheus-scrape.port=8083"
- "prometheus-scrape.job_name=pocket-de-1"
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-de-1:
pocket-de-1-addrbook:

81
pocket-frontend.yml Normal file
View 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:

117
pocket-lt.yml Normal file
View File

@@ -0,0 +1,117 @@
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"
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:

162
pokt-test.yml Normal file
View 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
View File

@@ -0,0 +1,13 @@
FROM poktnetwork/pocket-core:RC-0.9.1.1
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=361b1936d3fbe516628ebd6a503920fc4fc0f6a7@seed.pokt.rivet.cloud:26656,03b74fa3c68356bb40d58ecc10129479b159a145@seed1.mainnet.pokt.network:20656,64c91701ea98440bc3674fdb9a99311461cdfd6f@seed2.mainnet.pokt.network:21656,0057ee693f3ce332c4ffcb499ede024c586ae37b@seed3.mainnet.pokt.network:22856,9fd99b89947c6af57cd0269ad01ecb99960177cd@seed4.mainnet.pokt.network:23856,1243026603e9073507a3157bc4de99da74a078fc@seed5.mainnet.pokt.network:24856,6282b55feaff460bb35820363f1eb26237cf5ac3@seed6.mainnet.pokt.network:25856,3640ee055889befbc912dd7d3ed27d6791139395@seed7.mainnet.pokt.network:26856,1951cded4489bf51af56f3dbdd6df55c1a952b1a@seed8.mainnet.pokt.network:27856,a5f4a4cd88db9fd5def1574a0bffef3c6f354a76@seed9.mainnet.pokt.network:28856,d4039bd71d48def9f9f61f670c098b8956e52a08@seed10.mainnet.pokt.network:29856,5c133f07ed296bb9e21e3e42d5f26e0f7d2b2832@poktseed100.chainflow.io:26656
CMD ["bash", "/home/app/.pocket/bootstrap.sh", "&&", "pocket", "start", "--seeds", "361b1936d3fbe516628ebd6a503920fc4fc0f6a7@seed.pokt.rivet.cloud:26656,03b74fa3c68356bb40d58ecc10129479b159a145@seed1.mainnet.pokt.network:20656,64c91701ea98440bc3674fdb9a99311461cdfd6f@seed2.mainnet.pokt.network:21656,0057ee693f3ce332c4ffcb499ede024c586ae37b@seed3.mainnet.pokt.network:22856,9fd99b89947c6af57cd0269ad01ecb99960177cd@seed4.mainnet.pokt.network:23856,1243026603e9073507a3157bc4de99da74a078fc@seed5.mainnet.pokt.network:24856,6282b55feaff460bb35820363f1eb26237cf5ac3@seed6.mainnet.pokt.network:25856,3640ee055889befbc912dd7d3ed27d6791139395@seed7.mainnet.pokt.network:26856,1951cded4489bf51af56f3dbdd6df55c1a952b1a@seed8.mainnet.pokt.network:27856,a5f4a4cd88db9fd5def1574a0bffef3c6f354a76@seed9.mainnet.pokt.network:28856,d4039bd71d48def9f9f61f670c098b8956e52a08@seed10.mainnet.pokt.network:29856,5c133f07ed296bb9e21e3e42d5f26e0f7d2b2832@poktseed100.chainflow.io:26656", "--mainnet"]

10
pokt/bootstrap.sh Executable file
View 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
View 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
View 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
View 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
View 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
View 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
View 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" ]

View 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

View 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" ]

View 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}

View File

@@ -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
View 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
View 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

View 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

View File

60
wireguard-server.yml Normal file
View 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:

30
xdai.yml Normal file
View 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
View 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
View 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
}
}
}
}
}
}
}
}