forked from cerc-io/stack-orchestrator
Compare commits
471
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8f5030976 | ||
|
|
b686540512 | ||
|
|
9e56f6357d | ||
|
|
8770b1df86 | ||
|
|
889df76f4f | ||
|
|
5d19c56b0c | ||
|
|
d57efe87b8 | ||
|
|
80b0c07736 | ||
|
|
6fa3ca2b6d | ||
|
|
3c5489681f | ||
|
|
cf039d9562 | ||
|
|
b485a3b8d8 | ||
|
|
72dbee88d4 | ||
|
|
33e443f41f | ||
|
|
bc78c5e0d6 | ||
|
|
7fd2439aa9 | ||
|
|
eca5aae991 | ||
|
|
5beaf69a36 | ||
|
|
06c4a77afe | ||
|
|
aafadbbed6 | ||
|
|
be519e9ca0 | ||
|
|
e56a910260 | ||
|
|
e3dc75118b | ||
|
|
e0b5318ebe | ||
|
|
2425aa8556 | ||
|
|
3dc9cd584a | ||
|
|
ed9c253f61 | ||
|
|
bdf4f069b4 | ||
|
|
5f9c3c14b2 | ||
|
|
0b512db693 | ||
|
|
e0ecbc3ab3 | ||
|
|
626cc17373 | ||
|
|
c30c779535 | ||
|
|
3011a485ee | ||
|
|
d505664781 | ||
|
|
4197d39b0c | ||
|
|
8dcebe3737 | ||
|
|
50d17c3282 | ||
|
|
2c930bdbc3 | ||
|
|
f48f4978aa | ||
|
|
e89f7c9526 | ||
|
|
ae9dff553e | ||
|
|
bab3a8dba8 | ||
|
|
e0972033de | ||
|
|
b5988fba8f | ||
|
|
53ed18b3dc | ||
|
|
d3c26948fc | ||
|
|
7f9b556f9d | ||
|
|
125af19890 | ||
|
|
7797185d07 | ||
|
|
f55a14bd6c | ||
|
|
f411590452 | ||
|
|
97dc45549d | ||
|
|
8a7622ffa9 | ||
|
|
d35bbbab98 | ||
|
|
407571e18d | ||
|
|
d39e2e959e | ||
|
|
ddaddd2a8c | ||
|
|
59e0458c74 | ||
|
|
18e45af463 | ||
|
|
fd78935fe6 | ||
|
|
4c72acea96 | ||
|
|
bccf711206 | ||
|
|
333797b0c3 | ||
|
|
dc7bc6af31 | ||
|
|
d6bd99252d | ||
|
|
d30e746599 | ||
|
|
73e52c4eed | ||
|
|
e856616be8 | ||
|
|
2da03d7ed1 | ||
|
|
6a0a752e2e | ||
|
|
5afe7a29ae | ||
|
|
a8f4e4cee4 | ||
|
|
45ba1f337f | ||
|
|
0feeab6418 | ||
|
|
4ee745a4db | ||
|
|
8eed5a70a5 | ||
|
|
758ec168bd | ||
|
|
63a94bae0e | ||
|
|
29fc611885 | ||
|
|
1f9131ff5a | ||
|
|
950857fa84 | ||
|
|
54f50aa09e | ||
|
|
a5945c9e59 | ||
|
|
c8b4f89335 | ||
|
|
809889f9f0 | ||
|
|
6595659a7a | ||
|
|
9872ce33bb | ||
|
|
2ff490d121 | ||
|
|
c76195c491 | ||
|
|
831a8cd5f7 | ||
|
|
f0f40cad4a | ||
|
|
f473567bd7 | ||
|
|
3e7037e06f | ||
|
|
c465153cc7 | ||
|
|
b120682d8e | ||
|
|
c9bb0d0ccb | ||
|
|
c94fa3cccf | ||
|
|
55af33e0e8 | ||
|
|
c0f07c2d4f | ||
|
|
7ca7bcc952 | ||
|
|
ee8c8a0c13 | ||
|
|
30ce3deb31 | ||
|
|
a6cf131cd3 | ||
|
|
25b13d7822 | ||
|
|
01500e78b6 | ||
|
|
4ecc98dd46 | ||
|
|
32f8d65bb8 | ||
|
|
d19b9a65b9 | ||
|
|
98e1d120cc | ||
|
|
26ff7a969c | ||
|
|
a8e198ad55 | ||
|
|
f1a626ddf5 | ||
|
|
ff616db4ad | ||
|
|
9880b48b78 | ||
|
|
23a336020c | ||
|
|
605db8a4d2 | ||
|
|
6ec55ba460 | ||
|
|
938f51ef8c | ||
|
|
6d620ba9c2 | ||
|
|
0c4c128465 | ||
|
|
97c1ae1c43 | ||
|
|
ec6b5439f4 | ||
|
|
1d8f252a51 | ||
|
|
161665ef72 | ||
|
|
9c5f6469ff | ||
|
|
85225c72d7 | ||
|
|
223d1171e8 | ||
|
|
1e38e16550 | ||
|
|
dddae8cc7a | ||
|
|
aa702737ef | ||
|
|
c9155eafd2 | ||
|
|
1ffc6b1687 | ||
|
|
87c25dfb5e | ||
|
|
0691c22db4 | ||
|
|
5c7d445500 | ||
|
|
a93fa93d26 | ||
|
|
1852d7d4c1 | ||
|
|
fce41994a3 | ||
|
|
a5d3d6bae7 | ||
|
|
8add4671c0 | ||
|
|
b1b1464205 | ||
|
|
fbe901a0fb | ||
|
|
a9558aa874 | ||
|
|
960a24c96b | ||
|
|
c1e3f5674d | ||
|
|
55e7d22e57 | ||
|
|
3634a35479 | ||
|
|
255a71fa4c | ||
|
|
3751db8046 | ||
|
|
6bb1acc04f | ||
|
|
9da47a2e45 | ||
|
|
8cdb9cee35 | ||
|
|
f8306e6685 | ||
|
|
feb5fe7bff | ||
|
|
b0770d7379 | ||
|
|
4aecfcd780 | ||
|
|
03f6d027f9 | ||
|
|
617228d0dc | ||
|
|
d8522211f4 | ||
|
|
4ca185c753 | ||
|
|
e004d93891 | ||
|
|
8f6703940a | ||
|
|
cf0e0c5d94 | ||
|
|
7f3a33564a | ||
|
|
10337e77f6 | ||
|
|
7a1ec3f196 | ||
|
|
4beb889e9f | ||
|
|
2b8eccf167 | ||
|
|
f5acbd1db0 | ||
|
|
f87f3d4765 | ||
|
|
d2dfcc813f | ||
|
|
d6f829ee65 | ||
|
|
363a0b733f | ||
|
|
3d75523d73 | ||
|
|
35dd30f877 | ||
|
|
b3feab0592 | ||
|
|
e3e48ccbf3 | ||
|
|
df13b8f630 | ||
|
|
209d49f105 | ||
|
|
b7094c7e7f | ||
|
|
fefbcf031c | ||
|
|
d98b02266b | ||
|
|
beac97b842 | ||
|
|
ea7c5109b8 | ||
|
|
6ce01a79ed | ||
|
|
2d5abdce45 | ||
|
|
db1edd85e6 | ||
|
|
55b2d3bd25 | ||
|
|
a3b3ac18b1 | ||
|
|
53fbc60f55 | ||
|
|
4caae1d850 | ||
|
|
3f79c2b811 | ||
|
|
1629129cd5 | ||
|
|
feee38140d | ||
|
|
ddf51e01a3 | ||
|
|
b0aeff50bb | ||
|
|
cb72e5c03f | ||
|
|
c7a4d3f4e7 | ||
|
|
c715e11a88 | ||
|
|
7673de73bb | ||
|
|
f537cdbe29 | ||
|
|
09bca48498 | ||
|
|
ecb3b36387 | ||
|
|
5a50e46718 | ||
|
|
99af105b9c | ||
|
|
bfa86cbc29 | ||
|
|
332085f80b | ||
|
|
7406189596 | ||
|
|
f0ce0fef1c | ||
|
|
a1a4837c89 | ||
|
|
18f3c2cc4f | ||
|
|
391759e929 | ||
|
|
3e80f5f238 | ||
|
|
13499c6e4b | ||
|
|
6e343bec5a | ||
|
|
0f7c23951d | ||
|
|
8b11070870 | ||
|
|
5c6fe825fc | ||
|
|
80c16d2ced | ||
|
|
6e33bd47e2 | ||
|
|
c2a3ffe0dd | ||
|
|
ffc24c0be8 | ||
|
|
7021f8ed19 | ||
|
|
2e747b17be | ||
|
|
607b85f447 | ||
|
|
ce6ef81fe5 | ||
|
|
7bcad7b936 | ||
|
|
d72dcb6c74 | ||
|
|
1559330fd7 | ||
|
|
75958adf82 | ||
|
|
b3732bc7a6 | ||
|
|
317608140f | ||
|
|
21d7a1ba61 | ||
|
|
17d5e37368 | ||
|
|
f90000d9cc | ||
|
|
bf85c61711 | ||
|
|
59afaf66ae | ||
|
|
18279fcef3 | ||
|
|
a8815924c6 | ||
|
|
fe77955845 | ||
|
|
8fb9e6d39b | ||
|
|
0d6bc81233 | ||
|
|
35d7649689 | ||
|
|
504ed542c3 | ||
|
|
6dad03c031 | ||
|
|
124a838ab5 | ||
|
|
b36f9bc974 | ||
|
|
4ae959eb4f | ||
|
|
af82c8c431 | ||
|
|
d2c85e6f1d | ||
|
|
53516f3109 | ||
|
|
5a27a94a7d | ||
|
|
4fa9d675ba | ||
|
|
dcc0f91140 | ||
|
|
e8139bd372 | ||
|
|
b915db426d | ||
|
|
69d215e8ec | ||
|
|
060ac520e4 | ||
|
|
484d80be5f | ||
|
|
792887a121 | ||
|
|
129d581141 | ||
|
|
44421049ae | ||
|
|
86f13e9c6b | ||
|
|
72737bfa29 | ||
|
|
63fbaa7ae3 | ||
|
|
464ef89a01 | ||
|
|
0c5f252465 | ||
|
|
b4d9a3a831 | ||
|
|
4da19b652e | ||
|
|
be08ee81ea | ||
|
|
22bb1a0bfa | ||
|
|
287468b7c0 | ||
|
|
f23c22d5b9 | ||
|
|
1881554ae0 | ||
|
|
21d6e33dab | ||
|
|
009ce95914 | ||
|
|
f7bb8f2735 | ||
|
|
bddf72ee46 | ||
|
|
2b94ed12c2 | ||
|
|
31f9f0e864 | ||
|
|
1342be5723 | ||
|
|
d25de90df2 | ||
|
|
1fdfb9f568 | ||
|
|
9b22685484 | ||
|
|
8ee702f6ff | ||
|
|
fddd728037 | ||
|
|
fbe76f4713 | ||
|
|
79ad4fb15a | ||
|
|
46cc0e8b94 | ||
|
|
75ca36e5f7 | ||
|
|
398c834b0b | ||
|
|
51ad55b1d1 | ||
|
|
cb7b6f05f2 | ||
|
|
c358dd554f | ||
|
|
75ca0d4138 | ||
|
|
29f0302fb0 | ||
|
|
b3ae2159ee | ||
|
|
bd61d823d7 | ||
|
|
ce04ca2be5 | ||
|
|
126d671bb0 | ||
|
|
616f85ce6b | ||
|
|
bed5e262cc | ||
|
|
97da39c68b | ||
|
|
e7c5d5157e | ||
|
|
9adf48f6c8 | ||
|
|
16ff576413 | ||
|
|
f4e9837ed2 | ||
|
|
0eb890edaf | ||
|
|
788b214116 | ||
|
|
94c69d6596 | ||
|
|
aa7697dd3e | ||
|
|
741b225706 | ||
|
|
99f41a3f9f | ||
|
|
4b0f46bb1b | ||
|
|
8e056c1b0c | ||
|
|
5767b93e6a | ||
|
|
e608dca175 | ||
|
|
38feddb266 | ||
|
|
862b75de1e | ||
|
|
af44d005c3 | ||
|
|
1951a5d398 | ||
|
|
2d64f49dc5 | ||
|
|
7c69d9477b | ||
|
|
8a4f189286 | ||
|
|
aa01feb98a | ||
|
|
c4e3aa54f1 | ||
|
|
364a71d694 | ||
|
|
d96a6def14 | ||
|
|
db925bfe35 | ||
|
|
1a75a270f5 | ||
|
|
23fab04ec8 | ||
|
|
4420f45924 | ||
|
|
9e138d8a6a | ||
|
|
653f4c7d0a | ||
|
|
eb45899433 | ||
|
|
dac22b19b7 | ||
|
|
be761d10b1 | ||
|
|
08ed69e4cd | ||
|
|
84bad13934 | ||
|
|
c537d787c2 | ||
|
|
538bccd19a | ||
|
|
d5f5ecceda | ||
|
|
39741b2e8f | ||
|
|
2ce04afd1e | ||
|
|
48a761875a | ||
|
|
6ee7c3bbba | ||
|
|
4d3042bfcc | ||
|
|
49092305e4 | ||
|
|
5c3384c7ae | ||
|
|
b47d303ba4 | ||
|
|
abdf561704 | ||
|
|
8d3bca602a | ||
|
|
75e5c1d7f1 | ||
|
|
5b79195f86 | ||
|
|
139626ef8e | ||
|
|
4356e09440 | ||
|
|
030ad25b78 | ||
|
|
f096c014ce | ||
|
|
49b9983b3a | ||
|
|
4fd9e71c84 | ||
|
|
c12418222a | ||
|
|
f57b8b4ba0 | ||
|
|
e29ae7ac93 | ||
|
|
edd7d549d9 | ||
|
|
4092a127ef | ||
|
|
fae8fbed5e | ||
|
|
a900945698 | ||
|
|
2937a07cd8 | ||
|
|
6ae3c252ea | ||
|
|
178de8f496 | ||
|
|
05cdd2ed01 | ||
|
|
e801c28f60 | ||
|
|
eb70f2526e | ||
|
|
199a4036a8 | ||
|
|
f0b711912a | ||
|
|
d3d3f92953 | ||
|
|
c3101bc25a | ||
|
|
6c49520e69 | ||
|
|
70d34e6751 | ||
|
|
c6de6d6067 | ||
|
|
69b6b9a873 | ||
|
|
430b884d72 | ||
|
|
5d456f5600 | ||
|
|
ca40ffb012 | ||
|
|
6a73d3adee | ||
|
|
9480b4082e | ||
|
|
467ff235ba | ||
|
|
25a755982e | ||
|
|
e3e96fa75e | ||
|
|
42696f8165 | ||
|
|
c26f8552e1 | ||
|
|
8352893d92 | ||
|
|
a92cabcb39 | ||
|
|
f841f8a2de | ||
|
|
7f652708bb | ||
|
|
c769fce491 | ||
|
|
02335795fb | ||
|
|
c717fd8a59 | ||
|
|
0de2db7e90 | ||
|
|
92f325a09b | ||
|
|
964edbec6f | ||
|
|
6f2a44ba2f | ||
|
|
9053d2d782 | ||
|
|
628fed4ef7 | ||
|
|
c737ec7ed6 | ||
|
|
d927c92c0a | ||
|
|
142be179f4 | ||
|
|
547ca561c0 | ||
|
|
863e19211e | ||
|
|
e20f9993d2 | ||
|
|
9dab9b815c | ||
|
|
83115bcb9d | ||
|
|
46c22f4e4f | ||
|
|
912483df58 | ||
|
|
ff69670db6 | ||
|
|
871cd90456 | ||
|
|
639ab8cbc3 | ||
|
|
bc5eff71b5 | ||
|
|
5ec774a300 | ||
|
|
9a750f0d9e | ||
|
|
8a6ba6d01b | ||
|
|
b4ddef7ff0 | ||
|
|
a38ac5470d | ||
|
|
77380aec94 | ||
|
|
ce7e5f2d82 | ||
|
|
4dda8e2a87 | ||
|
|
24ab259741 | ||
|
|
607575e4f4 | ||
|
|
86e245e272 | ||
|
|
d677e5f369 | ||
|
|
9991baa8d6 | ||
|
|
d033d4ff93 | ||
|
|
f02bbee3bf | ||
|
|
bdde1b2c9e | ||
|
|
96a83422e7 | ||
|
|
af03208da7 | ||
|
|
86e2407800 | ||
|
|
c01ff28b4f | ||
|
|
ec54258285 | ||
|
|
1f2ee33b42 | ||
|
|
a2b700727c | ||
|
|
fa8ba7f9ef | ||
|
|
dd0b8ae81f | ||
|
|
b5c7ad114c | ||
|
|
d0d29717e1 | ||
|
|
368091e125 | ||
|
|
27195fc977 | ||
|
|
91ad0f39e6 | ||
|
|
b47b2200ce | ||
|
|
2e291b3e4c | ||
|
|
629e484c30 | ||
|
|
3d7d23b68b | ||
|
|
c6c9e229d2 | ||
|
|
c77cc4e111 | ||
|
|
26c654f3ef | ||
|
|
b6a84db6a2 | ||
|
|
e7d31e78ad | ||
|
|
86b7e6957c | ||
|
|
7812490434 | ||
|
|
161cd37b9c | ||
|
|
e183e2a880 | ||
|
|
7bd8045d6e | ||
|
|
b2268a6518 | ||
|
|
dfef77f35f | ||
|
|
78cd4e2e3e | ||
|
|
dca9a36633 | ||
|
|
e799c9eaef | ||
|
|
42dac0e712 | ||
|
|
a44c063e5a | ||
|
|
6ad2684de3 |
@@ -0,0 +1,36 @@
|
||||
name: Fixturenet-Eth-Plugeth-Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: 'ci-test'
|
||||
|
||||
# Needed until we can incorporate docker startup into the executor container
|
||||
env:
|
||||
DOCKER_HOST: unix:///var/run/dind.sock
|
||||
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: "Run an Ethereum plugeth fixturenet test"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Install Python"
|
||||
uses: cerc-io/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: "Print Python version"
|
||||
run: python3 --version
|
||||
- name: "Install shiv"
|
||||
run: pip install shiv
|
||||
- name: "Generate build version file"
|
||||
run: ./scripts/create_build_tag_file.sh
|
||||
- name: "Build local shiv package"
|
||||
run: ./scripts/build_shiv_package.sh
|
||||
- name: Start dockerd # Also needed until we can incorporate into the executor
|
||||
run: |
|
||||
dockerd -H $DOCKER_HOST --userland-proxy=false &
|
||||
sleep 5
|
||||
- name: "Run fixturenet-eth tests"
|
||||
run: ./tests/fixturenet-eth-plugeth/run-test.sh
|
||||
@@ -0,0 +1,37 @@
|
||||
name: Fixturenet-Eth-Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: 'ci-test'
|
||||
|
||||
# Needed until we can incorporate docker startup into the executor container
|
||||
env:
|
||||
DOCKER_HOST: unix:///var/run/dind.sock
|
||||
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: "Run an Ethereum fixturenet test"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Install Python"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: "Print Python version"
|
||||
run: python3 --version
|
||||
- name: "Install shiv"
|
||||
run: pip install shiv
|
||||
- name: "Generate build version file"
|
||||
run: ./scripts/create_build_tag_file.sh
|
||||
- name: "Build local shiv package"
|
||||
run: ./scripts/build_shiv_package.sh
|
||||
- name: Start dockerd # Also needed until we can incorporate into the executor
|
||||
run: |
|
||||
dockerd -H $DOCKER_HOST --userland-proxy=false &
|
||||
sleep 5
|
||||
- name: "Run fixturenet-eth tests"
|
||||
run: ./tests/fixturenet-eth/run-test.sh
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
name: Publish
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- publish-test
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: "Build and publish"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Get build info"
|
||||
id: build-info
|
||||
run: |
|
||||
build_tag=$(./scripts/create_build_tag_file.sh)
|
||||
echo "build-tag=v${build_tag}" >> $GITHUB_OUTPUT
|
||||
- name: "Install Python"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: "Print Python version"
|
||||
run: python3 --version
|
||||
- name: "Install shiv"
|
||||
run: pip install shiv
|
||||
- name: "Build local shiv package"
|
||||
id: build
|
||||
run: |
|
||||
./scripts/build_shiv_package.sh
|
||||
result_code=$?
|
||||
echo "package-file=$(ls ./package/*)" >> $GITHUB_OUTPUT
|
||||
exit $result_code
|
||||
- name: "Stage artifact file"
|
||||
run: |
|
||||
cp ${{ steps.build.outputs.package-file }} ./laconic-so
|
||||
- name: "Create release"
|
||||
uses: https://gitea.com/cerc-io/action-gh-release@gitea-v2
|
||||
with:
|
||||
tag_name: ${{ steps.build-info.outputs.build-tag }}
|
||||
# On the publish test branch, mark our release as a draft
|
||||
# Hack using endsWith to workaround Gitea sometimes sending "publish-test" vs "refs/heads/publish-test"
|
||||
draft: ${{ endsWith('publish-test', github.ref ) }}
|
||||
files: ./laconic-so
|
||||
@@ -0,0 +1,39 @@
|
||||
name: Deploy Test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: '*'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- ci-test
|
||||
|
||||
# Needed until we can incorporate docker startup into the executor container
|
||||
env:
|
||||
DOCKER_HOST: unix:///var/run/dind.sock
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: "Run deploy test suite"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Install Python"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: "Print Python version"
|
||||
run: python3 --version
|
||||
- name: "Install shiv"
|
||||
run: pip install shiv
|
||||
- name: "Generate build version file"
|
||||
run: ./scripts/create_build_tag_file.sh
|
||||
- name: "Build local shiv package"
|
||||
run: ./scripts/build_shiv_package.sh
|
||||
- name: Start dockerd # Also needed until we can incorporate into the executor
|
||||
run: |
|
||||
dockerd -H $DOCKER_HOST --userland-proxy=false &
|
||||
sleep 5
|
||||
- name: "Run deploy tests"
|
||||
run: ./tests/deploy/run-deploy-test.sh
|
||||
@@ -0,0 +1,40 @@
|
||||
name: Smoke Test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: '*'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- ci-test
|
||||
|
||||
# Needed until we can incorporate docker startup into the executor container
|
||||
env:
|
||||
DOCKER_HOST: unix:///var/run/dind.sock
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: "Run basic test suite"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Install Python"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: "Print Python version"
|
||||
run: python3 --version
|
||||
- name: "Install shiv"
|
||||
run: pip install shiv
|
||||
- name: "Generate build version file"
|
||||
run: ./scripts/create_build_tag_file.sh
|
||||
- name: "Build local shiv package"
|
||||
run: ./scripts/build_shiv_package.sh
|
||||
- name: Start dockerd # Also needed until we can incorporate into the executor
|
||||
run: |
|
||||
dockerd -H $DOCKER_HOST --userland-proxy=false &
|
||||
sleep 5
|
||||
- name: "Run smoke tests"
|
||||
run: ./tests/smoke-test/run-smoke-test.sh
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
name: Lint Checks
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: '*'
|
||||
push:
|
||||
branches: '*'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: "Run linter"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Install Python"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name : "Run flake8"
|
||||
uses: py-actions/flake8@v2
|
||||
@@ -0,0 +1,46 @@
|
||||
name: Publish
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- publish-test
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: "Build and publish"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Get build info"
|
||||
id: build-info
|
||||
run: |
|
||||
build_tag=$(./scripts/create_build_tag_file.sh)
|
||||
echo "build-tag=v${build_tag}" >> $GITHUB_OUTPUT
|
||||
- name: "Install Python"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: "Print Python version"
|
||||
run: python3 --version
|
||||
- name: "Install shiv"
|
||||
run: pip install shiv
|
||||
- name: "Build local shiv package"
|
||||
id: build
|
||||
run: |
|
||||
./scripts/build_shiv_package.sh
|
||||
result_code=$?
|
||||
echo "package-file=$(ls ./package/*)" >> $GITHUB_OUTPUT
|
||||
exit $result_code
|
||||
- name: "Stage artifact file"
|
||||
run: |
|
||||
cp ${{ steps.build.outputs.package-file }} ./laconic-so
|
||||
- name: "Create release"
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: ${{ steps.build-info.outputs.build-tag }}
|
||||
# On the publish test branch, mark our release as a draft
|
||||
# Hack using endsWith to workaround Gitea sometimes sending "publish-test" vs "refs/heads/publish-test"
|
||||
draft: ${{ endsWith('publish-test', github.ref ) }}
|
||||
files: ./laconic-so
|
||||
@@ -0,0 +1,29 @@
|
||||
name: Deploy Test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: '*'
|
||||
push:
|
||||
branches: '*'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: "Run deploy test suite"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Install Python"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: "Print Python version"
|
||||
run: python3 --version
|
||||
- name: "Install shiv"
|
||||
run: pip install shiv
|
||||
- name: "Generate build version file"
|
||||
run: ./scripts/create_build_tag_file.sh
|
||||
- name: "Build local shiv package"
|
||||
run: ./scripts/build_shiv_package.sh
|
||||
- name: "Run deploy tests"
|
||||
run: ./tests/deploy/run-deploy-test.sh
|
||||
@@ -0,0 +1,29 @@
|
||||
name: Smoke Test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: '*'
|
||||
push:
|
||||
branches: '*'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: "Run basic test suite"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Clone project repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: "Install Python"
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
- name: "Print Python version"
|
||||
run: python3 --version
|
||||
- name: "Install shiv"
|
||||
run: pip install shiv
|
||||
- name: "Generate build version file"
|
||||
run: ./scripts/create_build_tag_file.sh
|
||||
- name: "Build local shiv package"
|
||||
run: ./scripts/build_shiv_package.sh
|
||||
- name: "Run smoke tests"
|
||||
run: ./tests/smoke-test/run-smoke-test.sh
|
||||
+3
-1
@@ -5,4 +5,6 @@ laconic-so
|
||||
laconic_stack_orchestrator.egg-info
|
||||
__pycache__
|
||||
*~
|
||||
|
||||
package
|
||||
app/data/build_tag.txt
|
||||
build
|
||||
|
||||
@@ -6,13 +6,19 @@ Stack Orchestrator allows building and deployment of a Laconic Stack on a single
|
||||
|
||||
## Install
|
||||
|
||||
**To get started quickly** on a fresh Ubuntu instance (e.g, Digital Ocean); [try this script](./scripts/quick-install-linux.sh). **WARNING:** always review scripts prior to running them so that you know what is happening on your machine.
|
||||
|
||||
For any other installation, follow along below and **adapt these instructions based on the specifics of your system.**
|
||||
|
||||
|
||||
Ensure that the following are already installed:
|
||||
|
||||
- [Python3](https://wiki.python.org/moin/BeginnersGuide/Download)
|
||||
- [Docker](https://docs.docker.com/get-docker/)
|
||||
- [Docker Compose](https://docs.docker.com/compose/install/)
|
||||
- [Python3](https://wiki.python.org/moin/BeginnersGuide/Download): `python3 --version` >= `3.8.10` (the Python3 shipped in Ubuntu 20+ is good to go)
|
||||
- [Docker](https://docs.docker.com/get-docker/): `docker --version` >= `20.10.21`
|
||||
- [jq](https://stedolan.github.io/jq/download/): `jq --version` >= `1.5`
|
||||
- [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git): `git --version` >= `2.10.3`
|
||||
|
||||
Note: if installing docker-compose via package manager (as opposed to Docker Desktop), you must [install the plugin](https://docs.docker.com/compose/install/linux/#install-the-plugin-manually), e.g., on Linux:
|
||||
Note: if installing docker-compose via package manager on Linux (as opposed to Docker Desktop), you must [install the plugin](https://docs.docker.com/compose/install/linux/#install-the-plugin-manually), e.g. :
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.docker/cli-plugins
|
||||
@@ -20,86 +26,57 @@ curl -SL https://github.com/docker/compose/releases/download/v2.11.2/docker-comp
|
||||
chmod +x ~/.docker/cli-plugins/docker-compose
|
||||
```
|
||||
|
||||
Next, download the latest release from [this page](https://github.com/cerc-io/stack-orchestrator/tags), into a suitable directory (e.g. `~/bin`):
|
||||
Next decide on a directory where you would like to put the stack-orchestrator program. Typically this would be
|
||||
a "user" binary directory such as `~/bin` or perhaps `/usr/local/laconic` or possibly just the current working directory.
|
||||
|
||||
Now, having selected that directory, download the latest release from [this page](https://github.com/cerc-io/stack-orchestrator/tags) into it (we're using `~/bin` below for concreteness but edit to suit if you selected a different directory). Also be sure that the destination directory exists and is writable:
|
||||
|
||||
```bash
|
||||
curl -L -o ~/bin/laconic-so https://github.com/cerc-io/stack-orchestrator/releases/latest/download/laconic-so
|
||||
```
|
||||
|
||||
Give it permissions:
|
||||
Give it execute permissions:
|
||||
|
||||
```bash
|
||||
chmod +x ~/bin/laconic-so
|
||||
```
|
||||
|
||||
Ensure `laconic-so` is on the [`PATH`](https://unix.stackexchange.com/a/26059)
|
||||
|
||||
Verify operation:
|
||||
Verify operation (your version will probably be different, just check here that you see some version output and not an error):
|
||||
|
||||
```
|
||||
laconic-so --help
|
||||
Usage: python -m laconic-so [OPTIONS] COMMAND [ARGS]...
|
||||
laconic-so version
|
||||
Version: 1.1.0-7a607c2-202304260513
|
||||
```
|
||||
Save the distribution url to `~/.laconic-so/config.yml`:
|
||||
```bash
|
||||
mkdir ~/.laconic-so
|
||||
echo "distribution-url: https://github.com/cerc-io/stack-orchestrator/releases/latest/download/laconic-so" > ~/.laconic-so/config.yml"
|
||||
```
|
||||
|
||||
Laconic Stack Orchestrator
|
||||
### Update
|
||||
If Stack Orchestrator was installed using the process described above, it is able to subsequently self-update to the current latest version by running:
|
||||
|
||||
Options:
|
||||
--quiet
|
||||
--verbose
|
||||
--dry-run
|
||||
--local-stack
|
||||
-h, --help Show this message and exit.
|
||||
|
||||
Commands:
|
||||
build-containers build the set of containers required for a complete...
|
||||
build-npms build the set of npm packages required for a...
|
||||
deploy-system deploy a stack
|
||||
setup-repositories git clone the set of repositories required to build...
|
||||
```bash
|
||||
laconic-so update
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Three sub-commands: `setup-repositories`, `build-containers` and `deploy-system` are generally run in order. The following is a slim example for standing up the `erc20-watcher`. Go further with the [erc20 watcher demo](/app/data/stacks/erc20) and other pieces of the stack, within the [`stacks` directory](/app/data/stacks).
|
||||
The various [stacks](/app/data/stacks) each contain instructions for running different stacks based on your use case. For example:
|
||||
|
||||
### Setup Repositories
|
||||
|
||||
Clone the set of git repositories necessary to build a system:
|
||||
|
||||
```bash
|
||||
laconic-so --verbose setup-repositories --include cerc-io/go-ethereum,cerc-io/ipld-eth-db,cerc-io/ipld-eth-server,cerc-io/watcher-ts
|
||||
```
|
||||
|
||||
This will default to `~/cerc` or - if set - the environment variable `CERC_REPO_BASE_DIR`
|
||||
|
||||
### Build Containers
|
||||
|
||||
Build the set of docker container images required to run a system. It takes around 10 minutes to build all the containers from scratch.
|
||||
|
||||
```bash
|
||||
laconic-so --verbose build-containers --include cerc/go-ethereum,cerc/go-ethereum-foundry,cerc/ipld-eth-db,cerc/ipld-eth-server,cerc/watcher-erc20
|
||||
```
|
||||
|
||||
### Deploy System
|
||||
|
||||
Uses `docker-compose` to deploy a system (with most recently built container images).
|
||||
|
||||
```bash
|
||||
laconic-so --verbose deploy-system --include ipld-eth-db,go-ethereum-foundry,ipld-eth-server,watcher-erc20 up
|
||||
```
|
||||
|
||||
Check out he GraphQL playground here: [http://localhost:3002/graphql](http://localhost:3002/graphql)
|
||||
|
||||
See the [erc20 watcher demo](/app/data/stacks/erc20) to continue further.
|
||||
|
||||
### Cleanup
|
||||
|
||||
```bash
|
||||
laconic-so --verbose deploy-system --include ipld-eth-db,go-ethereum-foundry,ipld-eth-server,watcher-erc20 down
|
||||
```
|
||||
- [self-hosted Gitea](/app/data/stacks/build-support)
|
||||
- [an Optimism Fixturenet](/app/data/stacks/fixturenet-optimism)
|
||||
- [laconicd with console and CLI](app/data/stacks/fixturenet-laconic-loaded)
|
||||
- [kubo (IPFS)](app/data/stacks/kubo)
|
||||
|
||||
## Contributing
|
||||
|
||||
See the [CONTRIBUTING.md](.github/CONTRIBUTING.md) for developer mode install.
|
||||
See the [CONTRIBUTING.md](/docs/CONTRIBUTING.md) for developer mode install.
|
||||
|
||||
## Platform Support
|
||||
|
||||
Native aarm64 is _not_ currently supported. x64 emulation on ARM64 macos should work (not yet tested).
|
||||
|
||||
|
||||
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
# Copyright © 2022, 2023 Vulcanize
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http:#www.gnu.org/licenses/>.
|
||||
|
||||
import os
|
||||
from abc import ABC, abstractmethod
|
||||
from decouple import config
|
||||
from .deploy import get_stack_status
|
||||
|
||||
|
||||
def get_stack(config, stack):
|
||||
if stack == "package-registry":
|
||||
return package_registry_stack(config, stack)
|
||||
else:
|
||||
return base_stack(config, stack)
|
||||
|
||||
|
||||
class base_stack(ABC):
|
||||
|
||||
def __init__(self, config, stack):
|
||||
self.config = config
|
||||
self.stack = stack
|
||||
|
||||
@abstractmethod
|
||||
def ensure_available(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_url(self):
|
||||
pass
|
||||
|
||||
|
||||
class package_registry_stack(base_stack):
|
||||
|
||||
def ensure_available(self):
|
||||
self.url = "<no registry url set>"
|
||||
# Check if we were given an external registry URL
|
||||
url_from_environment = os.environ.get("CERC_NPM_REGISTRY_URL")
|
||||
if url_from_environment:
|
||||
if self.config.verbose:
|
||||
print(f"Using package registry url from CERC_NPM_REGISTRY_URL: {url_from_environment}")
|
||||
self.url = url_from_environment
|
||||
else:
|
||||
# Otherwise we expect to use the local package-registry stack
|
||||
# First check if the stack is up
|
||||
registry_running = get_stack_status(self.config, "package-registry")
|
||||
if registry_running:
|
||||
# If it is available, get its mapped port and construct its URL
|
||||
if self.config.debug:
|
||||
print("Found local package registry stack is up")
|
||||
# TODO: get url from deploy-stack
|
||||
self.url = "http://gitea.local:3000/api/packages/cerc-io/npm/"
|
||||
else:
|
||||
# If not, print a message about how to start it and return fail to the caller
|
||||
print("ERROR: The package-registry stack is not running, and no external registry "
|
||||
"specified with CERC_NPM_REGISTRY_URL")
|
||||
print("ERROR: Start the local package registry with: laconic-so --stack package-registry deploy-system up")
|
||||
return False
|
||||
return True
|
||||
|
||||
def get_url(self):
|
||||
return self.url
|
||||
|
||||
|
||||
def get_npm_registry_url():
|
||||
# If an auth token is not defined, we assume the default should be the cerc registry
|
||||
# If an auth token is defined, we assume the local gitea should be used.
|
||||
default_npm_registry_url = "http://gitea.local:3000/api/packages/cerc-io/npm/" if config(
|
||||
"CERC_NPM_AUTH_TOKEN", default=None
|
||||
) else "https://git.vdb.to/api/packages/cerc-io/npm/"
|
||||
return config("CERC_NPM_REGISTRY_URL", default=default_npm_registry_url)
|
||||
+23
-8
@@ -1,4 +1,4 @@
|
||||
# Copyright © 2022, 2023 Cerc
|
||||
# Copyright © 2022, 2023 Vulcanize
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
@@ -28,6 +28,7 @@ import click
|
||||
import importlib.resources
|
||||
from pathlib import Path
|
||||
from .util import include_exclude_check, get_parsed_stack_config
|
||||
from .base import get_npm_registry_url
|
||||
|
||||
# TODO: find a place for this
|
||||
# epilog="Config provided either in .env or settings.ini or env vars: CERC_REPO_BASE_DIR (defaults to ~/cerc)"
|
||||
@@ -36,13 +37,16 @@ from .util import include_exclude_check, get_parsed_stack_config
|
||||
@click.command()
|
||||
@click.option('--include', help="only build these containers")
|
||||
@click.option('--exclude', help="don\'t build these containers")
|
||||
@click.option("--force-rebuild", is_flag=True, default=False, help="Override dependency checking -- always rebuild")
|
||||
@click.option("--extra-build-args", help="Supply extra arguments to build")
|
||||
@click.pass_context
|
||||
def command(ctx, include, exclude):
|
||||
def command(ctx, include, exclude, force_rebuild, extra_build_args):
|
||||
'''build the set of containers required for a complete stack'''
|
||||
|
||||
quiet = ctx.obj.quiet
|
||||
verbose = ctx.obj.verbose
|
||||
dry_run = ctx.obj.dry_run
|
||||
debug = ctx.obj.debug
|
||||
local_stack = ctx.obj.local_stack
|
||||
stack = ctx.obj.stack
|
||||
continue_on_error = ctx.obj.continue_on_error
|
||||
@@ -81,10 +85,21 @@ def command(ctx, include, exclude):
|
||||
|
||||
# TODO: make this configurable
|
||||
container_build_env = {
|
||||
"CERC_NPM_URL": "http://gitea.local:3000/api/packages/cerc-io/npm/",
|
||||
"CERC_NPM_AUTH_TOKEN": config("CERC_NPM_AUTH_TOKEN", default="<token-not-supplied>"),
|
||||
"CERC_REPO_BASE_DIR": dev_root_path
|
||||
"CERC_NPM_REGISTRY_URL": get_npm_registry_url(),
|
||||
"CERC_GO_AUTH_TOKEN": config("CERC_GO_AUTH_TOKEN", default=""),
|
||||
"CERC_NPM_AUTH_TOKEN": config("CERC_NPM_AUTH_TOKEN", default=""),
|
||||
"CERC_REPO_BASE_DIR": dev_root_path,
|
||||
"CERC_CONTAINER_BASE_DIR": container_build_dir,
|
||||
"CERC_HOST_UID": f"{os.getuid()}",
|
||||
"CERC_HOST_GID": f"{os.getgid()}",
|
||||
"DOCKER_BUILDKIT": config("DOCKER_BUILDKIT", default="0")
|
||||
}
|
||||
container_build_env.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {})
|
||||
container_build_env.update({"CERC_FORCE_REBUILD": "true"} if force_rebuild else {})
|
||||
container_build_env.update({"CERC_CONTAINER_EXTRA_BUILD_ARGS": extra_build_args} if extra_build_args else {})
|
||||
docker_host_env = os.getenv("DOCKER_HOST")
|
||||
if docker_host_env:
|
||||
container_build_env.update({"DOCKER_HOST": docker_host_env})
|
||||
|
||||
def process_container(container):
|
||||
if not quiet:
|
||||
@@ -102,11 +117,11 @@ def command(ctx, include, exclude):
|
||||
# TODO: make this less of a hack -- should be specified in some metadata somewhere
|
||||
# Check if we have a repo for this container. If not, set the context dir to the container-build subdir
|
||||
repo_full_path = os.path.join(dev_root_path, repo_dir)
|
||||
repo_dir_or_build_dir = repo_dir if os.path.exists(repo_full_path) else build_dir
|
||||
build_command = os.path.join(container_build_dir, "default-build.sh") + f" {container} {repo_dir_or_build_dir}"
|
||||
repo_dir_or_build_dir = repo_full_path if os.path.exists(repo_full_path) else build_dir
|
||||
build_command = os.path.join(container_build_dir, "default-build.sh") + f" {container}:local {repo_dir_or_build_dir}"
|
||||
if not dry_run:
|
||||
if verbose:
|
||||
print(f"Executing: {build_command}")
|
||||
print(f"Executing: {build_command} with environment: {container_build_env}")
|
||||
build_result = subprocess.run(build_command, shell=True, env=container_build_env)
|
||||
if verbose:
|
||||
print(f"Return code is: {build_result.returncode}")
|
||||
|
||||
+68
-8
@@ -1,4 +1,4 @@
|
||||
# Copyright © 2022, 2023 Cerc
|
||||
# Copyright © 2022, 2023 Vulcanize
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
@@ -20,17 +20,25 @@
|
||||
|
||||
import os
|
||||
import sys
|
||||
from shutil import rmtree, copytree
|
||||
from decouple import config
|
||||
import click
|
||||
import importlib.resources
|
||||
from python_on_whales import docker, DockerException
|
||||
from .base import get_stack
|
||||
from .util import include_exclude_check, get_parsed_stack_config
|
||||
|
||||
builder_js_image_name = "cerc/builder-js:local"
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.option('--include', help="only build these packages")
|
||||
@click.option('--exclude', help="don\'t build these packages")
|
||||
@click.option("--force-rebuild", is_flag=True, default=False,
|
||||
help="Override existing target package version check -- force rebuild")
|
||||
@click.option("--extra-build-args", help="Supply extra arguments to build")
|
||||
@click.pass_context
|
||||
def command(ctx, include, exclude):
|
||||
def command(ctx, include, exclude, force_rebuild, extra_build_args):
|
||||
'''build the set of npm packages required for a complete stack'''
|
||||
|
||||
quiet = ctx.obj.quiet
|
||||
@@ -41,17 +49,38 @@ def command(ctx, include, exclude):
|
||||
stack = ctx.obj.stack
|
||||
continue_on_error = ctx.obj.continue_on_error
|
||||
|
||||
_ensure_prerequisites()
|
||||
|
||||
# build-npms depends on having access to a writable package registry
|
||||
# so we check here that it is available
|
||||
package_registry_stack = get_stack(ctx.obj, "package-registry")
|
||||
registry_available = package_registry_stack.ensure_available()
|
||||
if not registry_available:
|
||||
print("FATAL: no npm registry available for build-npms command")
|
||||
sys.exit(1)
|
||||
npm_registry_url = package_registry_stack.get_url()
|
||||
npm_registry_url_token = config("CERC_NPM_AUTH_TOKEN", default=None)
|
||||
if not npm_registry_url_token:
|
||||
print("FATAL: CERC_NPM_AUTH_TOKEN is not defined")
|
||||
sys.exit(1)
|
||||
|
||||
if local_stack:
|
||||
dev_root_path = os.getcwd()[0:os.getcwd().rindex("stack-orchestrator")]
|
||||
print(f'Local stack dev_root_path (CERC_REPO_BASE_DIR) overridden to: {dev_root_path}')
|
||||
else:
|
||||
dev_root_path = os.path.expanduser(config("CERC_REPO_BASE_DIR", default="~/cerc"))
|
||||
|
||||
if not quiet:
|
||||
build_root_path = os.path.join(dev_root_path, "build-trees")
|
||||
|
||||
if verbose:
|
||||
print(f'Dev Root is: {dev_root_path}')
|
||||
|
||||
if not os.path.isdir(dev_root_path):
|
||||
print('Dev root directory doesn\'t exist, creating')
|
||||
os.makedirs(dev_root_path)
|
||||
if not os.path.isdir(dev_root_path):
|
||||
print('Build root directory doesn\'t exist, creating')
|
||||
os.makedirs(build_root_path)
|
||||
|
||||
# See: https://stackoverflow.com/a/20885799/1701505
|
||||
from . import data
|
||||
@@ -74,21 +103,42 @@ def command(ctx, include, exclude):
|
||||
print(f"Building npm package: {package}")
|
||||
repo_dir = package
|
||||
repo_full_path = os.path.join(dev_root_path, repo_dir)
|
||||
# TODO: make the npm registry url configurable.
|
||||
build_command = ["sh", "-c", "cd /workspace && build-npm-package-local-dependencies.sh http://gitea.local:3000/api/packages/cerc-io/npm/"]
|
||||
# Copy the repo and build that to avoid propagating JS tooling file changes back into the cloned repo
|
||||
repo_copy_path = os.path.join(build_root_path, repo_dir)
|
||||
# First delete any old build tree
|
||||
if os.path.isdir(repo_copy_path):
|
||||
if verbose:
|
||||
print(f"Deleting old build tree: {repo_copy_path}")
|
||||
if not dry_run:
|
||||
rmtree(repo_copy_path)
|
||||
# Now copy the repo into the build tree location
|
||||
if verbose:
|
||||
print(f"Copying build tree from: {repo_full_path} to: {repo_copy_path}")
|
||||
if not dry_run:
|
||||
copytree(repo_full_path, repo_copy_path)
|
||||
build_command = ["sh", "-c", f"cd /workspace && build-npm-package-local-dependencies.sh {npm_registry_url}"]
|
||||
if not dry_run:
|
||||
if verbose:
|
||||
print(f"Executing: {build_command}")
|
||||
envs = {"CERC_NPM_AUTH_TOKEN": os.environ["CERC_NPM_AUTH_TOKEN"]} | ({"CERC_SCRIPT_DEBUG": "true"} if debug else {})
|
||||
# Originally we used the PEP 584 merge operator:
|
||||
# envs = {"CERC_NPM_AUTH_TOKEN": npm_registry_url_token} | ({"CERC_SCRIPT_DEBUG": "true"} if debug else {})
|
||||
# but that isn't available in Python 3.8 (default in Ubuntu 20) so for now we use dict.update:
|
||||
envs = {"CERC_NPM_AUTH_TOKEN": npm_registry_url_token,
|
||||
"LACONIC_HOSTED_CONFIG_FILE": "config-hosted.yml" # Convention used by our web app packages
|
||||
}
|
||||
envs.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {})
|
||||
envs.update({"CERC_FORCE_REBUILD": "true"} if force_rebuild else {})
|
||||
envs.update({"CERC_CONTAINER_EXTRA_BUILD_ARGS": extra_build_args} if extra_build_args else {})
|
||||
try:
|
||||
docker.run("cerc/builder-js",
|
||||
docker.run(builder_js_image_name,
|
||||
remove=True,
|
||||
interactive=True,
|
||||
tty=True,
|
||||
user=f"{os.getuid()}:{os.getgid()}",
|
||||
envs=envs,
|
||||
# TODO: detect this host name in npm_registry_url rather than hard-wiring it
|
||||
add_hosts=[("gitea.local", "host-gateway")],
|
||||
volumes=[(repo_full_path, "/workspace")],
|
||||
volumes=[(repo_copy_path, "/workspace")],
|
||||
command=build_command
|
||||
)
|
||||
# Note that although the docs say that build_result should contain
|
||||
@@ -111,3 +161,13 @@ def command(ctx, include, exclude):
|
||||
else:
|
||||
if verbose:
|
||||
print(f"Excluding: {package}")
|
||||
|
||||
|
||||
def _ensure_prerequisites():
|
||||
# Check that the builder-js container is available and
|
||||
# Tell the user how to build it if not
|
||||
images = docker.image.list(builder_js_image_name)
|
||||
if len(images) == 0:
|
||||
print(f"FATAL: builder image: {builder_js_image_name} is required but was not found")
|
||||
print("Please run this command to create it: laconic-so --stack build-support build-containers")
|
||||
sys.exit(1)
|
||||
|
||||
+14
-21
@@ -1,4 +1,4 @@
|
||||
# Copyright © 2022 Cerc
|
||||
# Copyright © 2022, 2023 Vulcanize
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
@@ -15,28 +15,18 @@
|
||||
|
||||
import click
|
||||
|
||||
from app import setup_repositories
|
||||
from app import build_containers
|
||||
from app import build_npms
|
||||
from app import deploy_system
|
||||
from app import version
|
||||
from .command_types import CommandOptions
|
||||
from . import setup_repositories
|
||||
from . import build_containers
|
||||
from . import build_npms
|
||||
from . import deploy
|
||||
from . import version
|
||||
from . import deployment
|
||||
from . import update
|
||||
|
||||
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
|
||||
|
||||
|
||||
# TODO: this seems kind of weird and heavy on boilerplate -- check it is
|
||||
# the best Python can do for us.
|
||||
class Options(object):
|
||||
def __init__(self, stack, quiet, verbose, dry_run, local_stack, debug, continue_on_error):
|
||||
self.stack = stack
|
||||
self.quiet = quiet
|
||||
self.verbose = verbose
|
||||
self.dry_run = dry_run
|
||||
self.local_stack = local_stack
|
||||
self.debug = debug
|
||||
self.continue_on_error = continue_on_error
|
||||
|
||||
|
||||
@click.group(context_settings=CONTEXT_SETTINGS)
|
||||
@click.option('--stack', help="specify a stack to build/deploy")
|
||||
@click.option('--quiet', is_flag=True, default=False)
|
||||
@@ -49,11 +39,14 @@ class Options(object):
|
||||
@click.pass_context
|
||||
def cli(ctx, stack, quiet, verbose, dry_run, local_stack, debug, continue_on_error):
|
||||
"""Laconic Stack Orchestrator"""
|
||||
ctx.obj = Options(stack, quiet, verbose, dry_run, local_stack, debug, continue_on_error)
|
||||
ctx.obj = CommandOptions(stack, quiet, verbose, dry_run, local_stack, debug, continue_on_error)
|
||||
|
||||
|
||||
cli.add_command(setup_repositories.command, "setup-repositories")
|
||||
cli.add_command(build_containers.command, "build-containers")
|
||||
cli.add_command(build_npms.command, "build-npms")
|
||||
cli.add_command(deploy_system.command, "deploy-system")
|
||||
cli.add_command(deploy.command, "deploy") # deploy is an alias for deploy-system
|
||||
cli.add_command(deploy.command, "deploy-system")
|
||||
cli.add_command(deployment.command, "deployment")
|
||||
cli.add_command(version.command, "version")
|
||||
cli.add_command(update.command, "update")
|
||||
@@ -0,0 +1,27 @@
|
||||
# Copyright © 2023 Vulcanize
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http:#www.gnu.org/licenses/>.
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class CommandOptions:
|
||||
stack: str
|
||||
quiet: bool = False
|
||||
verbose: bool = False
|
||||
dry_run: bool = False
|
||||
local_stack: bool = False
|
||||
debug: bool = False
|
||||
continue_on_error: bool = False
|
||||
@@ -0,0 +1,49 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Deploys the core (UniswapV3Factory) contract
|
||||
sushiswap-v3-core:
|
||||
image: cerc/sushiswap-v3-core:local
|
||||
restart: on-failure
|
||||
env_file:
|
||||
# Defaults
|
||||
- ../config/contract-sushiswap/deployment-params.env
|
||||
environment:
|
||||
# Overrides
|
||||
CERC_ETH_RPC_ENDPOINT: ${ETH_RPC_ENDPOINT}
|
||||
CERC_CHAIN_ID: ${CHAIN_ID}
|
||||
CERC_ACCOUNT_PRIVATE_KEY: ${ACCOUNT_PRIVATE_KEY}
|
||||
CERC_DEPLOY: ${DEPLOY}
|
||||
volumes:
|
||||
- ../config/network/wait-for-it.sh:/app/wait-for-it.sh
|
||||
- ../config/contract-sushiswap/deploy-core-contracts.sh:/app/deploy-core-contracts.sh
|
||||
- sushiswap_core_deployment:/app/deployments/docker
|
||||
command: ["bash", "-c", "/app/deploy-core-contracts.sh && tail -f"]
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Deploys the periphery (NFPM, token, etc.) contracts
|
||||
sushiswap-v3-periphery:
|
||||
image: cerc/sushiswap-v3-periphery:local
|
||||
restart: on-failure
|
||||
env_file:
|
||||
# Defaults
|
||||
- ../config/contract-sushiswap/deployment-params.env
|
||||
environment:
|
||||
# Overrides
|
||||
CERC_ETH_RPC_ENDPOINT: ${ETH_RPC_ENDPOINT}
|
||||
CERC_CHAIN_ID: ${CHAIN_ID}
|
||||
CERC_ACCOUNT_PRIVATE_KEY: ${ACCOUNT_PRIVATE_KEY}
|
||||
CERC_DEPLOY: ${DEPLOY}
|
||||
volumes:
|
||||
- ../config/network/wait-for-it.sh:/app/wait-for-it.sh
|
||||
- ../config/contract-sushiswap/deploy-periphery-contracts.sh:/app/deploy-periphery-contracts.sh
|
||||
- sushiswap_core_deployment:/app/core-deployments/docker
|
||||
- sushiswap_periphery_deployment:/app/deployments/docker
|
||||
command: ["bash", "-c", "/app/deploy-periphery-contracts.sh && tail -f"]
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
sushiswap_core_deployment:
|
||||
sushiswap_periphery_deployment:
|
||||
@@ -0,0 +1,23 @@
|
||||
version: "3.2"
|
||||
services:
|
||||
prometheus:
|
||||
restart: always
|
||||
image: prom/prometheus
|
||||
depends_on:
|
||||
fixturenet-eth-geth-1:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ../config/fixturenet-eth-metrics/prometheus/etc:/etc/prometheus
|
||||
ports:
|
||||
- "9090"
|
||||
grafana:
|
||||
restart: always
|
||||
image: grafana/grafana
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_PASSWORD=changeme6325
|
||||
volumes:
|
||||
- ../config/fixturenet-eth-metrics/grafana/etc/provisioning/dashboards:/etc/grafana/provisioning/dashboards
|
||||
- ../config/fixturenet-eth-metrics/grafana/etc/provisioning/datasources:/etc/grafana/provisioning/datasources
|
||||
- ../config/fixturenet-eth-metrics/grafana/etc/dashboards:/etc/grafana/dashboards
|
||||
ports:
|
||||
- "3000"
|
||||
@@ -2,27 +2,34 @@ version: '3.7'
|
||||
|
||||
services:
|
||||
fixturenet-eth-bootnode-geth:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-bootnode-geth
|
||||
env_file:
|
||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||
environment:
|
||||
RUN_BOOTNODE: "true"
|
||||
image: cerc/fixturenet-eth-geth:local
|
||||
volumes:
|
||||
- fixturenet_eth_bootnode_geth_data:/root/ethdata
|
||||
ports:
|
||||
- "9898"
|
||||
- "30303"
|
||||
|
||||
fixturenet-eth-geth-1:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-geth-1
|
||||
cap_add:
|
||||
- SYS_PTRACE
|
||||
environment:
|
||||
CERC_REMOTE_DEBUG: "true"
|
||||
CERC_RUN_STATEDIFF: "detect"
|
||||
CERC_REMOTE_DEBUG: ${CERC_REMOTE_DEBUG:-true}
|
||||
CERC_RUN_STATEDIFF: ${CERC_RUN_STATEDIFF:-detect}
|
||||
CERC_STATEDIFF_DB_NODE_ID: 1
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
env_file:
|
||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||
image: cerc/fixturenet-eth-geth:local
|
||||
volumes:
|
||||
- fixturenet_eth_geth_1_data:/root/ethdata
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "8545"]
|
||||
interval: 30s
|
||||
@@ -33,10 +40,12 @@ services:
|
||||
- fixturenet-eth-bootnode-geth
|
||||
ports:
|
||||
- "8545"
|
||||
- "8546"
|
||||
- "40000"
|
||||
- "6060"
|
||||
|
||||
fixturenet-eth-geth-2:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-geth-2
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "8545"]
|
||||
@@ -44,19 +53,28 @@ services:
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 3s
|
||||
environment:
|
||||
CERC_KEEP_RUNNING_AFTER_GETH_EXIT: "true"
|
||||
env_file:
|
||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||
image: cerc/fixturenet-eth-geth:local
|
||||
depends_on:
|
||||
- fixturenet-eth-bootnode-geth
|
||||
volumes:
|
||||
- fixturenet_eth_geth_2_data:/root/ethdata
|
||||
ports:
|
||||
- "8545"
|
||||
- "8546"
|
||||
|
||||
fixturenet-eth-bootnode-lighthouse:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-bootnode-lighthouse
|
||||
environment:
|
||||
RUN_BOOTNODE: "true"
|
||||
image: cerc/fixturenet-eth-lighthouse:local
|
||||
|
||||
fixturenet-eth-lighthouse-1:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-lighthouse-1
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8001/eth/v2/beacon/blocks/head"]
|
||||
@@ -71,6 +89,8 @@ services:
|
||||
ETH1_ENDPOINT: "http://fixturenet-eth-geth-1:8545"
|
||||
EXECUTION_ENDPOINT: "http://fixturenet-eth-geth-1:8551"
|
||||
image: cerc/fixturenet-eth-lighthouse:local
|
||||
volumes:
|
||||
- fixturenet_eth_lighthouse_1_data:/opt/testnet/build/cl
|
||||
depends_on:
|
||||
fixturenet-eth-bootnode-lighthouse:
|
||||
condition: service_started
|
||||
@@ -78,8 +98,9 @@ services:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
- "8001"
|
||||
|
||||
|
||||
fixturenet-eth-lighthouse-2:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-lighthouse-2
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8001/eth/v2/beacon/blocks/head"]
|
||||
@@ -95,8 +116,17 @@ services:
|
||||
EXECUTION_ENDPOINT: "http://fixturenet-eth-geth-2:8551"
|
||||
LIGHTHOUSE_GENESIS_STATE_URL: "http://fixturenet-eth-lighthouse-1:8001/eth/v2/debug/beacon/states/0"
|
||||
image: cerc/fixturenet-eth-lighthouse:local
|
||||
volumes:
|
||||
- fixturenet_eth_lighthouse_2_data:/opt/testnet/build/cl
|
||||
depends_on:
|
||||
fixturenet-eth-bootnode-lighthouse:
|
||||
condition: service_started
|
||||
fixturenet-eth-geth-2:
|
||||
condition: service_healthy
|
||||
|
||||
volumes:
|
||||
fixturenet_eth_bootnode_geth_data:
|
||||
fixturenet_eth_geth_1_data:
|
||||
fixturenet_eth_geth_2_data:
|
||||
fixturenet_eth_lighthouse_1_data:
|
||||
fixturenet_eth_lighthouse_2_data:
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
services:
|
||||
laconic-console:
|
||||
restart: unless-stopped
|
||||
image: cerc/laconic-console-host:local
|
||||
environment:
|
||||
- CERC_WEBAPP_FILES_DIR=${CERC_WEBAPP_FILES_DIR:-/usr/local/share/.config/yarn/global/node_modules/@cerc-io/console-app/dist/production}
|
||||
- LACONIC_HOSTED_ENDPOINT=${LACONIC_HOSTED_ENDPOINT:-http://localhost}
|
||||
ports:
|
||||
- "80"
|
||||
@@ -1,12 +1,15 @@
|
||||
version: "3.2"
|
||||
services:
|
||||
laconicd:
|
||||
restart: unless-stopped
|
||||
image: cerc/laconicd:local
|
||||
command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||
volumes:
|
||||
# TODO: look at folding this script into the container
|
||||
# The cosmos-sdk node's database directory:
|
||||
- laconicd-data:/root/.laconicd/data
|
||||
# TODO: look at folding these scripts into the container
|
||||
- ../config/fixturenet-laconicd/create-fixturenet.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||
- ../config/fixturenet-laconicd/export-mykey.sh:/docker-entrypoint-scripts.d/export-mykey.sh
|
||||
- ../config/fixturenet-laconicd/export-myaddress.sh:/docker-entrypoint-scripts.d/export-myaddress.sh
|
||||
# TODO: determine which of the ports below is really needed
|
||||
ports:
|
||||
- "6060"
|
||||
@@ -18,4 +21,10 @@ services:
|
||||
- "9090"
|
||||
- "9091"
|
||||
- "1317"
|
||||
cli:
|
||||
image: cerc/laconic-registry-cli:local
|
||||
volumes:
|
||||
- ../config/fixturenet-laconicd/registry-cli-config-template.yml:/registry-cli-config-template.yml
|
||||
|
||||
volumes:
|
||||
laconicd-data:
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
|
||||
lotus-miner:
|
||||
hostname: lotus-miner
|
||||
env_file:
|
||||
- ../config/fixturenet-lotus/lotus-env.env
|
||||
image: cerc/lotus:local
|
||||
volumes:
|
||||
- ../config/fixturenet-lotus/setup-miner.sh:/docker-entrypoint-scripts.d/setup-miner.sh
|
||||
- ../config/fixturenet-lotus/fund-account.sh:/fund-account.sh
|
||||
- lotus_miner_params:/var/tmp/filecoin-proof-parameters
|
||||
- lotus_shared:/root/.lotus-shared
|
||||
- lotus_miner_data:/root/data
|
||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-miner.sh"]
|
||||
ports:
|
||||
- "1234"
|
||||
- "2345"
|
||||
- "3456"
|
||||
- "1777"
|
||||
|
||||
lotus-node-1:
|
||||
hostname: lotus-node-1
|
||||
env_file:
|
||||
- ../config/fixturenet-lotus/lotus-env.env
|
||||
environment:
|
||||
# Use 0.0.0.0 so that calls can be made from outside the container
|
||||
- LOTUS_API_LISTENADDRESS=/ip4/0.0.0.0/tcp/1234/http
|
||||
image: cerc/lotus:local
|
||||
volumes:
|
||||
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
||||
- lotus_node_1_params:/var/tmp/filecoin-proof-parameters
|
||||
- lotus_shared:/root/.lotus-shared
|
||||
- lotus_node_1_data:/root/data
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "1234"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 60
|
||||
start_period: 3s
|
||||
depends_on:
|
||||
- lotus-miner
|
||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
||||
ports:
|
||||
- "1234"
|
||||
- "2345"
|
||||
- "3456"
|
||||
- "1777"
|
||||
|
||||
lotus-node-2:
|
||||
hostname: lotus-node-2
|
||||
env_file:
|
||||
- ../config/fixturenet-lotus/lotus-env.env
|
||||
environment:
|
||||
# Use 0.0.0.0 so that calls can be made from outside the container
|
||||
- LOTUS_API_LISTENADDRESS=/ip4/0.0.0.0/tcp/1234/http
|
||||
image: cerc/lotus:local
|
||||
volumes:
|
||||
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
||||
- lotus_node_2_params:/var/tmp/filecoin-proof-parameters
|
||||
- lotus_shared:/root/.lotus-shared
|
||||
- lotus_node_2_data:/root/data
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "1234"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 60
|
||||
start_period: 3s
|
||||
depends_on:
|
||||
- lotus-miner
|
||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
||||
ports:
|
||||
- "1234"
|
||||
- "2345"
|
||||
- "3456"
|
||||
- "1777"
|
||||
|
||||
volumes:
|
||||
lotus_miner_params:
|
||||
lotus_node_1_params:
|
||||
lotus_node_2_params:
|
||||
lotus_shared:
|
||||
lotus_miner_data:
|
||||
lotus_node_1_data:
|
||||
lotus_node_2_data:
|
||||
@@ -0,0 +1,165 @@
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
# Generates and funds the accounts required when setting up the L2 chain (outputs to volume l2_accounts)
|
||||
# Creates / updates the configuration for L1 contracts deployment
|
||||
# Deploys the L1 smart contracts (outputs to volume l1_deployment)
|
||||
fixturenet-optimism-contracts:
|
||||
restart: on-failure
|
||||
hostname: fixturenet-optimism-contracts
|
||||
image: cerc/optimism-contracts:local
|
||||
env_file:
|
||||
- ../config/fixturenet-optimism/l1-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_L1_CHAIN_ID: ${CERC_L1_CHAIN_ID}
|
||||
CERC_L1_RPC: ${CERC_L1_RPC}
|
||||
CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL}
|
||||
CERC_L1_ADDRESS: ${CERC_L1_ADDRESS}
|
||||
CERC_L1_PRIV_KEY: ${CERC_L1_PRIV_KEY}
|
||||
CERC_L1_ADDRESS_2: ${CERC_L1_ADDRESS_2}
|
||||
CERC_L1_PRIV_KEY_2: ${CERC_L1_PRIV_KEY_2}
|
||||
# Waits for L1 endpoint to be up before running the script
|
||||
command: |
|
||||
"./wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- ./run.sh"
|
||||
volumes:
|
||||
- ../config/network/wait-for-it.sh:/app/packages/contracts-bedrock/wait-for-it.sh
|
||||
- ../config/optimism-contracts/hardhat-tasks/verify-contract-deployment.ts:/app/packages/contracts-bedrock/tasks/verify-contract-deployment.ts
|
||||
- ../config/optimism-contracts/hardhat-tasks/rekey-json.ts:/app/packages/contracts-bedrock/tasks/rekey-json.ts
|
||||
- ../config/optimism-contracts/hardhat-tasks/send-balance.ts:/app/packages/contracts-bedrock/tasks/send-balance.ts
|
||||
- ../config/fixturenet-optimism/optimism-contracts/update-config.js:/app/packages/contracts-bedrock/update-config.js
|
||||
- ../config/fixturenet-optimism/optimism-contracts/run.sh:/app/packages/contracts-bedrock/run.sh
|
||||
- l2_accounts:/l2-accounts
|
||||
- l1_deployment:/app/packages/contracts-bedrock
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Generates the config files required for L2 (outputs to volume l2_config)
|
||||
op-node-l2-config-gen:
|
||||
restart: on-failure
|
||||
image: cerc/optimism-op-node:local
|
||||
depends_on:
|
||||
fixturenet-optimism-contracts:
|
||||
condition: service_completed_successfully
|
||||
env_file:
|
||||
- ../config/fixturenet-optimism/l1-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_L1_RPC: ${CERC_L1_RPC}
|
||||
volumes:
|
||||
- ../config/fixturenet-optimism/generate-l2-config.sh:/app/generate-l2-config.sh
|
||||
- l1_deployment:/contracts-bedrock:ro
|
||||
- l2_config:/app
|
||||
command: ["sh", "/app/generate-l2-config.sh"]
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Initializes and runs the L2 execution client (outputs to volume l2_geth_data)
|
||||
op-geth:
|
||||
restart: always
|
||||
image: cerc/optimism-l2geth:local
|
||||
depends_on:
|
||||
op-node-l2-config-gen:
|
||||
condition: service_started
|
||||
volumes:
|
||||
- ../config/fixturenet-optimism/run-op-geth.sh:/run-op-geth.sh
|
||||
- l2_config:/op-node:ro
|
||||
- l2_accounts:/l2-accounts:ro
|
||||
- l2_geth_data:/datadir
|
||||
entrypoint: "sh"
|
||||
command: "/run-op-geth.sh"
|
||||
ports:
|
||||
- "0.0.0.0:8545:8545"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost:8545"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
|
||||
# Runs the L2 consensus client (Sequencer node)
|
||||
op-node:
|
||||
restart: always
|
||||
image: cerc/optimism-op-node:local
|
||||
depends_on:
|
||||
op-geth:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/fixturenet-optimism/l1-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_L1_RPC: ${CERC_L1_RPC}
|
||||
volumes:
|
||||
- ../config/fixturenet-optimism/run-op-node.sh:/app/run-op-node.sh
|
||||
- l2_config:/op-node-data:ro
|
||||
- l2_accounts:/l2-accounts:ro
|
||||
command: ["sh", "/app/run-op-node.sh"]
|
||||
ports:
|
||||
- "0.0.0.0:8547:8547"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost:8547"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Runs the batcher (takes transactions from the Sequencer and publishes them to L1)
|
||||
op-batcher:
|
||||
restart: always
|
||||
image: cerc/optimism-op-batcher:local
|
||||
depends_on:
|
||||
op-node:
|
||||
condition: service_healthy
|
||||
op-geth:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/fixturenet-optimism/l1-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_L1_RPC: ${CERC_L1_RPC}
|
||||
volumes:
|
||||
- ../config/network/wait-for-it.sh:/wait-for-it.sh
|
||||
- ../config/fixturenet-optimism/run-op-batcher.sh:/run-op-batcher.sh
|
||||
- l2_accounts:/l2-accounts:ro
|
||||
entrypoint: ["sh", "-c"]
|
||||
# Waits for L1 endpoint to be up before running the batcher
|
||||
command: |
|
||||
"/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-batcher.sh"
|
||||
ports:
|
||||
- "127.0.0.1:8548:8548"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Runs the proposer (periodically submits new state roots to L1)
|
||||
op-proposer:
|
||||
restart: always
|
||||
image: cerc/optimism-op-proposer:local
|
||||
depends_on:
|
||||
op-node:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/fixturenet-optimism/l1-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_L1_RPC: ${CERC_L1_RPC}
|
||||
volumes:
|
||||
- ../config/network/wait-for-it.sh:/wait-for-it.sh
|
||||
- ../config/fixturenet-optimism/run-op-proposer.sh:/run-op-proposer.sh
|
||||
- l1_deployment:/contracts-bedrock:ro
|
||||
- l2_accounts:/l2-accounts:ro
|
||||
entrypoint: ["sh", "-c"]
|
||||
# Waits for L1 endpoint to be up before running the proposer
|
||||
command: |
|
||||
"/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-proposer.sh"
|
||||
ports:
|
||||
- "127.0.0.1:8560:8560"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
l1_deployment:
|
||||
l2_accounts:
|
||||
l2_config:
|
||||
l2_geth_data:
|
||||
@@ -0,0 +1,130 @@
|
||||
services:
|
||||
fixturenet-eth-bootnode-geth:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-bootnode-geth
|
||||
env_file:
|
||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||
environment:
|
||||
RUN_BOOTNODE: "true"
|
||||
image: cerc/fixturenet-plugeth-plugeth:local
|
||||
volumes:
|
||||
- fixturenet_plugeth_bootnode_geth_data:/root/ethdata
|
||||
ports:
|
||||
- "9898"
|
||||
- "30303"
|
||||
|
||||
fixturenet-eth-geth-1:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-geth-1
|
||||
cap_add:
|
||||
- SYS_PTRACE
|
||||
environment:
|
||||
CERC_REMOTE_DEBUG: ${CERC_REMOTE_DEBUG:-true}
|
||||
CERC_RUN_STATEDIFF: ${CERC_RUN_STATEDIFF:-detect}
|
||||
CERC_STATEDIFF_DB_NODE_ID: 1
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
env_file:
|
||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||
image: cerc/fixturenet-plugeth-plugeth:local
|
||||
volumes:
|
||||
- fixturenet_plugeth_geth_1_data:/root/ethdata
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8545/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 3s
|
||||
depends_on:
|
||||
- fixturenet-eth-bootnode-geth
|
||||
ports:
|
||||
- "8545"
|
||||
- "8546"
|
||||
- "40000"
|
||||
- "6060"
|
||||
|
||||
fixturenet-eth-geth-2:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-geth-2
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8545/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 3s
|
||||
environment:
|
||||
CERC_KEEP_RUNNING_AFTER_GETH_EXIT: "true"
|
||||
env_file:
|
||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||
image: cerc/fixturenet-plugeth-plugeth:local
|
||||
depends_on:
|
||||
- fixturenet-eth-bootnode-geth
|
||||
volumes:
|
||||
- fixturenet_plugeth_geth_2_data:/root/ethdata
|
||||
ports:
|
||||
- "8545"
|
||||
- "8546"
|
||||
|
||||
fixturenet-eth-bootnode-lighthouse:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-bootnode-lighthouse
|
||||
environment:
|
||||
RUN_BOOTNODE: "true"
|
||||
image: cerc/fixturenet-eth-lighthouse:local
|
||||
|
||||
fixturenet-eth-lighthouse-1:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-lighthouse-1
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8001/eth/v2/beacon/blocks/head"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 30s
|
||||
env_file:
|
||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||
environment:
|
||||
NODE_NUMBER: "1"
|
||||
ETH1_ENDPOINT: "http://fixturenet-eth-geth-1:8545"
|
||||
EXECUTION_ENDPOINT: "http://fixturenet-eth-geth-1:8551"
|
||||
image: cerc/fixturenet-eth-lighthouse:local
|
||||
volumes:
|
||||
- fixturenet_plugeth_lighthouse_1_data:/opt/testnet/build/cl
|
||||
depends_on:
|
||||
fixturenet-eth-bootnode-lighthouse:
|
||||
condition: service_started
|
||||
fixturenet-eth-geth-1:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
- "8001"
|
||||
|
||||
fixturenet-eth-lighthouse-2:
|
||||
restart: always
|
||||
hostname: fixturenet-eth-lighthouse-2
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:8001/eth/v2/beacon/blocks/head"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 30s
|
||||
env_file:
|
||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||
environment:
|
||||
NODE_NUMBER: "2"
|
||||
ETH1_ENDPOINT: "http://fixturenet-eth-geth-2:8545"
|
||||
EXECUTION_ENDPOINT: "http://fixturenet-eth-geth-2:8551"
|
||||
LIGHTHOUSE_GENESIS_STATE_URL: "http://fixturenet-eth-lighthouse-1:8001/eth/v2/debug/beacon/states/0"
|
||||
image: cerc/fixturenet-eth-lighthouse:local
|
||||
volumes:
|
||||
- fixturenet_plugeth_lighthouse_2_data:/opt/testnet/build/cl
|
||||
depends_on:
|
||||
fixturenet-eth-bootnode-lighthouse:
|
||||
condition: service_started
|
||||
fixturenet-eth-geth-2:
|
||||
condition: service_healthy
|
||||
|
||||
volumes:
|
||||
fixturenet_plugeth_bootnode_geth_data:
|
||||
fixturenet_plugeth_geth_1_data:
|
||||
fixturenet_plugeth_geth_2_data:
|
||||
fixturenet_plugeth_lighthouse_1_data:
|
||||
fixturenet_plugeth_lighthouse_2_data:
|
||||
@@ -0,0 +1,18 @@
|
||||
version: "3.2"
|
||||
services:
|
||||
pocket:
|
||||
restart: unless-stopped
|
||||
image: cerc/pocket:local
|
||||
# command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||
volumes:
|
||||
# TODO: look at folding these scripts into the container
|
||||
- ../config/fixturenet-pocket/create-fixturenet.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||
- ../config/fixturenet-pocket/chains.json:/home/app/pocket-configs/chains.json
|
||||
- ../config/fixturenet-pocket/genesis.json:/home/app/pocket-configs/genesis.json
|
||||
ports:
|
||||
- "8081:8081" # pocket relay rpc
|
||||
networks:
|
||||
net1:
|
||||
name: fixturenet-eth_default
|
||||
external: true
|
||||
@@ -0,0 +1,27 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Deploys the sushiswap v3 subgraph
|
||||
sushiswap-subgraph-v3:
|
||||
image: cerc/sushiswap-subgraphs:local
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
graph-node:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- APP=v3
|
||||
- NETWORK=lotus-fixturenet
|
||||
command: ["bash", "-c", "./v3/run-v3.sh && ./blocks/run-blocks.sh"]
|
||||
working_dir: /app/subgraphs
|
||||
volumes:
|
||||
- ../config/fixturenet-sushiswap-subgraph-v3/lotus-fixturenet.js.template:/app/config/lotus-fixturenet.js.template
|
||||
- ../config/fixturenet-sushiswap-subgraph-v3/run-blocks.sh:/app/subgraphs/blocks/run-blocks.sh
|
||||
- ../config/fixturenet-sushiswap-subgraph-v3/run-v3.sh:/app/subgraphs/v3/run-v3.sh
|
||||
- sushiswap_core_deployment:/app/subgraphs/v3/core-deployments/docker
|
||||
- sushiswap_periphery_deployment:/app/subgraphs/v3/periphery-deployments/docker
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
sushiswap_core_deployment:
|
||||
sushiswap_periphery_deployment:
|
||||
@@ -0,0 +1,9 @@
|
||||
# Add-on pod to include foundry tooling within a fixturenet
|
||||
services:
|
||||
foundry:
|
||||
restart: always
|
||||
image: cerc/foundry:local
|
||||
command: ["while :; do sleep 600; done"]
|
||||
volumes:
|
||||
- ../config/foundry/foundry.toml:/foundry.toml
|
||||
- ./foundry/workspace:/workspace
|
||||
@@ -8,7 +8,7 @@ services:
|
||||
condition: service_healthy
|
||||
image: cerc/go-ethereum-foundry:local
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "8545"]
|
||||
test: ["CMD", "nc", "-vz", "localhost", "8545"]
|
||||
interval: 30s
|
||||
timeout: 3s
|
||||
retries: 10
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
go-nitro:
|
||||
image: cerc/go-nitro:local
|
||||
hostname: go-nitro
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
# Wait for Nitro contracts to be deployed
|
||||
nitro-contracts:
|
||||
condition: service_completed_successfully
|
||||
environment:
|
||||
CERC_NITRO_CHAIN_URL: ${CERC_NITRO_CHAIN_URL:-ws://fixturenet-eth-geth-1:8546}
|
||||
CERC_NITRO_PK: ${CERC_NITRO_PK:-2d999770f7b5d49b694080f987b82bbc9fc9ac2b4dcc10b0f8aba7d700f69c6d}
|
||||
CERC_NITRO_CHAIN_PK: ${CERC_NITRO_CHAIN_PK:-570b909da9669b2f35a0b1ac70b8358516d55ae1b5b3710e95e9a94395090597}
|
||||
CERC_NITRO_USE_DURABLE_STORE: ${CERC_NITRO_USE_DURABLE_STORE:-true}
|
||||
CERC_NITRO_DURABLE_STORE_FOLDER: ${CERC_NITRO_DURABLE_STORE_FOLDER:-/app/data/nitro-store}
|
||||
CERC_NA_ADDRESS: ${CERC_NA_ADDRESS}
|
||||
CERC_VPA_ADDRESS: ${CERC_VPA_ADDRESS}
|
||||
CERC_CA_ADDRESS: ${CERC_CA_ADDRESS}
|
||||
entrypoint: ["bash", "-c", "/app/run-nitro-node.sh"]
|
||||
volumes:
|
||||
- go_nitro_data:/app/data
|
||||
- nitro_deployment:/app/deployment
|
||||
- ../config/go-nitro/run-nitro-node.sh:/app/run-nitro-node.sh
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "4005"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
ports:
|
||||
- "3005"
|
||||
- "4005:4005"
|
||||
- "5005:5005"
|
||||
|
||||
nitro-rpc-client:
|
||||
image: cerc/nitro-rpc-client:local
|
||||
hostname: nitro-rpc-client
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
# Wait for the go-nitro node to start
|
||||
go-nitro:
|
||||
condition: service_healthy
|
||||
command: ["bash", "-c", "tail -f /dev/null"]
|
||||
|
||||
volumes:
|
||||
go_nitro_data:
|
||||
nitro_deployment:
|
||||
@@ -0,0 +1,71 @@
|
||||
services:
|
||||
graph-node:
|
||||
image: cerc/graph-node:local
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
ipfs:
|
||||
condition: service_healthy
|
||||
extra_hosts:
|
||||
- host.docker.internal:host-gateway
|
||||
environment:
|
||||
ipfs: ipfs:5001
|
||||
postgres_host: db
|
||||
postgres_port: 5432
|
||||
postgres_user: graph-node
|
||||
postgres_pass: password
|
||||
postgres_db: graph-node
|
||||
ethereum: ${ETH_NETWORKS:-lotus-fixturenet:http://lotus-node-1:1234/rpc/v1}
|
||||
GRAPH_LOG: debug
|
||||
ETHEREUM_REORG_THRESHOLD: 3
|
||||
entrypoint: ["bash", "-c"]
|
||||
# Wait for ETH RPC endpoint to be up when running with fixturenet-lotus
|
||||
command: |
|
||||
"wait_for ${ETH_RPC_HOST:-lotus-node-1}:${ETH_RPC_PORT:-1234} -t 1800 -- start"
|
||||
ports:
|
||||
- "8000"
|
||||
- "8001"
|
||||
- "8020"
|
||||
- "8030"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "8020"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 3s
|
||||
ipfs:
|
||||
image: ipfs/kubo:master-2023-02-20-714a968
|
||||
volumes:
|
||||
- ipfs-import:/import
|
||||
- ipfs-data:/data/ipfs
|
||||
ports:
|
||||
- "8080"
|
||||
- "4001"
|
||||
- "5001"
|
||||
db:
|
||||
image: postgres:14-alpine
|
||||
volumes:
|
||||
- db-data:/var/lib/postgresql/data
|
||||
environment:
|
||||
POSTGRES_USER: "graph-node"
|
||||
POSTGRES_DB: "graph-node"
|
||||
POSTGRES_PASSWORD: "password"
|
||||
POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C"
|
||||
command:
|
||||
[
|
||||
"postgres",
|
||||
"-cshared_preload_libraries=pg_stat_statements"
|
||||
]
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 3s
|
||||
ports:
|
||||
- "5432"
|
||||
|
||||
volumes:
|
||||
ipfs-import:
|
||||
ipfs-data:
|
||||
db-data:
|
||||
@@ -7,11 +7,9 @@ services:
|
||||
condition: service_healthy
|
||||
image: cerc/ipld-eth-server:local
|
||||
environment:
|
||||
IPLD_SERVER_GRAPHQL: "true"
|
||||
IPLD_POSTGRAPHILEPATH: http://graphql:5000
|
||||
ETH_SERVER_HTTPPATH: 0.0.0.0:8081
|
||||
ETH_SERVER_GRAPHQL: "true"
|
||||
ETH_SERVER_GRAPHQLPATH: 0.0.0.0:8082
|
||||
SERVER_HTTP_PATH: 0.0.0.0:8081
|
||||
SERVER_GRAPHQL: "true"
|
||||
SERVER_GRAPHQLPATH: 0.0.0.0:8082
|
||||
VDB_COMMAND: "serve"
|
||||
ETH_CHAIN_CONFIG: "/tmp/chain.json"
|
||||
DATABASE_NAME: cerc_testing
|
||||
@@ -20,16 +18,24 @@ services:
|
||||
DATABASE_USER: "vdbm"
|
||||
DATABASE_PASSWORD: "password"
|
||||
ETH_CHAIN_ID: 99
|
||||
ETH_FORWARD_ETH_CALLS: $eth_forward_eth_calls
|
||||
ETH_PROXY_ON_ERROR: $eth_proxy_on_error
|
||||
ETH_HTTP_PATH: $eth_http_path
|
||||
ETH_FORWARD_ETH_CALLS: "false"
|
||||
ETH_FORWARD_GET_STORAGE_AT: "false"
|
||||
ETH_PROXY_ON_ERROR: "false"
|
||||
METRICS: "true"
|
||||
PROM_HTTP: "true"
|
||||
PROM_HTTP_ADDR: "0.0.0.0"
|
||||
PROM_HTTP_PORT: "8090"
|
||||
LOG_LEVEL: "debug"
|
||||
CERC_REMOTE_DEBUG: ${CERC_REMOTE_DEBUG:-true}
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ../config/ipld-eth-server/chain.json
|
||||
target: /tmp/chain.json
|
||||
ports:
|
||||
- "127.0.0.1:8081:8081"
|
||||
- "127.0.0.1:8082:8082"
|
||||
- "8081"
|
||||
- "8082"
|
||||
- "8090"
|
||||
- "40000"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "8081"]
|
||||
interval: 20s
|
||||
|
||||
@@ -29,9 +29,17 @@ services:
|
||||
condition: service_healthy
|
||||
keycloak-nginx:
|
||||
image: nginx:1.23-alpine
|
||||
restart: always
|
||||
volumes:
|
||||
- ../config/keycloak/nginx:/etc/nginx/conf.d
|
||||
ports:
|
||||
- 80
|
||||
depends_on:
|
||||
- keycloak
|
||||
keycloak-nginx-prometheus-exporter:
|
||||
image: nginx/nginx-prometheus-exporter
|
||||
restart: always
|
||||
environment:
|
||||
- SCRAPE_URI=http://keycloak-nginx:80/stub_status
|
||||
depends_on:
|
||||
- keycloak-nginx
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
version: "3.2"
|
||||
# See: https://docs.ipfs.tech/install/run-ipfs-inside-docker/#set-up
|
||||
services:
|
||||
ipfs:
|
||||
image: ipfs/kubo:master-2023-02-20-714a968
|
||||
restart: always
|
||||
volumes:
|
||||
- ./ipfs/import:/import
|
||||
- ./ipfs/data:/data/ipfs
|
||||
ports:
|
||||
- "0.0.0.0:8080:8080"
|
||||
- "0.0.0.0:4001:4001"
|
||||
- "0.0.0.0:5001:5001"
|
||||
@@ -0,0 +1,8 @@
|
||||
version: "3.2"
|
||||
|
||||
services:
|
||||
lasso:
|
||||
image: cerc/lasso:local
|
||||
restart: always
|
||||
ports:
|
||||
- "0.0.0.0:3000:3000"
|
||||
@@ -0,0 +1,15 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
redis:
|
||||
hostname: mainnet-eth-api-proxy-redis
|
||||
image: redis:7-alpine
|
||||
command: redis-server --save "" --appendonly no --maxmemory-policy allkeys-lru --maxmemory 1G
|
||||
|
||||
eth-api-proxy:
|
||||
hostname: mainnet-eth-api-proxy
|
||||
image: cerc/eth-api-proxy:local
|
||||
env_file:
|
||||
- ../config/mainnet-eth-api-proxy/ethpxy.env
|
||||
ports:
|
||||
- 8547
|
||||
@@ -0,0 +1,51 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
keycloak-db:
|
||||
image: postgres:14-alpine
|
||||
env_file:
|
||||
- ../config/mainnet-eth-keycloak/keycloak.env
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 3s
|
||||
volumes:
|
||||
- mainnet_eth_keycloak_db:/var/lib/postgresql/data
|
||||
ports:
|
||||
- 5432
|
||||
|
||||
keycloak:
|
||||
image: cerc/keycloak:local
|
||||
env_file:
|
||||
- ../config/mainnet-eth-keycloak/keycloak.env
|
||||
environment:
|
||||
JAVA_OPTS_APPEND: "-Dkeycloak.migration.action=import -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/import -Dkeycloak.migration.strategy=IGNORE_EXISTING"
|
||||
volumes:
|
||||
- ../config/mainnet-eth-keycloak/import:/import
|
||||
ports:
|
||||
- 8080
|
||||
command: ["start"]
|
||||
depends_on:
|
||||
keycloak-db:
|
||||
condition: service_healthy
|
||||
|
||||
keycloak-reg-ui:
|
||||
image: cerc/keycloak-reg-ui:local
|
||||
env_file:
|
||||
- ../config/mainnet-eth-keycloak/keycloak.env
|
||||
volumes:
|
||||
- ../config/mainnet-eth-keycloak/ui:/config
|
||||
ports:
|
||||
- 80
|
||||
|
||||
keycloak-reg-api:
|
||||
image: cerc/keycloak-reg-api:local
|
||||
env_file:
|
||||
- ../config/mainnet-eth-keycloak/keycloak.env
|
||||
ports:
|
||||
- 9292
|
||||
|
||||
volumes:
|
||||
mainnet_eth_keycloak_db:
|
||||
@@ -0,0 +1,25 @@
|
||||
version: "3.2"
|
||||
services:
|
||||
prometheus:
|
||||
restart: always
|
||||
image: prom/prometheus
|
||||
depends_on:
|
||||
mainnet-eth-geth-1:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/mainnet-eth-metrics/metrics.env
|
||||
volumes:
|
||||
- ../config/mainnet-eth-metrics/prometheus/etc:/etc/prometheus
|
||||
ports:
|
||||
- "9090"
|
||||
grafana:
|
||||
restart: always
|
||||
image: grafana/grafana
|
||||
env_file:
|
||||
- ../config/mainnet-eth-metrics/metrics.env
|
||||
volumes:
|
||||
- ../config/mainnet-eth-metrics/grafana/etc/provisioning/dashboards:/etc/grafana/provisioning/dashboards
|
||||
- ../config/mainnet-eth-metrics/grafana/etc/provisioning/datasources:/etc/grafana/provisioning/datasources
|
||||
- ../config/mainnet-eth-metrics/grafana/etc/dashboards:/etc/grafana/dashboards
|
||||
ports:
|
||||
- "3000"
|
||||
@@ -0,0 +1,71 @@
|
||||
|
||||
services:
|
||||
|
||||
mainnet-eth-geth-1:
|
||||
restart: always
|
||||
hostname: mainnet-eth-geth-1
|
||||
cap_add:
|
||||
- SYS_PTRACE
|
||||
image: cerc/go-ethereum:local
|
||||
entrypoint: /bin/sh
|
||||
command: -c "/opt/run-geth.sh"
|
||||
env_file:
|
||||
- ../config/mainnet-eth/geth.env
|
||||
volumes:
|
||||
- mainnet_eth_geth_1_data:/data
|
||||
- mainnet_eth_config_data:/etc/mainnet-eth
|
||||
- ../config/mainnet-eth/scripts/run-geth.sh:/opt/run-geth.sh
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "8545"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 3s
|
||||
ports:
|
||||
# http api
|
||||
- "8545"
|
||||
# ws api
|
||||
- "8546"
|
||||
# ws el
|
||||
- "8551"
|
||||
# p2p
|
||||
- "30303"
|
||||
- "30303/udp"
|
||||
# debugging
|
||||
- "40000"
|
||||
# metrics
|
||||
- "6060"
|
||||
|
||||
mainnet-eth-lighthouse-1:
|
||||
restart: always
|
||||
hostname: mainnet-eth-lighthouse-1
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--tries=1", "--connect-timeout=1", "--quiet", "-O", "-", "http://localhost:5052/eth/v2/beacon/blocks/head"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
start_period: 30s
|
||||
environment:
|
||||
LIGHTHOUSE_EXECUTION_ENDPOINT: "http://mainnet-eth-geth-1:8551"
|
||||
env_file:
|
||||
- ../config/mainnet-eth/lighthouse.env
|
||||
image: cerc/lighthouse:local
|
||||
entrypoint: /bin/sh
|
||||
command: -c "/opt/run-lighthouse.sh"
|
||||
volumes:
|
||||
- mainnet_eth_lighthouse_1_data:/data
|
||||
- mainnet_eth_config_data:/etc/mainnet-eth
|
||||
- ../config/mainnet-eth/scripts/run-lighthouse.sh:/opt/run-lighthouse.sh
|
||||
ports:
|
||||
# api
|
||||
- "5052"
|
||||
# metrics
|
||||
- "5054"
|
||||
# p2p
|
||||
- "9000"
|
||||
- "9000/udp"
|
||||
|
||||
volumes:
|
||||
mainnet_eth_config_data:
|
||||
mainnet_eth_geth_1_data:
|
||||
mainnet_eth_lighthouse_1_data:
|
||||
@@ -0,0 +1,17 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
go-opera:
|
||||
restart: unless-stopped
|
||||
image: cerc/go-opera:local
|
||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/start-node.sh"]
|
||||
volumes:
|
||||
- ../config/mainnet-go-opera/start-node.sh:/docker-entrypoint-scripts.d/start-node.sh
|
||||
# TODO: ports taken from dockerfile, determine which are needed
|
||||
ports:
|
||||
- "5050:5050" # p2p port, needed
|
||||
- "5050:5050/udp"
|
||||
- "18545:18545" # http rpc port
|
||||
- "18546:18546" # websockets rpc port
|
||||
#- "18547" # unknown
|
||||
#- "19090" # unknown
|
||||
@@ -0,0 +1,34 @@
|
||||
services:
|
||||
laconicd:
|
||||
restart: no
|
||||
image: cerc/laconicd:local
|
||||
command: ["/bin/sh", "-c", "/opt/run-laconicd.sh"]
|
||||
volumes:
|
||||
# The cosmos-sdk node's database directory:
|
||||
- laconicd-data:/root/.laconicd/data
|
||||
- laconicd-config:/root/.laconicd/config
|
||||
- laconicd-keyring:/root/.laconicd/keyring-test
|
||||
# TODO: look at folding these scripts into the container
|
||||
- ../config/mainnet-laconicd/scripts/run-laconicd.sh:/opt/run-laconicd.sh
|
||||
- ../config/mainnet-laconicd/scripts/export-mykey.sh:/docker-entrypoint-scripts.d/export-mykey.sh
|
||||
- ../config/mainnet-laconicd/scripts/export-myaddress.sh:/docker-entrypoint-scripts.d/export-myaddress.sh
|
||||
# TODO: determine which of the ports below is really needed
|
||||
ports:
|
||||
- "6060"
|
||||
- "26657"
|
||||
- "26656"
|
||||
- "9473"
|
||||
- "8545"
|
||||
- "8546"
|
||||
- "9090"
|
||||
- "9091"
|
||||
- "1317"
|
||||
cli:
|
||||
image: cerc/laconic-registry-cli:local
|
||||
volumes:
|
||||
- ../config/mainnet-laconicd/registry-cli-config-template.yml:/registry-cli-config-template.yml
|
||||
|
||||
volumes:
|
||||
laconicd-data:
|
||||
laconicd-config:
|
||||
laconicd-keyring:
|
||||
@@ -0,0 +1,45 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Builds and serves the MobyMask v3 react-app
|
||||
mobymask-v3-app:
|
||||
restart: unless-stopped
|
||||
image: cerc/mobymask-ui:local
|
||||
env_file:
|
||||
- ../config/watcher-mobymask-v3/mobymask-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_CHAIN_ID: ${CERC_CHAIN_ID}
|
||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
||||
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||
CERC_PUBSUB: ${CERC_PUBSUB}
|
||||
CERC_GOSSIPSUB_DIRECT_PEERS: ${CERC_GOSSIPSUB_DIRECT_PEERS}
|
||||
CERC_NA_ADDRESS: ${CERC_NA_ADDRESS}
|
||||
CERC_VPA_ADDRESS: ${CERC_VPA_ADDRESS}
|
||||
CERC_CA_ADDRESS: ${CERC_CA_ADDRESS}
|
||||
CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL}
|
||||
CERC_PAYMENT_NITRO_ADDRESS: ${CERC_PAYMENT_NITRO_ADDRESS:-0xBBB676f9cFF8D242e9eaC39D063848807d3D1D94}
|
||||
CERC_SNAP_URL: ${CERC_SNAP_URL}
|
||||
working_dir: /app
|
||||
command: ["bash", "/scripts/mobymask-app-start.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v3/mobymask-app-start.sh:/scripts/mobymask-app-start.sh
|
||||
- peers_ids:/peers
|
||||
- mobymask_deployment:/server
|
||||
- nitro_deployment:/nitro
|
||||
ports:
|
||||
- "127.0.0.1:3004:80"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "80"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
peers_ids:
|
||||
mobymask_deployment:
|
||||
nitro_deployment:
|
||||
@@ -0,0 +1,76 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Builds and serves the MobyMask react-app
|
||||
mobymask-app:
|
||||
restart: unless-stopped
|
||||
image: cerc/mobymask-ui:local
|
||||
env_file:
|
||||
- ../config/watcher-mobymask-v2/mobymask-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_CHAIN_ID: ${CERC_CHAIN_ID}
|
||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||
CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL}
|
||||
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
||||
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||
CERC_PUBSUB: ${CERC_PUBSUB}
|
||||
CERC_RELEASE: "v0.1.7"
|
||||
CERC_USE_NPM: true
|
||||
CERC_CONFIG_FILE: "src/config.json"
|
||||
working_dir: /scripts
|
||||
command: ["sh", "mobymask-app-start.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh
|
||||
- ../config/watcher-mobymask-v2/mobymask-app-config.json:/app/src/mobymask-app-config.json
|
||||
- peers_ids:/peers
|
||||
- mobymask_deployment:/server
|
||||
ports:
|
||||
- "127.0.0.1:3002:80"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "80"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Builds and serves the LXDAO version of MobyMask react-app
|
||||
lxdao-mobymask-app:
|
||||
restart: unless-stopped
|
||||
image: cerc/mobymask-ui:local
|
||||
env_file:
|
||||
- ../config/watcher-mobymask-v2/mobymask-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_CHAIN_ID: ${CERC_CHAIN_ID}
|
||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||
CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL}
|
||||
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
||||
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||
CERC_PUBSUB: ${CERC_PUBSUB}
|
||||
CERC_RELEASE: "v0.1.7-lxdao-0.1.1"
|
||||
CERC_USE_NPM: false
|
||||
CERC_CONFIG_FILE: "src/utils/config.json"
|
||||
working_dir: /scripts
|
||||
command: ["sh", "mobymask-app-start.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh
|
||||
- ../config/watcher-mobymask-v2/mobymask-app-config.json:/app/src/mobymask-app-config.json
|
||||
- peers_ids:/peers
|
||||
- mobymask_deployment:/server
|
||||
ports:
|
||||
- "127.0.0.1:3004:80"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "80"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
mobymask_deployment:
|
||||
peers_ids:
|
||||
@@ -0,0 +1,14 @@
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
mobymask-snap:
|
||||
restart: unless-stopped
|
||||
image: cerc/mobymask-snap:local
|
||||
ports:
|
||||
- "127.0.0.1:8080:8080"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "8080"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
@@ -0,0 +1,23 @@
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
# Optionally deploys the Nitro contracts
|
||||
nitro-contracts:
|
||||
image: cerc/nitro-contracts:local
|
||||
restart: on-failure
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_ETH_RPC_ENDPOINT: ${CERC_ETH_RPC_ENDPOINT:-http://fixturenet-eth-geth-1:8545}
|
||||
CERC_PRIVATE_KEY_DEPLOYER: ${CERC_PRIVATE_KEY_DEPLOYER:-0x888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218}
|
||||
CERC_NA_ADDRESS: ${CERC_NA_ADDRESS}
|
||||
CERC_VPA_ADDRESS: ${CERC_VPA_ADDRESS}
|
||||
CERC_CA_ADDRESS: ${CERC_CA_ADDRESS}
|
||||
volumes:
|
||||
- ../config/nitro-contracts/deploy.sh:/app/deploy.sh
|
||||
- nitro_deployment:/app/deployment
|
||||
command: ["bash", "-c", "/app/deploy.sh"]
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
nitro_deployment:
|
||||
@@ -0,0 +1,27 @@
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
nitro-reverse-payment-proxy:
|
||||
image: cerc/go-nitro:local
|
||||
hostname: nitro-reverse-payment-proxy
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
# Wait for the go-nitro node to start
|
||||
go-nitro:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
CERC_PROXY_ADDRESS: 0.0.0.0:8081
|
||||
CERC_PROXY_NITRO_ENDPOINT: ${CERC_PROXY_NITRO_ENDPOINT:-go-nitro:4005/api/v1}
|
||||
CERC_PROXY_DESTINATION_URL: ${CERC_PROXY_DESTINATION_URL:-http://ipld-eth-server:8081}
|
||||
CERC_PROXY_COST_PER_BYTE: ${CERC_PROXY_COST_PER_BYTE:-1}
|
||||
entrypoint: ["bash", "-c", "/app/run-reverse-payment-proxy.sh"]
|
||||
volumes:
|
||||
- ../config/go-nitro/run-reverse-payment-proxy.sh:/app/run-reverse-payment-proxy.sh
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "8081"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
ports:
|
||||
- "8081:8081"
|
||||
@@ -0,0 +1,32 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Builds and serves the peer-test react-app
|
||||
peer-test-app:
|
||||
restart: unless-stopped
|
||||
image: cerc/react-peer:local
|
||||
working_dir: /scripts
|
||||
env_file:
|
||||
- ../config/watcher-mobymask-v2/mobymask-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_RELAY_NODES: ${CERC_RELAY_NODES}
|
||||
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||
command: ["sh", "test-app-start.sh"]
|
||||
volumes:
|
||||
- ../config/network/wait-for-it.sh:/scripts/wait-for-it.sh
|
||||
- ../config/watcher-mobymask-v2/test-app-start.sh:/scripts/test-app-start.sh
|
||||
- peers_ids:/peers
|
||||
ports:
|
||||
- "127.0.0.1:3003:80"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "80"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
peers_ids:
|
||||
@@ -0,0 +1,31 @@
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
ponder-app:
|
||||
restart: unless-stopped
|
||||
image: cerc/ponder:local
|
||||
working_dir: /app/examples/token-erc20
|
||||
environment:
|
||||
CERC_PONDER_CHAIN_ID: ${PONDER_CHAIN_ID:-99}
|
||||
CERC_PONDER_RPC_URL_1: ${PONDER_RPC_URL_1:-http://nitro-reverse-payment-proxy:8081}
|
||||
CERC_PONDER_NITRO_PK: ${CERC_PONDER_NITRO_PK:-58368d20ff12f17669c06158c21d885897aa56f9be430edc789614bf9851d53f}
|
||||
CERC_PONDER_NITRO_CHAIN_PK: ${CERC_PONDER_NITRO_CHAIN_PK:-fb1e9af328c283ca3e2486e7c24d13582b7912057d8b9542ff41503c85bc05c0}
|
||||
CERC_PONDER_NITRO_CHAIN_URL: ${CERC_PONDER_NITRO_CHAIN_URL:-http://fixturenet-eth-geth-1:8546}
|
||||
CERC_RELAY_MULTIADDR: ${CERC_RELAY_MULTIADDR}
|
||||
CERC_UPSTREAM_NITRO_ADDRESS: ${CERC_UPSTREAM_NITRO_ADDRESS:-0xAAA6628Ec44A8a742987EF3A114dDFE2D4F7aDCE}
|
||||
CERC_UPSTREAM_NITRO_MULTIADDR: ${CERC_UPSTREAM_NITRO_MULTIADDR:-/dns4/go-nitro/tcp/5005/ws/p2p/16Uiu2HAmSjXJqsyBJgcBUU2HQmykxGseafSatbpq5471XmuaUqyv}
|
||||
CERC_UPSTREAM_NITRO_PAY_AMOUNT: ${CERC_UPSTREAM_NITRO_PAY_AMOUNT:-5000}
|
||||
command: ["bash", "./ponder-start.sh"]
|
||||
volumes:
|
||||
- ../config/ponder/ponder-start.sh:/app/examples/token-erc20/ponder-start.sh
|
||||
- ../config/ponder/ponder.config.ts:/app/examples/token-erc20/ponder.config.ts
|
||||
- peers_ids:/peers
|
||||
- nitro_deployment:/nitro
|
||||
- ponder_nitro_data:/app/examples/token-erc20/.ponder/nitro-db
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
peers_ids:
|
||||
nitro_deployment:
|
||||
ponder_nitro_data:
|
||||
@@ -1,21 +0,0 @@
|
||||
version: "3.2"
|
||||
services:
|
||||
# If you want prometheus to work, you must update the following file in the ops repo locally.
|
||||
# localhost:6060 --> go-ethereum:6060
|
||||
prometheus:
|
||||
restart: always
|
||||
user: "987"
|
||||
image: prom/prometheus
|
||||
volumes:
|
||||
- ${cerc_ops}/metrics/etc:/etc/prometheus
|
||||
- ./prometheus-data:/prometheus
|
||||
ports:
|
||||
- "127.0.0.1:9090:9090"
|
||||
grafana:
|
||||
restart: always
|
||||
user: "472"
|
||||
image: grafana/grafana
|
||||
volumes:
|
||||
- ./grafana-data:/var/lib/grafana
|
||||
ports:
|
||||
- "127.0.0.1:3000:3000"
|
||||
@@ -0,0 +1,35 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
reth:
|
||||
restart: unless-stopped
|
||||
hostname: reth
|
||||
image: cerc/reth:local
|
||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/start-reth.sh"]
|
||||
volumes:
|
||||
- ../config/reth/start-reth.sh:/docker-entrypoint-scripts.d/start-reth.sh
|
||||
- reth_data:/root/.local/share/reth
|
||||
- shared_data:/root/.shared_data
|
||||
ports:
|
||||
- "8545:8545" # http rpc
|
||||
- "8546:8546" # ws rpc
|
||||
- "30303:30303" # network listening port
|
||||
- "30303:30303/udp"
|
||||
- "8551" # consensus auth
|
||||
|
||||
lighthouse:
|
||||
restart: unless-stopped
|
||||
hostname: lighthouse
|
||||
image: cerc/lighthouse:local
|
||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/start-lighthouse.sh"]
|
||||
volumes:
|
||||
- ../config/reth/start-lighthouse.sh:/docker-entrypoint-scripts.d/start-lighthouse.sh
|
||||
- lighthouse_data:/root/.lighthouse/mainnet
|
||||
- shared_data:/root/.shared_data
|
||||
ports:
|
||||
- "8001"
|
||||
|
||||
volumes:
|
||||
reth_data:
|
||||
lighthouse_data:
|
||||
shared_data:
|
||||
@@ -0,0 +1,21 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Deploys the sushiswap v3 subgraph
|
||||
sushiswap-subgraph-v3:
|
||||
image: cerc/sushiswap-subgraphs:local
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
graph-node:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- APP=v3
|
||||
- NETWORK=filecoin
|
||||
command: ["bash", "-c", "./blocks/run-blocks.sh && ./v3/run-v3.sh"]
|
||||
working_dir: /app/subgraphs
|
||||
volumes:
|
||||
- ../config/sushiswap-subgraph-v3/filecoin.js:/app/config/filecoin.js
|
||||
- ../config/sushiswap-subgraph-v3/run-blocks.sh:/app/subgraphs/blocks/run-blocks.sh
|
||||
- ../config/sushiswap-subgraph-v3/run-v3.sh:/app/subgraphs/v3/run-v3.sh
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
@@ -1,5 +1,14 @@
|
||||
version: "3.2"
|
||||
services:
|
||||
test:
|
||||
image: cerc/test-container:local
|
||||
restart: always
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_TEST_PARAM_1: ${CERC_TEST_PARAM_1:-FAILED}
|
||||
volumes:
|
||||
- test-data:/data
|
||||
ports:
|
||||
- "80"
|
||||
|
||||
volumes:
|
||||
test-data:
|
||||
|
||||
@@ -0,0 +1,304 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Starts the PostgreSQL database for watchers
|
||||
watcher-db:
|
||||
restart: unless-stopped
|
||||
image: postgres:14-alpine
|
||||
environment:
|
||||
- POSTGRES_USER=vdbm
|
||||
- POSTGRES_MULTIPLE_DATABASES=azimuth-watcher,azimuth-watcher-job-queue,censures-watcher,censures-watcher-job-queue,claims-watcher,claims-watcher-job-queue,conditional-star-release-watcher,conditional-star-release-watcher-job-queue,delegated-sending-watcher,delegated-sending-watcher-job-queue,ecliptic-watcher,ecliptic-watcher-job-queue,linear-star-release-watcher,linear-star-release-watcher-job-queue,polls-watcher,polls-watcher-job-queue
|
||||
- POSTGRES_EXTENSION=azimuth-watcher-job-queue:pgcrypto,censures-watcher-job-queue:pgcrypto,claims-watcher-job-queue:pgcrypto,conditional-star-release-watcher-job-queue:pgcrypto,delegated-sending-watcher-job-queue:pgcrypto,ecliptic-watcher-job-queue:pgcrypto,linear-star-release-watcher-job-queue:pgcrypto,polls-watcher-job-queue:pgcrypto,
|
||||
- POSTGRES_PASSWORD=password
|
||||
volumes:
|
||||
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
|
||||
- watcher_db_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "0.0.0.0:15432:5432"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
|
||||
# Starts the azimuth-watcher server
|
||||
azimuth-watcher-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-azimuth/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
working_dir: /app/packages/azimuth-watcher
|
||||
command: "./start-server.sh"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/azimuth-watcher/environments/watcher-config-template.toml
|
||||
- ../config/watcher-azimuth/merge-toml.js:/app/packages/azimuth-watcher/merge-toml.js
|
||||
- ../config/watcher-azimuth/start-server.sh:/app/packages/azimuth-watcher/start-server.sh
|
||||
ports:
|
||||
- "3001"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3001"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the censures-watcher server
|
||||
censures-watcher-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-azimuth/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
working_dir: /app/packages/censures-watcher
|
||||
command: "./start-server.sh"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/censures-watcher/environments/watcher-config-template.toml
|
||||
- ../config/watcher-azimuth/merge-toml.js:/app/packages/censures-watcher/merge-toml.js
|
||||
- ../config/watcher-azimuth/start-server.sh:/app/packages/censures-watcher/start-server.sh
|
||||
ports:
|
||||
- "3002"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3002"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the claims-watcher server
|
||||
claims-watcher-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-azimuth/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
working_dir: /app/packages/claims-watcher
|
||||
command: "./start-server.sh"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/claims-watcher/environments/watcher-config-template.toml
|
||||
- ../config/watcher-azimuth/merge-toml.js:/app/packages/claims-watcher/merge-toml.js
|
||||
- ../config/watcher-azimuth/start-server.sh:/app/packages/claims-watcher/start-server.sh
|
||||
ports:
|
||||
- "3003"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3003"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the conditional-star-release-watcher server
|
||||
conditional-star-release-watcher-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-azimuth/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
working_dir: /app/packages/conditional-star-release-watcher
|
||||
command: "./start-server.sh"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/conditional-star-release-watcher/environments/watcher-config-template.toml
|
||||
- ../config/watcher-azimuth/merge-toml.js:/app/packages/conditional-star-release-watcher/merge-toml.js
|
||||
- ../config/watcher-azimuth/start-server.sh:/app/packages/conditional-star-release-watcher/start-server.sh
|
||||
ports:
|
||||
- "3004"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3004"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the delegated-sending-watcher server
|
||||
delegated-sending-watcher-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-azimuth/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
working_dir: /app/packages/delegated-sending-watcher
|
||||
command: "./start-server.sh"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/delegated-sending-watcher/environments/watcher-config-template.toml
|
||||
- ../config/watcher-azimuth/merge-toml.js:/app/packages/delegated-sending-watcher/merge-toml.js
|
||||
- ../config/watcher-azimuth/start-server.sh:/app/packages/delegated-sending-watcher/start-server.sh
|
||||
ports:
|
||||
- "3005"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3005"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the ecliptic-watcher server
|
||||
ecliptic-watcher-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-azimuth/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
working_dir: /app/packages/ecliptic-watcher
|
||||
command: "./start-server.sh"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/ecliptic-watcher/environments/watcher-config-template.toml
|
||||
- ../config/watcher-azimuth/merge-toml.js:/app/packages/ecliptic-watcher/merge-toml.js
|
||||
- ../config/watcher-azimuth/start-server.sh:/app/packages/ecliptic-watcher/start-server.sh
|
||||
ports:
|
||||
- "3006"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3006"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the linear-star-release-watcher server
|
||||
linear-star-release-watcher-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-azimuth/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
working_dir: /app/packages/linear-star-release-watcher
|
||||
command: "./start-server.sh"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/linear-star-release-watcher/environments/watcher-config-template.toml
|
||||
- ../config/watcher-azimuth/merge-toml.js:/app/packages/linear-star-release-watcher/merge-toml.js
|
||||
- ../config/watcher-azimuth/start-server.sh:/app/packages/linear-star-release-watcher/start-server.sh
|
||||
ports:
|
||||
- "3007"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3007"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the polls-watcher server
|
||||
polls-watcher-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-azimuth/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
working_dir: /app/packages/polls-watcher
|
||||
command: "./start-server.sh"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/watcher-config-template.toml:/app/packages/polls-watcher/environments/watcher-config-template.toml
|
||||
- ../config/watcher-azimuth/merge-toml.js:/app/packages/polls-watcher/merge-toml.js
|
||||
- ../config/watcher-azimuth/start-server.sh:/app/packages/polls-watcher/start-server.sh
|
||||
ports:
|
||||
- "3008"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3008"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the gateway-server for proxying queries
|
||||
gateway-server:
|
||||
image: cerc/watcher-azimuth:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
azimuth-watcher-server:
|
||||
condition: service_healthy
|
||||
censures-watcher-server:
|
||||
condition: service_healthy
|
||||
claims-watcher-server:
|
||||
condition: service_healthy
|
||||
conditional-star-release-watcher-server:
|
||||
condition: service_healthy
|
||||
delegated-sending-watcher-server:
|
||||
condition: service_healthy
|
||||
ecliptic-watcher-server:
|
||||
condition: service_healthy
|
||||
linear-star-release-watcher-server:
|
||||
condition: service_healthy
|
||||
polls-watcher-server:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
working_dir: /app/packages/gateway-server
|
||||
command: "yarn server"
|
||||
volumes:
|
||||
- ../config/watcher-azimuth/gateway-watchers.json:/app/packages/gateway-server/dist/watchers.json
|
||||
ports:
|
||||
- "0.0.0.0:4000:4000"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-vz", "localhost", "4000"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
watcher_db_data:
|
||||
@@ -39,7 +39,7 @@ services:
|
||||
- "0.0.0.0:3002:3001"
|
||||
- "0.0.0.0:9002:9001"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "3002"]
|
||||
test: ["CMD", "nc", "-vz", "localhost", "3001"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Starts the PostgreSQL database for watcher
|
||||
gelato-watcher-db:
|
||||
restart: unless-stopped
|
||||
image: postgres:14-alpine
|
||||
environment:
|
||||
- POSTGRES_USER=vdbm
|
||||
- POSTGRES_MULTIPLE_DATABASES=gelato-watcher,gelato-watcher-job-queue
|
||||
- POSTGRES_EXTENSION=gelato-watcher-job-queue:pgcrypto
|
||||
- POSTGRES_PASSWORD=password
|
||||
volumes:
|
||||
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
|
||||
- gelato_watcher_db_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "0.0.0.0:15432:5432"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
|
||||
# Starts the gelato-watcher job runner
|
||||
gelato-watcher-job-runner:
|
||||
image: cerc/watcher-gelato:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
gelato-watcher-db:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-gelato/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
command: ["./start-job-runner.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-gelato/watcher-config-template.toml:/app/environments/watcher-config-template.toml
|
||||
- ../config/watcher-gelato/start-job-runner.sh:/app/start-job-runner.sh
|
||||
ports:
|
||||
- "0.0.0.0:9000:9000"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "9000"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Starts the gelato-watcher server
|
||||
gelato-watcher-server:
|
||||
image: cerc/watcher-gelato:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
gelato-watcher-db:
|
||||
condition: service_healthy
|
||||
gelato-watcher-job-runner:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- ../config/watcher-gelato/watcher-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_IPLD_ETH_RPC: ${CERC_IPLD_ETH_RPC}
|
||||
CERC_IPLD_ETH_GQL: ${CERC_IPLD_ETH_GQL}
|
||||
CERC_USE_STATE_SNAPSHOT: ${CERC_USE_STATE_SNAPSHOT}
|
||||
CERC_SNAPSHOT_GQL_ENDPOINT: ${CERC_SNAPSHOT_GQL_ENDPOINT}
|
||||
CERC_SNAPSHOT_BLOCKHASH: ${CERC_SNAPSHOT_BLOCKHASH}
|
||||
command: ["./start-server.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-gelato/watcher-config-template.toml:/app/environments/watcher-config-template.toml
|
||||
- ../config/watcher-gelato/start-server.sh:/app/start-server.sh
|
||||
- ../config/watcher-gelato/create-and-import-checkpoint.sh:/app/create-and-import-checkpoint.sh
|
||||
- gelato_watcher_state_gql:/app/state_checkpoint
|
||||
ports:
|
||||
- "0.0.0.0:3008:3008"
|
||||
- "0.0.0.0:9001:9001"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "3008"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
gelato_watcher_db_data:
|
||||
gelato_watcher_state_gql:
|
||||
@@ -0,0 +1,136 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Starts the PostgreSQL database for watcher
|
||||
mobymask-watcher-db:
|
||||
restart: unless-stopped
|
||||
image: postgres:14-alpine
|
||||
environment:
|
||||
- POSTGRES_USER=vdbm
|
||||
- POSTGRES_MULTIPLE_DATABASES=mobymask-watcher,mobymask-watcher-job-queue
|
||||
- POSTGRES_EXTENSION=mobymask-watcher-job-queue:pgcrypto
|
||||
- POSTGRES_PASSWORD=password
|
||||
volumes:
|
||||
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
|
||||
- mobymask_watcher_db_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "127.0.0.1:15432:5432"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
|
||||
# Deploys the MobyMask contract and generates an invite link
|
||||
# Deployment is skipped if CERC_DEPLOYED_CONTRACT env is set
|
||||
mobymask:
|
||||
image: cerc/mobymask:local
|
||||
working_dir: /app/packages/server
|
||||
env_file:
|
||||
- ../config/watcher-mobymask-v2/optimism-params.env
|
||||
- ../config/watcher-mobymask-v2/mobymask-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
ENV: "PROD"
|
||||
CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC}
|
||||
CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL}
|
||||
CERC_PRIVATE_KEY_DEPLOYER: ${CERC_PRIVATE_KEY_DEPLOYER}
|
||||
CERC_MOBYMASK_APP_BASE_URI: ${CERC_MOBYMASK_APP_BASE_URI}
|
||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||
CERC_L2_GETH_HOST: ${CERC_L2_GETH_HOST}
|
||||
CERC_L2_GETH_PORT: ${CERC_L2_GETH_PORT}
|
||||
CERC_L2_NODE_HOST: ${CERC_L2_NODE_HOST}
|
||||
CERC_L2_NODE_PORT: ${CERC_L2_NODE_PORT}
|
||||
command: ["sh", "deploy-and-generate-invite.sh"]
|
||||
volumes:
|
||||
- ../config/network/wait-for-it.sh:/app/packages/server/wait-for-it.sh
|
||||
- ../config/watcher-mobymask-v2/secrets-template.json:/app/packages/server/secrets-template.json
|
||||
- ../config/watcher-mobymask-v2/deploy-and-generate-invite.sh:/app/packages/server/deploy-and-generate-invite.sh
|
||||
- mobymask_deployment:/app/packages/server
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Creates peer-id files if they don't exist
|
||||
peer-ids-gen:
|
||||
image: cerc/watcher-ts:local
|
||||
restart: on-failure
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
working_dir: /app/packages/peer
|
||||
command: ["sh", "generate-peer-ids.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v2/generate-peer-ids.sh:/app/packages/peer/generate-peer-ids.sh
|
||||
- peers_ids:/peer-ids
|
||||
|
||||
# Starts the mobymask-v2-watcher server
|
||||
mobymask-watcher-server:
|
||||
image: cerc/watcher-mobymask-v2:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mobymask-watcher-db:
|
||||
condition: service_healthy
|
||||
peer-ids-gen:
|
||||
condition: service_completed_successfully
|
||||
mobymask:
|
||||
condition: service_completed_successfully
|
||||
env_file:
|
||||
- ../config/watcher-mobymask-v2/optimism-params.env
|
||||
- ../config/watcher-mobymask-v2/mobymask-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC}
|
||||
CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL}
|
||||
CERC_PRIVATE_KEY_PEER: ${CERC_PRIVATE_KEY_PEER}
|
||||
CERC_RELAY_PEERS: ${CERC_RELAY_PEERS}
|
||||
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||
CERC_PUBSUB: ${CERC_PUBSUB}
|
||||
CERC_RELAY_ANNOUNCE_DOMAIN: ${CERC_RELAY_ANNOUNCE_DOMAIN}
|
||||
CERC_ENABLE_PEER_L2_TXS: ${CERC_ENABLE_PEER_L2_TXS}
|
||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||
command: ["sh", "start-server.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v2/watcher-config-template.toml:/app/environments/watcher-config-template.toml
|
||||
- ../config/watcher-mobymask-v2/start-server.sh:/app/start-server.sh
|
||||
- peers_ids:/app/peers
|
||||
- mobymask_deployment:/server
|
||||
# Expose GQL, metrics and relay node ports
|
||||
ports:
|
||||
- "127.0.0.1:3001:3001"
|
||||
- "127.0.0.1:9001:9001"
|
||||
- "127.0.0.1:9090:9090"
|
||||
healthcheck:
|
||||
test: ["CMD", "busybox", "nc", "localhost", "9090"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Container to run peer tests
|
||||
peer-tests:
|
||||
image: cerc/watcher-ts:local
|
||||
restart: on-failure
|
||||
depends_on:
|
||||
mobymask-watcher-server:
|
||||
condition: service_healthy
|
||||
peer-ids-gen:
|
||||
condition: service_completed_successfully
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
working_dir: /app/packages/peer
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
./set-tests-env.sh && \
|
||||
tail -f /dev/null
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v2/set-tests-env.sh:/app/packages/peer/set-tests-env.sh
|
||||
- peers_ids:/peer-ids
|
||||
|
||||
volumes:
|
||||
mobymask_watcher_db_data:
|
||||
peers_ids:
|
||||
mobymask_deployment:
|
||||
@@ -0,0 +1,123 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
# Starts the PostgreSQL database for watcher
|
||||
mobymask-watcher-db:
|
||||
restart: unless-stopped
|
||||
image: postgres:14-alpine
|
||||
environment:
|
||||
- POSTGRES_USER=vdbm
|
||||
- POSTGRES_MULTIPLE_DATABASES=mobymask-watcher,mobymask-watcher-job-queue
|
||||
- POSTGRES_EXTENSION=mobymask-watcher-job-queue:pgcrypto
|
||||
- POSTGRES_PASSWORD=password
|
||||
volumes:
|
||||
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
|
||||
- mobymask_watcher_db_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "127.0.0.1:15432:5432"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
|
||||
# Deploys the MobyMask contract and generates an invite link
|
||||
# Deployment is skipped if CERC_DEPLOYED_CONTRACT env is set
|
||||
mobymask:
|
||||
image: cerc/mobymask:local
|
||||
working_dir: /app/packages/server
|
||||
env_file:
|
||||
- ../config/watcher-mobymask-v3/mobymask-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
ENV: "PROD"
|
||||
CERC_ETH_RPC_ENDPOINT: ${CERC_ETH_RPC_ENDPOINT}
|
||||
CERC_PRIVATE_KEY_DEPLOYER: ${CERC_PRIVATE_KEY_DEPLOYER:-0x888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218}
|
||||
CERC_MOBYMASK_APP_BASE_URI: ${CERC_MOBYMASK_APP_BASE_URI}
|
||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||
command: ["bash", "-c", "./deploy-and-generate-invite.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v3/deploy-and-generate-invite.sh:/app/packages/server/deploy-and-generate-invite.sh
|
||||
- mobymask_deployment:/app/packages/server
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
# Creates peer-id files if they don't exist
|
||||
peer-ids-gen:
|
||||
image: cerc/watcher-ts:local
|
||||
restart: on-failure
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
working_dir: /app/packages/peer
|
||||
command: ["sh", "generate-peer-ids.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v2/generate-peer-ids.sh:/app/packages/peer/generate-peer-ids.sh
|
||||
- peers_ids:/peer-ids
|
||||
|
||||
# Starts the MobyMask v3 watcher server
|
||||
mobymask-watcher-server:
|
||||
image: cerc/watcher-mobymask-v3:local
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mobymask-watcher-db:
|
||||
condition: service_healthy
|
||||
peer-ids-gen:
|
||||
condition: service_completed_successfully
|
||||
mobymask:
|
||||
condition: service_completed_successfully
|
||||
nitro-contracts:
|
||||
condition: service_completed_successfully
|
||||
env_file:
|
||||
- ../config/watcher-mobymask-v3/mobymask-params.env
|
||||
environment:
|
||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
||||
CERC_ETH_RPC_QUERY_ENDPOINT: ${CERC_ETH_RPC_QUERY_ENDPOINT}
|
||||
CERC_ETH_RPC_MUTATION_ENDPOINT: ${CERC_ETH_RPC_MUTATION_ENDPOINT}
|
||||
CERC_NITRO_CHAIN_URL: ${CERC_NITRO_CHAIN_URL}
|
||||
CERC_RELAY_PEERS: ${CERC_RELAY_PEERS}
|
||||
CERC_DENY_MULTIADDRS: ${CERC_DENY_MULTIADDRS}
|
||||
CERC_PUBSUB: ${CERC_PUBSUB}
|
||||
CERC_RELAY_ANNOUNCE_DOMAIN: ${CERC_RELAY_ANNOUNCE_DOMAIN}
|
||||
CERC_ENABLE_PEER_L2_TXS: ${CERC_ENABLE_PEER_L2_TXS}
|
||||
CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT}
|
||||
CERC_NA_ADDRESS: ${CERC_NA_ADDRESS}
|
||||
CERC_VPA_ADDRESS: ${CERC_VPA_ADDRESS}
|
||||
CERC_CA_ADDRESS: ${CERC_CA_ADDRESS}
|
||||
CERC_PRIVATE_KEY_PEER: ${CERC_PRIVATE_KEY_PEER:-111b7500bdce494d6f4bcfe8c2a0dde2ef92f751d9070fac6475dbd6d8021b3f}
|
||||
CERC_WATCHER_NITRO_PK: ${CERC_WATCHER_NITRO_PK:-0279651921cd800ac560c21ceea27aab0107b67daf436cdd25ce84cad30159b4}
|
||||
CERC_PEER_ID: ${CERC_PEER_ID}
|
||||
CERC_ENABLE_UPSTREAM_PAYMENTS: ${CERC_ENABLE_UPSTREAM_PAYMENTS}
|
||||
CERC_UPSTREAM_NITRO_ADDRESS: ${CERC_UPSTREAM_NITRO_ADDRESS:-0xAAA6628Ec44A8a742987EF3A114dDFE2D4F7aDCE}
|
||||
CERC_UPSTREAM_NITRO_MULTIADDR: ${CERC_UPSTREAM_NITRO_MULTIADDR:-/dns4/go-nitro/tcp/5005/ws/p2p/16Uiu2HAmSjXJqsyBJgcBUU2HQmykxGseafSatbpq5471XmuaUqyv}
|
||||
CERC_UPSTREAM_NITRO_PAY_AMOUNT: ${CERC_UPSTREAM_NITRO_PAY_AMOUNT:-5000}
|
||||
command: ["bash", "./start-server.sh"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask-v3/watcher-config-template.toml:/app/environments/watcher-config-template.toml
|
||||
- ../config/watcher-mobymask-v3/watcher-config-rates.toml:/app/environments/rates.toml
|
||||
- ../config/watcher-mobymask-v3/keys:/app/keys
|
||||
- ../config/watcher-mobymask-v3/start-server.sh:/app/start-server.sh
|
||||
- watcher_nitro_data:/app/out/nitro-db
|
||||
- peers_ids:/app/peers
|
||||
- nitro_deployment:/nitro
|
||||
- mobymask_deployment:/server
|
||||
# Expose GQL, metrics and relay node ports
|
||||
ports:
|
||||
- "127.0.0.1:3001:3001"
|
||||
- "127.0.0.1:9001:9001"
|
||||
- "127.0.0.1:9090:9090"
|
||||
healthcheck:
|
||||
test: ["CMD", "busybox", "nc", "localhost", "9090"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
mobymask_watcher_db_data:
|
||||
peers_ids:
|
||||
mobymask_deployment:
|
||||
nitro_deployment:
|
||||
watcher_nitro_data:
|
||||
@@ -24,15 +24,37 @@ services:
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
|
||||
mobymask-watcher-server:
|
||||
mobymask-watcher-job-runner:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mobymask-watcher-db:
|
||||
condition: service_healthy
|
||||
image: cerc/watcher-mobymask:local
|
||||
command: ["sh", "-c", "yarn job-runner"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask/mobymask-watcher.toml:/app/environments/local.toml
|
||||
ports:
|
||||
- "0.0.0.0:9000:9000"
|
||||
extra_hosts:
|
||||
- "ipld-eth-server:host-gateway"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "9000"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
|
||||
mobymask-watcher-server:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mobymask-watcher-db:
|
||||
condition: service_healthy
|
||||
mobymask-watcher-job-runner:
|
||||
condition: service_healthy
|
||||
image: cerc/watcher-mobymask:local
|
||||
command: ["sh", "-c", "yarn server"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask/mobymask-watcher.toml:/app/packages/mobymask-watcher/environments/local.toml
|
||||
- ../config/watcher-mobymask/mobymask-watcher.toml:/app/environments/local.toml
|
||||
ports:
|
||||
- "0.0.0.0:3001:3001"
|
||||
- "0.0.0.0:9001:9001"
|
||||
@@ -45,21 +67,5 @@ services:
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
|
||||
mobymask-watcher-job-runner:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mobymask-watcher-server:
|
||||
condition: service_healthy
|
||||
mobymask-watcher-db:
|
||||
condition: service_healthy
|
||||
image: cerc/watcher-mobymask:local
|
||||
command: ["sh", "-c", "yarn job-runner"]
|
||||
volumes:
|
||||
- ../config/watcher-mobymask/mobymask-watcher.toml:/app/packages/mobymask-watcher/environments/local.toml
|
||||
ports:
|
||||
- "0.0.0.0:9000:9000"
|
||||
extra_hosts:
|
||||
- "ipld-eth-server:host-gateway"
|
||||
|
||||
volumes:
|
||||
mobymask_watcher_db_data:
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
version: '3.2'
|
||||
|
||||
services:
|
||||
sushiswap-watcher-db:
|
||||
restart: unless-stopped
|
||||
image: postgres:14-alpine
|
||||
environment:
|
||||
- POSTGRES_USER=vdbm
|
||||
- POSTGRES_MULTIPLE_DATABASES=erc20-watcher,sushi-watcher,sushi-info-watcher,erc20-watcher-job-queue,sushi-watcher-job-queue,sushi-info-watcher-job-queue
|
||||
- POSTGRES_EXTENSION=erc20-watcher-job-queue:pgcrypto,sushi-watcher-job-queue:pgcrypto,sushi-info-watcher-job-queue:pgcrypto
|
||||
- POSTGRES_PASSWORD=password
|
||||
command: ["postgres", "-c", "shared_preload_libraries=pg_stat_statements", "-c", "pg_stat_statements.track=all", "-c", "work_mem=2GB"]
|
||||
volumes:
|
||||
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
|
||||
- ../config/postgresql/create-pg-stat-statements.sql:/docker-entrypoint-initdb.d/create-pg-stat-statements.sql
|
||||
- sushiswap_watcher_db_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "0.0.0.0:15435:5432"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 10s
|
||||
shm_size: '8GB'
|
||||
|
||||
erc20-watcher-server:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
sushiswap-watcher-db:
|
||||
condition: service_healthy
|
||||
image: cerc/watcher-sushiswap:local
|
||||
working_dir: /app/packages/erc20-watcher
|
||||
environment:
|
||||
- DEBUG=vulcanize:*
|
||||
command: ["node", "--enable-source-maps", "dist/server.js"]
|
||||
volumes:
|
||||
- ../config/watcher-sushiswap/erc20-watcher.toml:/app/packages/erc20-watcher/environments/local.toml
|
||||
ports:
|
||||
- "0.0.0.0:3005:3001"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "3001"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
sushi-watcher-job-runner:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
sushiswap-watcher-db:
|
||||
condition: service_healthy
|
||||
lotus-node-1:
|
||||
condition: service_healthy
|
||||
image: cerc/watcher-sushiswap:local
|
||||
working_dir: /app/packages/uni-watcher
|
||||
environment:
|
||||
- DEBUG=vulcanize:*
|
||||
command: ["node", "--enable-source-maps", "dist/job-runner.js"]
|
||||
volumes:
|
||||
- ../config/watcher-sushiswap/sushi-watcher.toml:/app/packages/uni-watcher/environments/local.toml
|
||||
- ../config/watcher-sushiswap/sushi-watcher-test.toml:/app/packages/uni-watcher/environments/test.toml
|
||||
ports:
|
||||
- "0.0.0.0:9004:9000"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "9000"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
sushi-watcher-server:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
sushiswap-watcher-db:
|
||||
condition: service_healthy
|
||||
sushi-watcher-job-runner:
|
||||
condition: service_healthy
|
||||
image: cerc/watcher-sushiswap:local
|
||||
env_file:
|
||||
- ../config/watcher-sushiswap/lotus-params.env
|
||||
environment:
|
||||
- DEBUG=vulcanize:*
|
||||
working_dir: /app/packages/uni-watcher
|
||||
command: ["node", "--enable-source-maps", "dist/server.js"]
|
||||
volumes:
|
||||
- ../config/watcher-sushiswap/sushi-watcher.toml:/app/packages/uni-watcher/environments/local.toml
|
||||
- ../config/watcher-sushiswap/sushi-watcher-test.toml:/app/packages/uni-watcher/environments/test.toml
|
||||
ports:
|
||||
- "0.0.0.0:3003:3003"
|
||||
- "0.0.0.0:9005:9001"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "3003"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
sushi-info-watcher-job-runner:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
sushiswap-watcher-db:
|
||||
condition: service_healthy
|
||||
erc20-watcher-server:
|
||||
condition: service_healthy
|
||||
lotus-node-1:
|
||||
condition: service_healthy
|
||||
sushi-watcher-server:
|
||||
condition: service_healthy
|
||||
image: cerc/watcher-sushiswap:local
|
||||
working_dir: /app/packages/uni-info-watcher
|
||||
environment:
|
||||
- DEBUG=vulcanize:*
|
||||
command: ["node", "--enable-source-maps", "dist/job-runner.js"]
|
||||
volumes:
|
||||
- ../config/watcher-sushiswap/sushi-info-watcher.toml:/app/packages/uni-info-watcher/environments/local.toml
|
||||
- ../config/watcher-sushiswap/sushi-info-watcher-test.toml:/app/packages/uni-info-watcher/environments/test.toml
|
||||
ports:
|
||||
- "0.0.0.0:9006:9002"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "9002"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
sushi-info-watcher-server:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
sushiswap-watcher-db:
|
||||
condition: service_healthy
|
||||
erc20-watcher-server:
|
||||
condition: service_healthy
|
||||
sushi-watcher-server:
|
||||
condition: service_healthy
|
||||
sushi-info-watcher-job-runner:
|
||||
condition: service_healthy
|
||||
image: cerc/watcher-sushiswap:local
|
||||
env_file:
|
||||
- ../config/watcher-sushiswap/lotus-params.env
|
||||
working_dir: /app/packages/uni-info-watcher
|
||||
command: ["node", "--enable-source-maps", "dist/server.js"]
|
||||
volumes:
|
||||
- ../config/watcher-sushiswap/sushi-info-watcher.toml:/app/packages/uni-info-watcher/environments/local.toml
|
||||
- ../config/watcher-sushiswap/sushi-info-watcher-test.toml:/app/packages/uni-info-watcher/environments/test.toml
|
||||
ports:
|
||||
- "0.0.0.0:3004:3004"
|
||||
- "0.0.0.0:9007:9003"
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-v", "localhost", "3004"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 15
|
||||
start_period: 5s
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
sushiswap-v3-info:
|
||||
depends_on:
|
||||
sushi-info-watcher-server:
|
||||
condition: service_healthy
|
||||
image: cerc/uniswap-v3-info:local
|
||||
ports:
|
||||
- "0.0.0.0:3006:3000"
|
||||
|
||||
# Deploys the core (UniswapV3Factory) contract
|
||||
sushiswap-v3-core:
|
||||
image: cerc/sushiswap-v3-core:local
|
||||
env_file:
|
||||
- ../config/watcher-sushiswap/lotus-params.env
|
||||
|
||||
# Deploys the periphery (NFPM, token, etc.) contracts
|
||||
sushiswap-v3-periphery:
|
||||
image: cerc/sushiswap-v3-periphery:local
|
||||
env_file:
|
||||
- ../config/watcher-sushiswap/lotus-params.env
|
||||
|
||||
volumes:
|
||||
sushiswap_watcher_db_data:
|
||||
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Chain config
|
||||
export ETH_RPC_ENDPOINT="${CERC_ETH_RPC_ENDPOINT:-${CERC_DEFAULT_ETH_RPC_ENDPOINT}}"
|
||||
export CHAIN_ID="${CERC_CHAIN_ID:-${CERC_DEFAULT_CHAIN_ID}}"
|
||||
export ACCOUNT_PRIVATE_KEY="${CERC_ACCOUNT_PRIVATE_KEY:-${CERC_DEFAULT_ACCOUNT_PRIVATE_KEY}}"
|
||||
|
||||
# Option
|
||||
DEPLOY="${CERC_DEPLOY:-${CERC_DEFAULT_DEPLOY}}"
|
||||
|
||||
# Create a .env file
|
||||
echo "ETH_RPC_ENDPOINT=$ETH_RPC_ENDPOINT" > .env
|
||||
echo "CHAIN_ID=$CHAIN_ID" >> .env
|
||||
echo "ACCOUNT_PRIVATE_KEY=$ACCOUNT_PRIVATE_KEY" >> .env
|
||||
|
||||
echo "Using RPC endpoint ${ETH_RPC_ENDPOINT}"
|
||||
|
||||
# Wait for the RPC endpoint to be up
|
||||
endpoint=${ETH_RPC_ENDPOINT#http://}
|
||||
endpoint=${endpoint#https://}
|
||||
RPC_HOST=$(echo "$endpoint" | awk -F'[:/]' '{print $1}')
|
||||
RPC_PORT=$(echo "$endpoint" | awk -F'[:/]' '{print $2}')
|
||||
./wait-for-it.sh -h "${RPC_HOST}" -p "${RPC_PORT}" -s -t 0
|
||||
|
||||
if [ "$DEPLOY" = true ] && [ ! -e "/app/deployments/docker/UniswapV3Factory.json" ]; then
|
||||
echo "Performing core contract deployments..."
|
||||
pnpm hardhat --network docker deploy --tags UniswapV3Factory
|
||||
else
|
||||
echo "Skipping contract deployments"
|
||||
fi
|
||||
|
||||
echo "Done"
|
||||
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Chain config
|
||||
ETH_RPC_ENDPOINT="${CERC_ETH_RPC_ENDPOINT:-${CERC_DEFAULT_ETH_RPC_ENDPOINT}}"
|
||||
CHAIN_ID="${CERC_CHAIN_ID:-${CERC_DEFAULT_CHAIN_ID}}"
|
||||
ACCOUNT_PRIVATE_KEY="${CERC_ACCOUNT_PRIVATE_KEY:-${CERC_DEFAULT_ACCOUNT_PRIVATE_KEY}}"
|
||||
|
||||
# Option
|
||||
DEPLOY="${CERC_DEPLOY:-${CERC_DEFAULT_DEPLOY}}"
|
||||
|
||||
# Create a .env file
|
||||
echo "ETH_RPC_ENDPOINT=$ETH_RPC_ENDPOINT" > .env
|
||||
echo "CHAIN_ID=$CHAIN_ID" >> .env
|
||||
echo "ACCOUNT_PRIVATE_KEY=$ACCOUNT_PRIVATE_KEY" >> .env
|
||||
|
||||
echo "Using RPC endpoint $ETH_RPC_ENDPOINT"
|
||||
|
||||
# Wait for the RPC endpoint to be up
|
||||
endpoint=${ETH_RPC_ENDPOINT#http://}
|
||||
endpoint=${endpoint#https://}
|
||||
RPC_HOST=$(echo "$endpoint" | awk -F'[:/]' '{print $1}')
|
||||
RPC_PORT=$(echo "$endpoint" | awk -F'[:/]' '{print $2}')
|
||||
./wait-for-it.sh -h "${RPC_HOST}" -p "${RPC_PORT}" -s -t 0
|
||||
|
||||
if [ "$DEPLOY" = true ] && [ ! -e "/app/deployments/docker/NonfungiblePositionManager.json" ]; then
|
||||
# Loop until the factory deployment is detected
|
||||
echo "Waiting for core deployments to occur"
|
||||
while [ ! -f /app/core-deployments/docker/UniswapV3Factory.json ]; do
|
||||
sleep 5
|
||||
done
|
||||
|
||||
echo "Reading factory address from core deployments"
|
||||
FACTORY_ADDRESS=$(jq -r '.address' /app/core-deployments/docker/UniswapV3Factory.json)
|
||||
|
||||
echo "Using UniswapV3Factory at $FACTORY_ADDRESS"
|
||||
echo "FACTORY_ADDRESS=$FACTORY_ADDRESS" >> .env
|
||||
|
||||
echo "Performing periphery contract deployments..."
|
||||
yarn hardhat --network docker deploy --tags NonfungiblePositionManager
|
||||
else
|
||||
echo "Skipping contract deployments"
|
||||
fi
|
||||
|
||||
echo "Done"
|
||||
@@ -0,0 +1,11 @@
|
||||
# Chain config
|
||||
|
||||
CERC_DEFAULT_ETH_RPC_ENDPOINT="http://lotus-node-1:1234/rpc/v1"
|
||||
CERC_DEFAULT_CHAIN_ID=31415926
|
||||
|
||||
# From app/data/config/fixturenet-lotus/fund-account.sh
|
||||
CERC_DEFAULT_ACCOUNT_PRIVATE_KEY="0xc05fd3613bcd62a4f25e5eba1f464d0b76d74c3f771a7c2f13e26ad6439444b3"
|
||||
|
||||
# Options
|
||||
|
||||
CERC_DEFAULT_DEPLOY=true
|
||||
+1414
File diff suppressed because it is too large
Load Diff
+9
@@ -0,0 +1,9 @@
|
||||
apiVersion: 1
|
||||
|
||||
providers:
|
||||
- name: dashboards
|
||||
type: file
|
||||
updateIntervalSeconds: 10
|
||||
options:
|
||||
path: /etc/grafana/dashboards
|
||||
foldersFromFilesStructure: true
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- id: 1
|
||||
uid: jZUuGao4k
|
||||
orgId: 1
|
||||
name: Prometheus
|
||||
type: prometheus
|
||||
typeName: Prometheus
|
||||
typeLogoUrl: public/app/plugins/datasource/prometheus/img/prometheus_logo.svg
|
||||
access: proxy
|
||||
url: http://prometheus:9090
|
||||
user: ""
|
||||
database: ""
|
||||
basicAuth: false
|
||||
isDefault: true
|
||||
jsonData:
|
||||
httpMethod: POST
|
||||
readOnly: false
|
||||
@@ -0,0 +1,34 @@
|
||||
global:
|
||||
scrape_interval: 5s
|
||||
evaluation_interval: 15s
|
||||
|
||||
scrape_configs:
|
||||
# ipld-eth-server
|
||||
- job_name: 'ipld-eth-server'
|
||||
metrics_path: /metrics
|
||||
scrape_interval: 5s
|
||||
static_configs:
|
||||
- targets: ['ipld-eth-server:8090']
|
||||
|
||||
# geth
|
||||
- job_name: 'geth'
|
||||
metrics_path: /debug/metrics/prometheus
|
||||
scheme: http
|
||||
static_configs:
|
||||
- targets: ['fixturenet-eth-geth-1:6060']
|
||||
|
||||
# nginx
|
||||
- job_name: 'nginx'
|
||||
scrape_interval: 5s
|
||||
metrics_path: /metrics
|
||||
scheme: http
|
||||
static_configs:
|
||||
- targets: ['keycloak-nginx-prometheus-exporter:9113']
|
||||
|
||||
# keycloak
|
||||
- job_name: 'keycloak'
|
||||
scrape_interval: 5s
|
||||
metrics_path: /auth/realms/cerc/metrics
|
||||
scheme: http
|
||||
static_configs:
|
||||
- targets: ['keycloak:8080']
|
||||
@@ -17,5 +17,9 @@ CERC_STATEDIFF_DB_PORT=5432
|
||||
CERC_STATEDIFF_DB_NAME="cerc_testing"
|
||||
CERC_STATEDIFF_DB_USER="vdbm"
|
||||
CERC_STATEDIFF_DB_PASSWORD="password"
|
||||
CERC_STATEDIFF_DB_GOOSE_MIN_VER=23
|
||||
CERC_STATEDIFF_DB_LOG_STATEMENTS="false"
|
||||
CERC_STATEDIFF_DB_GOOSE_MIN_VER=${CERC_STATEDIFF_DB_GOOSE_MIN_VER:-18}
|
||||
CERC_STATEDIFF_DB_LOG_STATEMENTS="${CERC_STATEDIFF_DB_LOG_STATEMENTS:-false}"
|
||||
CERC_STATEDIFF_WORKERS=2
|
||||
|
||||
CERC_GETH_VMODULE="statediff/*=5,rpc/*=5"
|
||||
CERC_GETH_VERBOSITY=${CERC_GETH_VERBOSITY:-3}
|
||||
@@ -1,8 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Originally from: https://github.com/cerc-io/laconicd/blob/main/init.sh
|
||||
# TODO: fold this back into the laconicd repo
|
||||
#!/bin/bash
|
||||
|
||||
# TODO: this file is now an unmodified copy of cerc-io/laconicd/init.sh
|
||||
# so we should have a mechanism to bundle it inside the container rather than link from here
|
||||
# at deploy time.
|
||||
|
||||
KEY="mykey"
|
||||
CHAINID="laconic_9000-1"
|
||||
@@ -10,7 +10,7 @@ MONIKER="localtestnet"
|
||||
KEYRING="test"
|
||||
KEYALGO="eth_secp256k1"
|
||||
LOGLEVEL="info"
|
||||
# to trace evm
|
||||
# trace evm
|
||||
TRACE="--trace"
|
||||
# TRACE=""
|
||||
|
||||
@@ -28,7 +28,7 @@ laconicd config chain-id $CHAINID
|
||||
# if $KEY exists it should be deleted
|
||||
laconicd keys add $KEY --keyring-backend $KEYRING --algo $KEYALGO
|
||||
|
||||
# Set moniker and chain-id for laconic (Moniker can be anything, chain-id must be an integer)
|
||||
# Set moniker and chain-id for Ethermint (Moniker can be anything, chain-id must be an integer)
|
||||
laconicd init $MONIKER --chain-id $CHAINID
|
||||
|
||||
# Change parameter token denominations to aphoton
|
||||
@@ -37,28 +37,28 @@ cat $HOME/.laconicd/config/genesis.json | jq '.app_state["crisis"]["constant_fee
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
# Custom modules
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["record_rent"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_rent"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_commit_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_reveal_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_minimum_bid"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["record_rent"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_commit_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_reveal_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_minimum_bid"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
|
||||
if [[ "$TEST_NAMESERVICE_EXPIRY" == "true" ]]; then
|
||||
if [[ "$TEST_REGISTRY_EXPIRY" == "true" ]]; then
|
||||
echo "Setting timers for expiry tests."
|
||||
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["record_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_grace_period"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["record_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_grace_period"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
fi
|
||||
|
||||
if [[ "$TEST_AUCTION_ENABLED" == "true" ]]; then
|
||||
echo "Enabling auction and setting timers."
|
||||
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_enabled"]=true' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_grace_period"]="300s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_commits_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_reveals_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_enabled"]=true' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_grace_period"]="300s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_commits_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_reveals_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
fi
|
||||
|
||||
# increase block time (?)
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
laconicd keys show mykey | grep address | cut -d ' ' -f 3
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
echo y | laconicd keys export mykey --unarmored-hex --unsafe
|
||||
@@ -0,0 +1,9 @@
|
||||
services:
|
||||
cns:
|
||||
restEndpoint: 'http://laconicd:1317'
|
||||
gqlEndpoint: 'http://laconicd:9473/api'
|
||||
userKey: REPLACE_WITH_MYKEY
|
||||
bondId:
|
||||
chainId: laconic_9000-1
|
||||
gas: 250000
|
||||
fees: 200000aphoton
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ETH account with pk c05fd3613bcd62a4f25e5eba1f464d0b76d74c3f771a7c2f13e26ad6439444b3
|
||||
ETH_ADDRESS=0xD375B03bd3A2434A9f675bEC4Ccd68aC5e67C743
|
||||
AMOUNT=1000
|
||||
|
||||
# Pre-fund stat
|
||||
PREFUND_STAT_OUTPUT=$(lotus evm stat $ETH_ADDRESS)
|
||||
|
||||
FILECOIN_ADDRESS=$(echo "$PREFUND_STAT_OUTPUT" | grep -oP 'Filecoin address:\s+\K\S+')
|
||||
echo Filecoin address: "$FILECOIN_ADDRESS"
|
||||
|
||||
echo Sending balance to "$FILECOIN_ADDRESS"
|
||||
lotus send --from $(lotus wallet default) "$FILECOIN_ADDRESS" $AMOUNT
|
||||
|
||||
# Post-fund stat
|
||||
echo lotus evm stat $ETH_ADDRESS
|
||||
lotus evm stat $ETH_ADDRESS
|
||||
|
||||
echo "Account with ETH address $ETH_ADDRESS funded"
|
||||
@@ -0,0 +1,6 @@
|
||||
LOTUS_PATH=/root/data/.lotus-local-net
|
||||
LOTUS_MINER_PATH=/root/data/.lotus-miner-local-net
|
||||
LOTUS_SKIP_GENESIS_CHECK=_yes_
|
||||
LOTUS_FEVM_ENABLEETHRPC=true
|
||||
CGO_CFLAGS_ALLOW="-D__BLST_PORTABLE__"
|
||||
CGO_CFLAGS="-D__BLST_PORTABLE__"
|
||||
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
|
||||
lotus --version
|
||||
|
||||
# remove old bootnode peer info if present
|
||||
if [ -f /root/.lotus-shared/miner.addr ]; then
|
||||
rm /root/.lotus-shared/miner.addr
|
||||
fi
|
||||
|
||||
# Check if filecoin-proof-parameters exist; avoid fetching if they do
|
||||
if [ -z "$(find "/var/tmp/filecoin-proof-parameters" -maxdepth 1 -type f)" ]; then
|
||||
echo "Proof params not found, fetching..."
|
||||
lotus fetch-params 2048
|
||||
else
|
||||
echo "Existing proof params found"
|
||||
fi
|
||||
|
||||
# if genesis is not already setup
|
||||
if [ ! -f /root/data/localnet.json ]; then
|
||||
lotus-seed --sector-dir /root/data/.genesis-sectors pre-seal --sector-size 2KiB --num-sectors 2
|
||||
lotus-seed --sector-dir /root/data/.genesis-sectors genesis new /root/data/localnet.json
|
||||
lotus-seed --sector-dir /root/data/.genesis-sectors genesis add-miner /root/data/localnet.json /root/data/.genesis-sectors/pre-seal-t01000.json
|
||||
fi
|
||||
|
||||
# start daemon
|
||||
nohup lotus daemon --lotus-make-genesis=/root/.lotus-shared/devgen.car --profile=bootstrapper --genesis-template=/root/data/localnet.json --bootstrap=false > /var/log/lotus.log 2>&1 &
|
||||
|
||||
# Loop until the daemon is started
|
||||
echo "Waiting for daemon to start..."
|
||||
while ! grep -q "started ChainNotify channel" /var/log/lotus.log ; do
|
||||
sleep 5
|
||||
done
|
||||
echo "Daemon started."
|
||||
|
||||
# if miner not already initialized
|
||||
if [ ! -d $LOTUS_MINER_PATH ]; then
|
||||
# initialize miner
|
||||
lotus wallet import --as-default /root/data/.genesis-sectors/pre-seal-t01000.key
|
||||
|
||||
# fund a known account for usage
|
||||
/fund-account.sh
|
||||
|
||||
echo "Initializing miner..."
|
||||
lotus-miner init --genesis-miner --actor=t01000 --sector-size=2KiB --pre-sealed-sectors=/root/data/.genesis-sectors --pre-sealed-metadata=/root/data/.genesis-sectors/pre-seal-t01000.json --nosync
|
||||
fi
|
||||
|
||||
# publish bootnode peer info to shared volume
|
||||
lotus net listen | grep "$(ip addr | grep inet | grep -v '127.0.0.1' | sort | head -1 | awk '{print $2}' | cut -d '/' -f1)" | head -1 > /root/.lotus-shared/miner.addr
|
||||
|
||||
# start miner
|
||||
nohup lotus-miner run --nosync &
|
||||
|
||||
tail -f /dev/null
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
lotus --version
|
||||
|
||||
# Loop until the daemon is started
|
||||
echo "Waiting for miner to share peering info..."
|
||||
while [ ! -f /root/.lotus-shared/miner.addr ]; do
|
||||
sleep 5
|
||||
done
|
||||
echo "Resuming..."
|
||||
|
||||
# init node config
|
||||
mkdir -p $LOTUS_PATH
|
||||
lotus config default > $LOTUS_PATH/config.toml
|
||||
|
||||
# add bootstrap peer info if available
|
||||
if [ -f /root/.lotus-shared/miner.addr ]; then
|
||||
MINER_ADDR=\"$(cat /root/.lotus-shared/miner.addr)\"
|
||||
# add bootstrap peer id to config file
|
||||
sed -i "/^\[Libp2p\]/a \ \ BootstrapPeers = [$MINER_ADDR]" $LOTUS_PATH/config.toml
|
||||
else
|
||||
echo "Bootstrap peer info not found, unable to configure. Manual peering will be required."
|
||||
fi
|
||||
|
||||
# start node
|
||||
lotus daemon --genesis=/root/.lotus-shared/devgen.car
|
||||
@@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||
|
||||
# Check existing config if it exists
|
||||
if [ -f /app/jwt.txt ] && [ -f /app/rollup.json ]; then
|
||||
echo "Found existing L2 config, cross-checking with L1 deployment config"
|
||||
|
||||
SOURCE_L1_CONF=$(cat /contracts-bedrock/deploy-config/getting-started.json)
|
||||
EXP_L1_BLOCKHASH=$(echo "$SOURCE_L1_CONF" | jq -r '.l1StartingBlockTag')
|
||||
EXP_BATCHER=$(echo "$SOURCE_L1_CONF" | jq -r '.batchSenderAddress')
|
||||
|
||||
GEN_L2_CONF=$(cat /app/rollup.json)
|
||||
GEN_L1_BLOCKHASH=$(echo "$GEN_L2_CONF" | jq -r '.genesis.l1.hash')
|
||||
GEN_BATCHER=$(echo "$GEN_L2_CONF" | jq -r '.genesis.system_config.batcherAddr')
|
||||
|
||||
if [ "$EXP_L1_BLOCKHASH" = "$GEN_L1_BLOCKHASH" ] && [ "$EXP_BATCHER" = "$GEN_BATCHER" ]; then
|
||||
echo "Config cross-checked, exiting"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Existing L2 config doesn't match the L1 deployment config, please clear L2 config volume before starting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
op-node genesis l2 \
|
||||
--deploy-config /contracts-bedrock/deploy-config/getting-started.json \
|
||||
--deployment-dir /contracts-bedrock/deployments/getting-started/ \
|
||||
--outfile.l2 /app/genesis.json \
|
||||
--outfile.rollup /app/rollup.json \
|
||||
--l1-rpc $CERC_L1_RPC
|
||||
|
||||
openssl rand -hex 32 > /app/jwt.txt
|
||||
@@ -0,0 +1,12 @@
|
||||
# Defaults
|
||||
|
||||
# L1 endpoint
|
||||
DEFAULT_CERC_L1_CHAIN_ID=1212
|
||||
DEFAULT_CERC_L1_RPC="http://fixturenet-eth-geth-1:8545"
|
||||
DEFAULT_CERC_L1_HOST="fixturenet-eth-geth-1"
|
||||
DEFAULT_CERC_L1_PORT=8545
|
||||
|
||||
# URL to get CSV with credentials for accounts on L1
|
||||
# that are used to send balance to Optimism Proxy contract
|
||||
# (enables them to do transactions on L2)
|
||||
DEFAULT_CERC_L1_ACCOUNTS_CSV_URL="http://fixturenet-eth-bootnode-geth:9898/accounts.csv"
|
||||
@@ -0,0 +1,131 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
CERC_L1_CHAIN_ID="${CERC_L1_CHAIN_ID:-${DEFAULT_CERC_L1_CHAIN_ID}}"
|
||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||
|
||||
CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS_CSV_URL}}"
|
||||
|
||||
echo "Using L1 RPC endpoint ${CERC_L1_RPC}"
|
||||
|
||||
IMPORT_1="import './verify-contract-deployment'"
|
||||
IMPORT_2="import './rekey-json'"
|
||||
IMPORT_3="import './send-balance'"
|
||||
|
||||
# Append mounted tasks to tasks/index.ts file if not present
|
||||
if ! grep -Fxq "$IMPORT_1" tasks/index.ts; then
|
||||
echo "$IMPORT_1" >> tasks/index.ts
|
||||
echo "$IMPORT_2" >> tasks/index.ts
|
||||
echo "$IMPORT_3" >> tasks/index.ts
|
||||
fi
|
||||
|
||||
# Update the chainId in the hardhat config
|
||||
sed -i "/getting-started/ {n; s/.*chainId.*/ chainId: $CERC_L1_CHAIN_ID,/}" hardhat.config.ts
|
||||
|
||||
# Exit if a deployment already exists (on restarts)
|
||||
# Note: fixturenet-eth-geth currently starts fresh on a restart
|
||||
if [ -d "deployments/getting-started" ]; then
|
||||
echo "Deployment directory deployments/getting-started found, checking SystemDictator deployment"
|
||||
|
||||
# Read JSON file into variable
|
||||
SYSTEM_DICTATOR_DETAILS=$(cat deployments/getting-started/SystemDictator.json)
|
||||
|
||||
# Parse JSON into variables
|
||||
SYSTEM_DICTATOR_ADDRESS=$(echo "$SYSTEM_DICTATOR_DETAILS" | jq -r '.address')
|
||||
SYSTEM_DICTATOR_TXHASH=$(echo "$SYSTEM_DICTATOR_DETAILS" | jq -r '.transactionHash')
|
||||
|
||||
if yarn hardhat verify-contract-deployment --contract "${SYSTEM_DICTATOR_ADDRESS}" --transaction-hash "${SYSTEM_DICTATOR_TXHASH}"; then
|
||||
echo "Deployment verfication successful, exiting"
|
||||
exit 0
|
||||
else
|
||||
echo "Deployment verfication failed, please clear L1 deployment volume before starting"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Generate the L2 account addresses
|
||||
yarn hardhat rekey-json --output /l2-accounts/keys.json
|
||||
|
||||
# Read JSON file into variable
|
||||
KEYS_JSON=$(cat /l2-accounts/keys.json)
|
||||
|
||||
# Parse JSON into variables
|
||||
ADMIN_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Admin.address')
|
||||
ADMIN_PRIV_KEY=$(echo "$KEYS_JSON" | jq -r '.Admin.privateKey')
|
||||
PROPOSER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Proposer.address')
|
||||
BATCHER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Batcher.address')
|
||||
SEQUENCER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Sequencer.address')
|
||||
|
||||
# Get the private keys of L1 accounts
|
||||
if [ -n "$CERC_L1_ACCOUNTS_CSV_URL" ] && \
|
||||
l1_accounts_response=$(curl -L --write-out '%{http_code}' --silent --output /dev/null "$CERC_L1_ACCOUNTS_CSV_URL") && \
|
||||
[ "$l1_accounts_response" -eq 200 ];
|
||||
then
|
||||
echo "Fetching L1 account credentials using provided URL"
|
||||
mkdir -p /geth-accounts
|
||||
wget -O /geth-accounts/accounts.csv "$CERC_L1_ACCOUNTS_CSV_URL"
|
||||
|
||||
CERC_L1_ADDRESS=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 2)
|
||||
CERC_L1_PRIV_KEY=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 3)
|
||||
CERC_L1_ADDRESS_2=$(awk -F, 'NR==2{print $(NF-1)}' /geth-accounts/accounts.csv)
|
||||
CERC_L1_PRIV_KEY_2=$(awk -F, 'NR==2{print $NF}' /geth-accounts/accounts.csv)
|
||||
else
|
||||
echo "Couldn't fetch L1 account credentials, using them from env"
|
||||
fi
|
||||
|
||||
# Send balances to the above L2 addresses
|
||||
yarn hardhat send-balance --to "${ADMIN_ADDRESS}" --amount 2 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started
|
||||
yarn hardhat send-balance --to "${PROPOSER_ADDRESS}" --amount 5 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started
|
||||
yarn hardhat send-balance --to "${BATCHER_ADDRESS}" --amount 1000 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started
|
||||
|
||||
echo "Balances sent to L2 accounts"
|
||||
|
||||
# Select a finalized L1 block as the starting point for roll ups
|
||||
until FINALIZED_BLOCK=$(cast block finalized --rpc-url "$CERC_L1_RPC"); do
|
||||
echo "Waiting for a finalized L1 block to exist, retrying after 10s"
|
||||
sleep 10
|
||||
done
|
||||
|
||||
L1_BLOCKNUMBER=$(echo "$FINALIZED_BLOCK" | awk '/number/{print $2}')
|
||||
L1_BLOCKHASH=$(echo "$FINALIZED_BLOCK" | awk '/hash/{print $2}')
|
||||
L1_BLOCKTIMESTAMP=$(echo "$FINALIZED_BLOCK" | awk '/timestamp/{print $2}')
|
||||
|
||||
echo "Selected L1 block ${L1_BLOCKNUMBER} as the starting block for roll ups"
|
||||
|
||||
# Update the deployment config
|
||||
sed -i 's/"l2OutputOracleStartingTimestamp": TIMESTAMP/"l2OutputOracleStartingTimestamp": '"$L1_BLOCKTIMESTAMP"'/g' deploy-config/getting-started.json
|
||||
jq --arg chainid "$CERC_L1_CHAIN_ID" '.l1ChainID = ($chainid | tonumber)' deploy-config/getting-started.json > tmp.json && mv tmp.json deploy-config/getting-started.json
|
||||
|
||||
node update-config.js deploy-config/getting-started.json "$ADMIN_ADDRESS" "$PROPOSER_ADDRESS" "$BATCHER_ADDRESS" "$SEQUENCER_ADDRESS" "$L1_BLOCKHASH"
|
||||
|
||||
echo "Updated the deployment config"
|
||||
|
||||
# Create a .env file
|
||||
echo "L1_RPC=$CERC_L1_RPC" > .env
|
||||
echo "PRIVATE_KEY_DEPLOYER=$ADMIN_PRIV_KEY" >> .env
|
||||
|
||||
echo "Deploying the L1 smart contracts, this will take a while..."
|
||||
|
||||
# Deploy the L1 smart contracts
|
||||
yarn hardhat deploy --network getting-started --tags l1
|
||||
|
||||
echo "Deployed the L1 smart contracts"
|
||||
|
||||
# Read Proxy contract's JSON and get the address
|
||||
PROXY_JSON=$(cat deployments/getting-started/Proxy__OVM_L1StandardBridge.json)
|
||||
PROXY_ADDRESS=$(echo "$PROXY_JSON" | jq -r '.address')
|
||||
|
||||
# Send balance to the above Proxy contract in L1 for reflecting balance in L2
|
||||
# First account
|
||||
yarn hardhat send-balance --to "${PROXY_ADDRESS}" --amount 1 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started
|
||||
# Second account
|
||||
yarn hardhat send-balance --to "${PROXY_ADDRESS}" --amount 1 --private-key "${CERC_L1_PRIV_KEY_2}" --network getting-started
|
||||
|
||||
echo "Balance sent to Proxy L2 contract"
|
||||
echo "Use following accounts for transactions in L2:"
|
||||
echo "${CERC_L1_ADDRESS}"
|
||||
echo "${CERC_L1_ADDRESS_2}"
|
||||
echo "Done"
|
||||
@@ -0,0 +1,36 @@
|
||||
const fs = require('fs')
|
||||
|
||||
// Get the command-line argument
|
||||
const configFile = process.argv[2]
|
||||
const adminAddress = process.argv[3]
|
||||
const proposerAddress = process.argv[4]
|
||||
const batcherAddress = process.argv[5]
|
||||
const sequencerAddress = process.argv[6]
|
||||
const blockHash = process.argv[7]
|
||||
|
||||
// Read the JSON file
|
||||
const configData = fs.readFileSync(configFile)
|
||||
const configObj = JSON.parse(configData)
|
||||
|
||||
// Update the finalSystemOwner property with the ADMIN_ADDRESS value
|
||||
configObj.finalSystemOwner =
|
||||
configObj.portalGuardian =
|
||||
configObj.controller =
|
||||
configObj.l2OutputOracleChallenger =
|
||||
configObj.proxyAdminOwner =
|
||||
configObj.baseFeeVaultRecipient =
|
||||
configObj.l1FeeVaultRecipient =
|
||||
configObj.sequencerFeeVaultRecipient =
|
||||
configObj.governanceTokenOwner =
|
||||
adminAddress
|
||||
|
||||
configObj.l2OutputOracleProposer = proposerAddress
|
||||
|
||||
configObj.batchSenderAddress = batcherAddress
|
||||
|
||||
configObj.p2pSequencerAddress = sequencerAddress
|
||||
|
||||
configObj.l1StartingBlockTag = blockHash
|
||||
|
||||
// Write the updated JSON object back to the file
|
||||
fs.writeFileSync(configFile, JSON.stringify(configObj, null, 2))
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||
|
||||
# Get Batcher key from keys.json
|
||||
BATCHER_KEY=$(jq -r '.Batcher.privateKey' /l2-accounts/keys.json | tr -d '"')
|
||||
|
||||
cleanup() {
|
||||
echo "Signal received, cleaning up..."
|
||||
kill ${batcher_pid}
|
||||
|
||||
wait
|
||||
echo "Done"
|
||||
}
|
||||
trap 'cleanup' INT TERM
|
||||
|
||||
# Run op-batcher
|
||||
op-batcher \
|
||||
--l2-eth-rpc=http://op-geth:8545 \
|
||||
--rollup-rpc=http://op-node:8547 \
|
||||
--poll-interval=1s \
|
||||
--sub-safety-margin=6 \
|
||||
--num-confirmations=1 \
|
||||
--safe-abort-nonce-too-low-count=3 \
|
||||
--resubmission-timeout=30s \
|
||||
--rpc.addr=0.0.0.0 \
|
||||
--rpc.port=8548 \
|
||||
--rpc.enable-admin \
|
||||
--max-channel-duration=1 \
|
||||
--l1-eth-rpc=$CERC_L1_RPC \
|
||||
--private-key=$BATCHER_KEY \
|
||||
&
|
||||
|
||||
batcher_pid=$!
|
||||
wait $batcher_pid
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
# TODO: Add in container build or use other tool
|
||||
echo "Installing jq"
|
||||
apk update && apk add jq
|
||||
|
||||
# Get Sequencer key from keys.json
|
||||
SEQUENCER_KEY=$(jq -r '.Sequencer.privateKey' /l2-accounts/keys.json | tr -d '"')
|
||||
|
||||
# Initialize op-geth if datadir/geth not found
|
||||
if [ -f /op-node/jwt.txt ] && [ -d datadir/geth ]; then
|
||||
echo "Found existing datadir, checking block signer key"
|
||||
|
||||
BLOCK_SIGNER_KEY=$(cat datadir/block-signer-key)
|
||||
|
||||
if [ "$SEQUENCER_KEY" = "$BLOCK_SIGNER_KEY" ]; then
|
||||
echo "Sequencer and block signer keys match, skipping initialization"
|
||||
else
|
||||
echo "Sequencer and block signer keys don't match, please clear L2 geth data volume before starting"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Initializing op-geth"
|
||||
|
||||
mkdir -p datadir
|
||||
echo "pwd" > datadir/password
|
||||
echo $SEQUENCER_KEY > datadir/block-signer-key
|
||||
|
||||
geth account import --datadir=datadir --password=datadir/password datadir/block-signer-key
|
||||
|
||||
while [ ! -f "/op-node/jwt.txt" ]
|
||||
do
|
||||
echo "Config files not created. Checking after 5 seconds."
|
||||
sleep 5
|
||||
done
|
||||
|
||||
echo "Config files created by op-node, proceeding with the initialization..."
|
||||
|
||||
geth init --datadir=datadir /op-node/genesis.json
|
||||
echo "Node Initialized"
|
||||
fi
|
||||
|
||||
SEQUENCER_ADDRESS=$(jq -r '.Sequencer.address' /l2-accounts/keys.json | tr -d '"')
|
||||
echo "SEQUENCER_ADDRESS: ${SEQUENCER_ADDRESS}"
|
||||
|
||||
cleanup() {
|
||||
echo "Signal received, cleaning up..."
|
||||
kill ${geth_pid}
|
||||
|
||||
wait
|
||||
echo "Done"
|
||||
}
|
||||
trap 'cleanup' INT TERM
|
||||
|
||||
# Run op-geth
|
||||
geth \
|
||||
--datadir ./datadir \
|
||||
--http \
|
||||
--http.corsdomain="*" \
|
||||
--http.vhosts="*" \
|
||||
--http.addr=0.0.0.0 \
|
||||
--http.api=web3,debug,eth,txpool,net,engine \
|
||||
--ws \
|
||||
--ws.addr=0.0.0.0 \
|
||||
--ws.port=8546 \
|
||||
--ws.origins="*" \
|
||||
--ws.api=debug,eth,txpool,net,engine \
|
||||
--syncmode=full \
|
||||
--gcmode=archive \
|
||||
--nodiscover \
|
||||
--maxpeers=0 \
|
||||
--networkid=42069 \
|
||||
--authrpc.vhosts="*" \
|
||||
--authrpc.addr=0.0.0.0 \
|
||||
--authrpc.port=8551 \
|
||||
--authrpc.jwtsecret=/op-node/jwt.txt \
|
||||
--rollup.disabletxpoolgossip=true \
|
||||
--password=./datadir/password \
|
||||
--allow-insecure-unlock \
|
||||
--mine \
|
||||
--miner.etherbase=$SEQUENCER_ADDRESS \
|
||||
--unlock=$SEQUENCER_ADDRESS \
|
||||
&
|
||||
|
||||
geth_pid=$!
|
||||
wait $geth_pid
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||
|
||||
# Get Sequencer key from keys.json
|
||||
SEQUENCER_KEY=$(jq -r '.Sequencer.privateKey' /l2-accounts/keys.json | tr -d '"')
|
||||
|
||||
# Run op-node
|
||||
op-node \
|
||||
--l2=http://op-geth:8551 \
|
||||
--l2.jwt-secret=/op-node-data/jwt.txt \
|
||||
--sequencer.enabled \
|
||||
--sequencer.l1-confs=3 \
|
||||
--verifier.l1-confs=3 \
|
||||
--rollup.config=/op-node-data/rollup.json \
|
||||
--rpc.addr=0.0.0.0 \
|
||||
--rpc.port=8547 \
|
||||
--p2p.disable \
|
||||
--rpc.enable-admin \
|
||||
--p2p.sequencer.key=$SEQUENCER_KEY \
|
||||
--l1=$CERC_L1_RPC \
|
||||
--l1.rpckind=any
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}"
|
||||
|
||||
# Read the L2OutputOracle contract address from the deployment
|
||||
L2OO_DEPLOYMENT=$(cat /contracts-bedrock/deployments/getting-started/L2OutputOracle.json)
|
||||
L2OO_ADDR=$(echo "$L2OO_DEPLOYMENT" | jq -r '.address')
|
||||
|
||||
# Get Proposer key from keys.json
|
||||
PROPOSER_KEY=$(jq -r '.Proposer.privateKey' /l2-accounts/keys.json | tr -d '"')
|
||||
|
||||
cleanup() {
|
||||
echo "Signal received, cleaning up..."
|
||||
kill ${proposer_pid}
|
||||
|
||||
wait
|
||||
echo "Done"
|
||||
}
|
||||
trap 'cleanup' INT TERM
|
||||
|
||||
# Run op-proposer
|
||||
op-proposer \
|
||||
--poll-interval 12s \
|
||||
--rpc.port 8560 \
|
||||
--rollup-rpc http://op-node:8547 \
|
||||
--l2oo-address $L2OO_ADDR \
|
||||
--private-key $PROPOSER_KEY \
|
||||
--l1-eth-rpc $CERC_L1_RPC \
|
||||
&
|
||||
|
||||
proposer_pid=$!
|
||||
wait $proposer_pid
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
[
|
||||
{
|
||||
"id": "0001",
|
||||
"url": "http://127.0.0.1:8081/",
|
||||
"basic_auth": {
|
||||
"username": "",
|
||||
"password": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0021",
|
||||
"url": "http://fixturenet-eth-geth-1:8545/",
|
||||
"basic_auth": {
|
||||
"username": "",
|
||||
"password": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,65 @@
|
||||
#!/bin/bash
|
||||
|
||||
# TODO: we should have a mechanism to bundle it inside the container rather than link from here
|
||||
# at deploy time.
|
||||
|
||||
CHAINID="pocketlocal-1"
|
||||
MONIKER="localtestnet"
|
||||
SERVICE_URL="http://127.0.0.1:8081"
|
||||
PASSWORD="mypassword" # wallet password, required by cli
|
||||
|
||||
# check if jq is installed; install if necessary
|
||||
# command -v jq > /dev/null 2>&1 || { echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/"; exit 1; }
|
||||
if ! command -v jq > /dev/null 2>&1; then
|
||||
echo "jq not installed, downloading..."
|
||||
mkdir -p /home/app/bin
|
||||
wget -O /home/app/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
|
||||
chmod +x /home/app/bin/jq
|
||||
export PATH=$PATH:/home/app/bin
|
||||
fi
|
||||
|
||||
# remove existing daemon and client
|
||||
rm -rf ~/.pocket*
|
||||
|
||||
# create a wallet with password "mypassword" and save the address for later
|
||||
address=$(pocket accounts create --pwd $PASSWORD | awk '/Address:/ {print $2}')
|
||||
|
||||
# set this address as the validator address for the node
|
||||
pocket accounts set-validator $address --pwd $PASSWORD
|
||||
|
||||
# save the public key for later
|
||||
pubkey=$(pocket accounts show $address | awk '/Public Key:/ {print $3}')
|
||||
|
||||
# set node's moniker
|
||||
echo $(pocket util print-configs) | jq '.tendermint_config.Moniker = "'"$MONIKER"'"' | jq . > $HOME/.pocket/config/config.json
|
||||
|
||||
# pocket mainnet has block time of 15 minutes, set closer to 1 minute instead
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPropose = 8000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutProposeDelta = 600000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPrevote = 4000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPrevoteDelta = 600000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPrecommit = 4000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutPrecommitDelta = 6000000006' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.TimeoutCommit = 52000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.CreateEmptyBlocksInterval = 60000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.PeerGossipSleepDuration = 2000000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
cat $HOME/.pocket/config/config.json | jq '.tendermint_config.Consensus.PeerQueryMaj23SleepDuration = 1200000000' | jq . > $HOME/.pocket/config/tmp_config.json && mv $HOME/.pocket/config/tmp_config.json $HOME/.pocket/config/config.json
|
||||
|
||||
# include genesis.json and chains.json
|
||||
cp $HOME/pocket-configs/genesis.json $HOME/.pocket/config/genesis.json
|
||||
cp $HOME/pocket-configs/chains.json $HOME/.pocket/config/chains.json
|
||||
|
||||
# set chain-id and add node to genesis.json as a validator
|
||||
cat $HOME/.pocket/config/genesis.json | jq '.chain_id="'"$CHAINID"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||
cat $HOME/.pocket/config/genesis.json | jq '.app_state.auth.accounts[0].value.address="'"$address"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||
cat $HOME/.pocket/config/genesis.json | jq '.app_state.auth.accounts[0].value.public_key.value="'"$pubkey"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||
cat $HOME/.pocket/config/genesis.json | jq '.app_state.pos.validators[0].address="'"$address"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||
cat $HOME/.pocket/config/genesis.json | jq '.app_state.pos.validators[0].public_key="'"$pubkey"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||
cat $HOME/.pocket/config/genesis.json | jq '.app_state.pos.validators[0].service_url="'"$SERVICE_URL"'"' > $HOME/.pocket/config/tmp_genesis.json && mv $HOME/.pocket/config/tmp_genesis.json $HOME/.pocket/config/genesis.json
|
||||
|
||||
# if [[ $1 == "pending" ]]; then
|
||||
# echo "pending mode is on, please wait for the first block committed."
|
||||
# fi
|
||||
|
||||
# Start the node
|
||||
pocket start --simulateRelay
|
||||
@@ -0,0 +1,272 @@
|
||||
{
|
||||
"genesis_time": "2020-07-28T15:00:00.000000Z",
|
||||
"chain_id": "testnet",
|
||||
"consensus_params": {
|
||||
"block": {
|
||||
"max_bytes": "4000000",
|
||||
"max_gas": "-1",
|
||||
"time_iota_ms": "1"
|
||||
},
|
||||
"evidence": {
|
||||
"max_age": "120000000000"
|
||||
},
|
||||
"validator": {
|
||||
"pub_key_types": [
|
||||
"ed25519"
|
||||
]
|
||||
}
|
||||
},
|
||||
"app_hash": "",
|
||||
"app_state": {
|
||||
"application": {
|
||||
"params": {
|
||||
"unstaking_time": "1814000000000000",
|
||||
"max_applications": "9223372036854775807",
|
||||
"app_stake_minimum": "1000000",
|
||||
"base_relays_per_pokt": "167",
|
||||
"stability_adjustment": "0",
|
||||
"participation_rate_on": false,
|
||||
"maximum_chains": "15"
|
||||
},
|
||||
"applications": [],
|
||||
"exported": false
|
||||
},
|
||||
"auth": {
|
||||
"params": {
|
||||
"max_memo_characters": "75",
|
||||
"tx_sig_limit": "8",
|
||||
"fee_multipliers": {
|
||||
"fee_multiplier": [],
|
||||
"default": "1"
|
||||
}
|
||||
},
|
||||
"accounts": [
|
||||
{
|
||||
"type": "posmint/Account",
|
||||
"value": {
|
||||
"address": "!validator-address",
|
||||
"coins": [
|
||||
{
|
||||
"amount": "0",
|
||||
"denom": "upokt"
|
||||
}
|
||||
],
|
||||
"public_key": {
|
||||
"type": "crypto/ed25519_public_key",
|
||||
"value": "!validator-pubkey"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"supply": []
|
||||
},
|
||||
"gov": {
|
||||
"params": {
|
||||
"acl": [
|
||||
{
|
||||
"acl_key": "application/ApplicationStakeMinimum",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "application/AppUnstakingTime",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "application/BaseRelaysPerPOKT",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "application/MaxApplications",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "application/MaximumChains",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "application/ParticipationRateOn",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "application/StabilityAdjustment",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "auth/MaxMemoCharacters",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "auth/TxSigLimit",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "gov/acl",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "gov/daoOwner",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "gov/upgrade",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pocketcore/ClaimExpiration",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "auth/FeeMultipliers",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pocketcore/ReplayAttackBurnMultiplier",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/ProposerPercentage",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pocketcore/ClaimSubmissionWindow",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pocketcore/MinimumNumberOfProofs",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pocketcore/SessionNodeCount",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pocketcore/SupportedBlockchains",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/BlocksPerSession",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/DAOAllocation",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/DowntimeJailDuration",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/MaxEvidenceAge",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/MaximumChains",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/MaxJailedBlocks",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/MaxValidators",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/MinSignedPerWindow",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/RelaysToTokensMultiplier",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/SignedBlocksWindow",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/SlashFractionDoubleSign",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/SlashFractionDowntime",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/StakeDenom",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/StakeMinimum",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
},
|
||||
{
|
||||
"acl_key": "pos/UnstakingTime",
|
||||
"address": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4"
|
||||
}
|
||||
],
|
||||
"dao_owner": "a83172b67b5ffbfcb8acb95acc0fd0466a9d4bc4",
|
||||
"upgrade": {
|
||||
"Height": "0",
|
||||
"Version": "0"
|
||||
}
|
||||
},
|
||||
"DAO_Tokens": "50000000000000"
|
||||
},
|
||||
"pos": {
|
||||
"params": {
|
||||
"relays_to_tokens_multiplier": "10000",
|
||||
"unstaking_time": "1814000000000000",
|
||||
"max_validators": "5000",
|
||||
"stake_denom": "upokt",
|
||||
"stake_minimum": "15000000000",
|
||||
"session_block_frequency": "4",
|
||||
"dao_allocation": "10",
|
||||
"proposer_allocation": "1",
|
||||
"maximum_chains": "15",
|
||||
"max_jailed_blocks": "37960",
|
||||
"max_evidence_age": "120000000000",
|
||||
"signed_blocks_window": "10",
|
||||
"min_signed_per_window": "0.60",
|
||||
"downtime_jail_duration": "3600000000000",
|
||||
"slash_fraction_double_sign": "0.05",
|
||||
"slash_fraction_downtime": "0.000001"
|
||||
},
|
||||
"prevState_total_power": "0",
|
||||
"prevState_validator_powers": null,
|
||||
"validators": [
|
||||
{
|
||||
"address": "!validator-address",
|
||||
"public_key": "!validator-pubkey",
|
||||
"jailed": false,
|
||||
"status": 2,
|
||||
"tokens": "5000000000000",
|
||||
"service_url": "!validator-url",
|
||||
"chains": [
|
||||
"0001",
|
||||
"0021"
|
||||
],
|
||||
"unstaking_time": "2021-05-15T00:00:00Z"
|
||||
}
|
||||
],
|
||||
"exported": false,
|
||||
"signing_infos": {},
|
||||
"missed_blocks": {},
|
||||
"previous_proposer": ""
|
||||
},
|
||||
"pocketcore": {
|
||||
"params": {
|
||||
"session_node_count": "5",
|
||||
"proof_waiting_period": "3",
|
||||
"supported_blockchains": [
|
||||
"0001",
|
||||
"0021"
|
||||
],
|
||||
"claim_expiration": "120",
|
||||
"replay_attack_burn_multiplier": "3",
|
||||
"minimum_number_of_proofs": "10"
|
||||
},
|
||||
"receipts": null,
|
||||
"claims": null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
module.exports = {
|
||||
network: 'lotus-fixturenet',
|
||||
blocks: {
|
||||
address: '0x0000000000000000000000000000000000000000',
|
||||
startBlock: 0,
|
||||
},
|
||||
v3: {
|
||||
factory: {
|
||||
address: 'FACTORY_ADDRESS',
|
||||
startBlock: FACTORY_BLOCK
|
||||
},
|
||||
positionManager: {
|
||||
address: 'NFPM_ADDRESS',
|
||||
startBlock: NFPM_BLOCK
|
||||
},
|
||||
native: { address: 'NATIVE_ADDRESS' },
|
||||
whitelistedTokenAddresses: [
|
||||
'NATIVE_ADDRESS',
|
||||
],
|
||||
stableTokenAddresses: [],
|
||||
nativePricePool: '0x0000000000000000000000000000000000000000',
|
||||
minimumEthLocked: 1.5
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "Building blocks subgraph and deploying to graph-node..."
|
||||
|
||||
cd blocks
|
||||
|
||||
pnpm run generate
|
||||
pnpm run build
|
||||
|
||||
pnpm exec graph create --node http://graph-node:8020/ sushiswap/blocks
|
||||
pnpm exec graph deploy --node http://graph-node:8020/ --ipfs http://ipfs:5001 --version-label 0.1.0 sushiswap/blocks
|
||||
|
||||
echo "Done"
|
||||
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
cd v3
|
||||
|
||||
# Loop until the NFPM deployment is detected
|
||||
echo "Waiting for sushiswap-periphery deployments to occur"
|
||||
while [ ! -f ./periphery-deployments/docker/NonfungiblePositionManager.json ]; do
|
||||
sleep 5
|
||||
done
|
||||
|
||||
echo "Reading contract addresses and block numbers from deployments"
|
||||
FACTORY_ADDRESS=$(jq -r '.address' ./core-deployments/docker/UniswapV3Factory.json)
|
||||
FACTORY_BLOCK=$(jq -r '.receipt.blockNumber' ./core-deployments/docker/UniswapV3Factory.json)
|
||||
NATIVE_ADDRESS=$(jq -r '.address' ./periphery-deployments/docker/WFIL.json)
|
||||
NFPM_ADDRESS=$(jq -r '.address' ./periphery-deployments/docker/NonfungiblePositionManager.json)
|
||||
NFPM_BLOCK=$(jq -r '.receipt.blockNumber' ./periphery-deployments/docker/NonfungiblePositionManager.json)
|
||||
|
||||
# Read the JavaScript file content
|
||||
file_content=$(</app/config/lotus-fixturenet.js.template)
|
||||
|
||||
# Replace uppercase words with environment variables
|
||||
echo "Reading values in lotus-fixturenet config"
|
||||
replaced_content=$(echo "$file_content" | sed -e "s/FACTORY_ADDRESS/$FACTORY_ADDRESS/g" \
|
||||
-e "s/FACTORY_BLOCK/$FACTORY_BLOCK/g" \
|
||||
-e "s/NFPM_ADDRESS/$NFPM_ADDRESS/g" \
|
||||
-e "s/NFPM_BLOCK/$NFPM_BLOCK/g" \
|
||||
-e "s/NATIVE_ADDRESS/$NATIVE_ADDRESS/g")
|
||||
|
||||
# Write the replaced content back to the JavaScript file
|
||||
echo "$replaced_content" > /app/config/lotus-fixturenet.js
|
||||
|
||||
echo "Building v3 subgraph and deploying to graph-node..."
|
||||
|
||||
pnpm run generate
|
||||
pnpm run build
|
||||
|
||||
pnpm exec graph create --node http://graph-node:8020/ sushiswap/v3-lotus
|
||||
pnpm exec graph deploy --node http://graph-node:8020/ --ipfs http://ipfs:5001 --version-label 0.1.0 sushiswap/v3-lotus
|
||||
|
||||
echo "Done"
|
||||
@@ -0,0 +1,2 @@
|
||||
[profile.default]
|
||||
eth-rpc-url = "http://fixturenet-eth-geth-1:8545"
|
||||
Executable
+49
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
nitro_addresses_file="/app/deployment/nitro-addresses.json"
|
||||
|
||||
# Check if CERC_NA_ADDRESS environment variable is set
|
||||
if [ -n "$CERC_NA_ADDRESS" ]; then
|
||||
echo "CERC_NA_ADDRESS is set to '$CERC_NA_ADDRESS'"
|
||||
echo "CERC_VPA_ADDRESS is set to '$CERC_VPA_ADDRESS'"
|
||||
echo "CERC_CA_ADDRESS is set to '$CERC_CA_ADDRESS'"
|
||||
echo "Using the above Nitro addresses"
|
||||
|
||||
NA_ADDRESS=${CERC_NA_ADDRESS}
|
||||
VPA_ADDRESS=${CERC_VPA_ADDRESS}
|
||||
CA_ADDRESS=${CERC_CA_ADDRESS}
|
||||
elif [ -f ${nitro_addresses_file} ]; then
|
||||
echo "Reading Nitro addresses from ${nitro_addresses_file}"
|
||||
|
||||
NA_ADDRESS=$(jq -r '.nitroAdjudicatorAddress' ${nitro_addresses_file})
|
||||
VPA_ADDRESS=$(jq -r '.virtualPaymentAppAddress' ${nitro_addresses_file})
|
||||
CA_ADDRESS=$(jq -r '.consensusAppAddress' ${nitro_addresses_file})
|
||||
else
|
||||
echo "File ${nitro_addresses_file} not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Running Nitro node"
|
||||
|
||||
# Wait till chain endpoint is available
|
||||
retry_interval=5
|
||||
while true; do
|
||||
# Assuming CERC_NITRO_CHAIN_URL is of format <ws|http>://host:port
|
||||
ws_host=$(echo "$CERC_NITRO_CHAIN_URL" | awk -F '://' '{print $2}' | cut -d ':' -f 1)
|
||||
ws_port=$(echo "$CERC_NITRO_CHAIN_URL" | awk -F '://' '{print $2}' | cut -d ':' -f 2)
|
||||
nc -z -w 1 "$ws_host" "$ws_port"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Chain endpoint is available"
|
||||
break
|
||||
fi
|
||||
|
||||
echo "Chain endpoint not yet available, retrying in $retry_interval seconds..."
|
||||
sleep $retry_interval
|
||||
done
|
||||
|
||||
./nitro -chainurl ${CERC_NITRO_CHAIN_URL} -msgport 3005 -rpcport 4005 -wsmsgport 5005 -pk ${CERC_NITRO_PK} -chainpk ${CERC_NITRO_CHAIN_PK} -naaddress ${NA_ADDRESS} -vpaaddress ${VPA_ADDRESS} -caaddress ${CA_ADDRESS} -usedurablestore ${CERC_NITRO_USE_DURABLE_STORE} -durablestorefolder ${CERC_NITRO_DURABLE_STORE_FOLDER}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
echo "Running Nitro reverse payment proxy"
|
||||
echo "Using CERC_PROXY_ADDRESS ${CERC_PROXY_ADDRESS}"
|
||||
echo "Using CERC_PROXY_NITRO_ENDPOINT ${CERC_PROXY_NITRO_ENDPOINT}"
|
||||
echo "Using CERC_PROXY_DESTINATION_URL ${CERC_PROXY_DESTINATION_URL}"
|
||||
echo "Using CERC_PROXY_COST_PER_BYTE ${CERC_PROXY_COST_PER_BYTE}"
|
||||
|
||||
./proxy -proxyaddress ${CERC_PROXY_ADDRESS} -nitroendpoint=${CERC_PROXY_NITRO_ENDPOINT} -destinationurl=${CERC_PROXY_DESTINATION_URL} -costperbyte ${CERC_PROXY_COST_PER_BYTE} -enablepaidrpcmethods
|
||||
@@ -20,16 +20,19 @@ server {
|
||||
proxy_pass http://fixturenet-eth-geth-1:8545;
|
||||
}
|
||||
|
||||
### ipld-eth-server
|
||||
## ipld-eth-server
|
||||
# location ~ ^/ipld/eth/([^/]*)$ {
|
||||
# set $apiKey $1;
|
||||
# if ($apiKey = '') {
|
||||
# set $apiKey $http_X_API_KEY;
|
||||
# }
|
||||
# auth_request /auth;
|
||||
# auth_request_set $user_id $sent_http_x_user_id;
|
||||
# proxy_buffering off;
|
||||
# rewrite /.*$ / break;
|
||||
# proxy_pass http://ipld-eth-server:8081;
|
||||
# proxy_set_header X-Original-Remote-Addr $remote_addr;
|
||||
# proxy_set_header X-User-Id $user_id;
|
||||
# }
|
||||
#
|
||||
# location ~ ^/ipld/gql/([^/]*)$ {
|
||||
@@ -42,14 +45,14 @@ server {
|
||||
# rewrite /.*$ / break;
|
||||
# proxy_pass http://ipld-eth-server:8082;
|
||||
# }
|
||||
#
|
||||
### lighthouse
|
||||
# location /beacon/ {
|
||||
# set $apiKey $http_X_API_KEY;
|
||||
# auth_request /auth;
|
||||
# proxy_buffering off;
|
||||
# proxy_pass http://fixturenet-eth-lighthouse-1:8001/;
|
||||
# }
|
||||
|
||||
## lighthouse
|
||||
location /beacon/ {
|
||||
set $apiKey $http_X_API_KEY;
|
||||
auth_request /auth;
|
||||
proxy_buffering off;
|
||||
proxy_pass http://fixturenet-eth-lighthouse-1:8001/;
|
||||
}
|
||||
|
||||
location = /auth {
|
||||
internal;
|
||||
@@ -63,7 +66,7 @@ server {
|
||||
proxy_set_header X-Original-Host $host;
|
||||
}
|
||||
|
||||
# location = /basic_status {
|
||||
# stub_status;
|
||||
# }
|
||||
location = /stub_status {
|
||||
stub_status;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
CERC_ETHPXY_LISTEN_PORT=8547
|
||||
CERC_ETHPXY_LISTEN_ADDR='0.0.0.0'
|
||||
CERC_ETHPXY_REDIS_URL='redis://mainnet-eth-api-proxy-redis:6379'
|
||||
CERC_ETHPXY_REDIS_MAX_AGE=120000
|
||||
CERC_ETHPXY_GETH_WS_URL='ws://mainnet-eth-geth-1:8546'
|
||||
CERC_ETHPXY_GETH_HTTP_URL='http://mainnet-eth-geth-1:8545'
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
||||
POSTGRES_DB=keycloak
|
||||
POSTGRES_USER=keycloak
|
||||
POSTGRES_PASSWORD=keycloak
|
||||
KC_DB=postgres
|
||||
KC_DB_URL_HOST=keycloak-db
|
||||
KC_DB_URL_DATABASE=${POSTGRES_DB}
|
||||
KC_DB_USERNAME=${POSTGRES_USER}
|
||||
KC_DB_PASSWORD=${POSTGRES_PASSWORD}
|
||||
KC_DB_SCHEMA=public
|
||||
KC_HOSTNAME=localhost
|
||||
KC_HTTP_ENABLED="true"
|
||||
KC_HTTP_RELATIVE_PATH="/auth"
|
||||
KC_HOSTNAME_STRICT_HTTPS="false"
|
||||
KEYCLOAK_ADMIN=admin
|
||||
KEYCLOAK_ADMIN_PASSWORD=admin
|
||||
X_API_CHECK_REALM=cerc
|
||||
X_API_CHECK_CLIENT_ID="%user_id%"
|
||||
|
||||
|
||||
# keycloak-reg-api
|
||||
CERC_KCUSERREG_LISTEN_PORT=9292
|
||||
CERC_KCUSERREG_LISTEN_ADDR='0.0.0.0'
|
||||
CERC_KCUSERREG_API_URL='http://keycloak:8080/auth'
|
||||
CERC_KCUSERREG_REG_USER="${KEYCLOAK_ADMIN}"
|
||||
CERC_KCUSERREG_REG_PW="${KEYCLOAK_ADMIN_PASSWORD}"
|
||||
CERC_KCUSERREG_REG_CLIENT_ID='admin-cli'
|
||||
CERC_KCUSERREG_TARGET_REALM=cerc
|
||||
CERC_KCUSERREG_TARGET_GROUPS=eth
|
||||
CERC_KCUSERREG_CREATE_ENABLED=true
|
||||
@@ -0,0 +1,107 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name my.example.com;
|
||||
|
||||
# See: https://github.com/acmesh-official/acme.sh/wiki/Stateless-Mode
|
||||
# and https://datatracker.ietf.org/doc/html/rfc8555
|
||||
location ~ ^/\.well-known/acme-challenge/([-_a-zA-Z0-9]+)$ {
|
||||
default_type text/plain;
|
||||
return 200 "$1.MY_ACCOUNT_THUMBPRINT_GOES_HERE";
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
|
||||
upstream geth-pool {
|
||||
keepalive 100;
|
||||
hash $user_id consistent;
|
||||
server server-a:8545;
|
||||
server server-b:8545;
|
||||
server server-c:8545;
|
||||
}
|
||||
|
||||
# self-reg happens on one server for clarity
|
||||
upstream reg-ui-pool {
|
||||
keepalive 100;
|
||||
server server-a:8085;
|
||||
}
|
||||
|
||||
upstream reg-api-pool {
|
||||
keepalive 100;
|
||||
server server-a:8086;
|
||||
}
|
||||
|
||||
# auth uses server-a if available
|
||||
upstream auth-pool {
|
||||
keepalive 100;
|
||||
server server-a:8080;
|
||||
server server-b:8080 backup;
|
||||
server server-c:8080 backup;
|
||||
}
|
||||
|
||||
log_format upstreamlog '[$time_local] $remote_addr $user_id - $server_name $host to: $upstream_addr: $request $status upstream_response_time $upstream_response_time msec $msec request_time $request_time';
|
||||
proxy_cache_path /var/cache/nginx/auth_cache levels=1 keys_zone=auth_cache:1m max_size=5m inactive=60m;
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name my.example.com;
|
||||
access_log /var/log/nginx/my.example.com-access.log upstreamlog;
|
||||
error_log /var/log/nginx/my.example.com-error.log;
|
||||
|
||||
ssl_certificate /etc/nginx/ssl/my.example.com/cert.pem;
|
||||
ssl_certificate_key /etc/nginx/ssl/my.example.com/key.pem;
|
||||
|
||||
error_page 500 502 503 504 /50x.html;
|
||||
location = /50x.html {
|
||||
root /usr/share/nginx/html;
|
||||
}
|
||||
|
||||
#rewrite ^/?$ /newuser/;
|
||||
rewrite ^/?$ https://www.example.com/;
|
||||
|
||||
|
||||
# geth-pool ETH API
|
||||
location ~ ^/v1/eth/?([^/]*)$ {
|
||||
set $apiKey $1;
|
||||
if ($apiKey = '') {
|
||||
set $apiKey $http_X_API_KEY;
|
||||
}
|
||||
auth_request /auth;
|
||||
auth_request_set $user_id $sent_http_x_user_id;
|
||||
rewrite /.*$ / break;
|
||||
|
||||
client_max_body_size 3m;
|
||||
client_body_buffer_size 3m;
|
||||
proxy_buffer_size 32k;
|
||||
proxy_buffers 16 32k;
|
||||
proxy_busy_buffers_size 96k;
|
||||
|
||||
proxy_pass http://geth-pool;
|
||||
proxy_set_header X-Original-Remote-Addr $remote_addr;
|
||||
proxy_set_header X-User-Id $user_id;
|
||||
}
|
||||
|
||||
# keycloak
|
||||
location = /auth {
|
||||
internal;
|
||||
proxy_cache auth_cache;
|
||||
proxy_cache_key "$apiKey";
|
||||
proxy_cache_valid 200 300s;
|
||||
proxy_cache_valid 401 30s;
|
||||
proxy_pass http://auth-pool/auth/realms/cerc/check?memberOf=eth&apiKey=$apiKey;
|
||||
proxy_pass_request_body off;
|
||||
proxy_set_header Content-Length "";
|
||||
proxy_set_header X-Original-URI $request_uri;
|
||||
proxy_set_header X-Original-Remote-Addr $remote_addr;
|
||||
proxy_set_header X-Original-Host $host;
|
||||
}
|
||||
|
||||
location /newuser/ {
|
||||
proxy_pass http://reg-ui-pool/;
|
||||
}
|
||||
|
||||
location /user-api/ {
|
||||
proxy_pass http://reg-api-pool/;
|
||||
}
|
||||
}
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
import psycopg
|
||||
import random
|
||||
|
||||
from subprocess import Popen
|
||||
from fabric import Connection
|
||||
|
||||
|
||||
def dump_src_db_to_file(db_host, db_port, db_user, db_password, db_name, file_name):
|
||||
command = f"pg_dump -h {db_host} -p {db_port} -U {db_user} -d {db_name} -c --inserts -f {file_name}"
|
||||
my_env = os.environ.copy()
|
||||
my_env["PGPASSWORD"] = db_password
|
||||
print(f"Exporting from {db_host}:{db_port}/{db_name} to {file_name}... ", end="")
|
||||
ret = Popen(command, shell=True, env=my_env).wait()
|
||||
print("DONE")
|
||||
return ret
|
||||
|
||||
|
||||
def establish_ssh_tunnel(ssh_host, ssh_port, ssh_user, db_host, db_port):
|
||||
local_port = random.randint(11000, 12000)
|
||||
conn = Connection(host=ssh_host, port=ssh_port, user=ssh_user)
|
||||
fw = conn.forward_local(
|
||||
local_port=local_port, remote_port=db_port, remote_host=db_host
|
||||
)
|
||||
return conn, fw, local_port
|
||||
|
||||
|
||||
def load_db_from_file(db_host, db_port, db_user, db_password, db_name, file_name):
|
||||
connstr = "host=%s port=%s user=%s password=%s sslmode=disable dbname=%s" % (
|
||||
db_host,
|
||||
db_port,
|
||||
db_user,
|
||||
db_password,
|
||||
db_name,
|
||||
)
|
||||
with psycopg.connect(connstr) as conn:
|
||||
with conn.cursor() as cur:
|
||||
print(
|
||||
f"Importing from {file_name} to {db_host}:{db_port}/{db_name}... ",
|
||||
end="",
|
||||
)
|
||||
cur.execute(open(file_name, "rt").read())
|
||||
print("DONE")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument("--src-dbhost", help="DB hostname", default="localhost")
|
||||
parser.add_argument("--src-dbport", help="DB port", default=5432, type=int)
|
||||
parser.add_argument("--src-dbuser", help="DB username", default="keycloak")
|
||||
parser.add_argument("--src-dbpw", help="DB password", required=True)
|
||||
parser.add_argument("--src-dbname", help="dbname", default="keycloak")
|
||||
|
||||
parser.add_argument(
|
||||
"--dst-file", help="Destination filename", default="keycloak-mirror.sql"
|
||||
)
|
||||
|
||||
parser.add_argument("--live-import", help="run the import", action="store_true")
|
||||
|
||||
parser.add_argument("--dst-dbhost", help="DB hostname", default="localhost")
|
||||
parser.add_argument("--dst-dbport", help="DB port", default=5432, type=int)
|
||||
parser.add_argument("--dst-dbuser", help="DB username", default="keycloak")
|
||||
parser.add_argument("--dst-dbpw", help="DB password")
|
||||
parser.add_argument("--dst-dbname", help="dbname", default="keycloak")
|
||||
|
||||
parser.add_argument("--ssh-host", help="SSH hostname")
|
||||
parser.add_argument("--ssh-port", help="SSH port", default=22, type=int)
|
||||
parser.add_argument("--ssh-user", help="SSH user")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.live_import and not args.dst_dbpw:
|
||||
print("--dst-dbpw is required if importing", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
remove_sql_file = False
|
||||
if args.dst_dbhost and not args.dst_file:
|
||||
remove_sql_file = True
|
||||
|
||||
dst_file = args.dst_file
|
||||
if not dst_file:
|
||||
dst_file = "keycloak-mirror.sql"
|
||||
|
||||
dump_src_db_to_file(
|
||||
args.src_dbhost,
|
||||
args.src_dbport,
|
||||
args.src_dbuser,
|
||||
args.src_dbpw,
|
||||
args.src_dbname,
|
||||
dst_file,
|
||||
)
|
||||
|
||||
if args.live_import:
|
||||
try:
|
||||
if args.ssh_host:
|
||||
dst_dbport = random.randint(11000, 12000)
|
||||
print(
|
||||
f"Establishing SSH tunnel from 127.0.0.1:{dst_dbport} to "
|
||||
"{args.ssh_host}->{args.dst_dbhost}:{args.dst_dbport}... ",
|
||||
end="",
|
||||
)
|
||||
with Connection(
|
||||
host=args.ssh_host, port=args.ssh_port, user=args.ssh_user
|
||||
).forward_local(
|
||||
local_port=dst_dbport,
|
||||
remote_port=args.dst_dbport,
|
||||
remote_host=args.dst_dbhost,
|
||||
):
|
||||
print("DONE")
|
||||
|
||||
load_db_from_file(
|
||||
args.dst_dbhost,
|
||||
args.dst_dbport,
|
||||
args.dst_dbuser,
|
||||
args.dst_dbpw,
|
||||
args.dst_dbname,
|
||||
dst_file,
|
||||
)
|
||||
else:
|
||||
load_db_from_file(
|
||||
args.dst_dbhost,
|
||||
args.dst_dbport,
|
||||
args.dst_dbuser,
|
||||
args.dst_dbpw,
|
||||
args.dst_dbname,
|
||||
dst_file,
|
||||
)
|
||||
|
||||
finally:
|
||||
if args.live_import:
|
||||
print(f"Removing {dst_file}... ", end="")
|
||||
os.remove(dst_file)
|
||||
print("DONE")
|
||||
@@ -0,0 +1,3 @@
|
||||
fabric
|
||||
psycopg~=3.1.8
|
||||
psycopg_binary
|
||||
@@ -0,0 +1,4 @@
|
||||
web:
|
||||
path: ''
|
||||
api:
|
||||
url: 'http://keycloak-reg-api:9292'
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user