forked from cerc-io/stack-orchestrator
Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7aa2e944f | ||
|
|
7f0452cd73 | ||
|
|
d2442bcc9b | ||
|
|
44faf36837 | ||
|
|
18b006468d | ||
|
|
5308ab1e4e | ||
|
|
cd50832038 | ||
|
|
aeddc82ebc | ||
|
|
17e860d6e4 |
@@ -43,19 +43,3 @@ jobs:
|
|||||||
run: ./scripts/build_shiv_package.sh
|
run: ./scripts/build_shiv_package.sh
|
||||||
- name: "Run fixturenet-eth tests"
|
- name: "Run fixturenet-eth tests"
|
||||||
run: ./tests/fixturenet-eth-plugeth/run-test.sh
|
run: ./tests/fixturenet-eth-plugeth/run-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -47,19 +47,3 @@ jobs:
|
|||||||
sleep 5
|
sleep 5
|
||||||
- name: "Run fixturenet-eth tests"
|
- name: "Run fixturenet-eth tests"
|
||||||
run: ./tests/fixturenet-eth-plugeth/run-test.sh
|
run: ./tests/fixturenet-eth-plugeth/run-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -45,19 +45,4 @@ jobs:
|
|||||||
sleep 5
|
sleep 5
|
||||||
- name: "Run fixturenet-eth tests"
|
- name: "Run fixturenet-eth tests"
|
||||||
run: ./tests/fixturenet-eth/run-test.sh
|
run: ./tests/fixturenet-eth/run-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: "Run Laconicd fixturenet and Laconic CLI tests"
|
name: "Run an Laconicd fixturenet test"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Update'
|
- name: 'Update'
|
||||||
@@ -46,21 +46,3 @@ jobs:
|
|||||||
run: ./scripts/build_shiv_package.sh
|
run: ./scripts/build_shiv_package.sh
|
||||||
- name: "Run fixturenet-laconicd tests"
|
- name: "Run fixturenet-laconicd tests"
|
||||||
run: ./tests/fixturenet-laconicd/run-test.sh
|
run: ./tests/fixturenet-laconicd/run-test.sh
|
||||||
- name: "Run laconic CLI tests"
|
|
||||||
run: ./tests/fixturenet-laconicd/run-cli-test.sh
|
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -19,19 +19,3 @@ jobs:
|
|||||||
python-version: '3.8'
|
python-version: '3.8'
|
||||||
- name : "Run flake8"
|
- name : "Run flake8"
|
||||||
uses: py-actions/flake8@v2
|
uses: py-actions/flake8@v2
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -54,19 +54,3 @@ jobs:
|
|||||||
# Hack using endsWith to workaround Gitea sometimes sending "publish-test" vs "refs/heads/publish-test"
|
# Hack using endsWith to workaround Gitea sometimes sending "publish-test" vs "refs/heads/publish-test"
|
||||||
draft: ${{ endsWith('publish-test', github.ref ) }}
|
draft: ${{ endsWith('publish-test', github.ref ) }}
|
||||||
files: ./laconic-so
|
files: ./laconic-so
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -51,19 +51,4 @@ jobs:
|
|||||||
source /opt/bash-utils/cgroup-helper.sh
|
source /opt/bash-utils/cgroup-helper.sh
|
||||||
join_cgroup
|
join_cgroup
|
||||||
./tests/container-registry/run-test.sh
|
./tests/container-registry/run-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -49,19 +49,4 @@ jobs:
|
|||||||
source /opt/bash-utils/cgroup-helper.sh
|
source /opt/bash-utils/cgroup-helper.sh
|
||||||
join_cgroup
|
join_cgroup
|
||||||
./tests/database/run-test.sh
|
./tests/database/run-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -47,19 +47,3 @@ jobs:
|
|||||||
sleep 5
|
sleep 5
|
||||||
- name: "Run deploy tests"
|
- name: "Run deploy tests"
|
||||||
run: ./tests/deploy/run-deploy-test.sh
|
run: ./tests/deploy/run-deploy-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -1,58 +0,0 @@
|
|||||||
name: External Stack Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: '*'
|
|
||||||
paths:
|
|
||||||
- '!**'
|
|
||||||
- '.gitea/workflows/triggers/test-external-stack'
|
|
||||||
- '.gitea/workflows/test-external-stack.yml'
|
|
||||||
- 'tests/external-stack/run-test.sh'
|
|
||||||
schedule: # Note: coordinate with other tests to not overload runners at the same time of day
|
|
||||||
- cron: '8 19 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
name: "Run external stack test suite"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: "Clone project repository"
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
# At present the stock setup-python action fails on Linux/aarch64
|
|
||||||
# Conditional steps below workaroud this by using deadsnakes for that case only
|
|
||||||
- name: "Install Python for ARM on Linux"
|
|
||||||
if: ${{ runner.arch == 'arm64' && runner.os == 'Linux' }}
|
|
||||||
uses: deadsnakes/action@v3.0.1
|
|
||||||
with:
|
|
||||||
python-version: '3.8'
|
|
||||||
- name: "Install Python cases other than ARM on Linux"
|
|
||||||
if: ${{ ! (runner.arch == 'arm64' && runner.os == 'Linux') }}
|
|
||||||
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 external stack tests"
|
|
||||||
run: ./tests/external-stack/run-test.sh
|
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
@@ -51,19 +51,4 @@ jobs:
|
|||||||
source /opt/bash-utils/cgroup-helper.sh
|
source /opt/bash-utils/cgroup-helper.sh
|
||||||
join_cgroup
|
join_cgroup
|
||||||
./tests/k8s-deploy/run-deploy-test.sh
|
./tests/k8s-deploy/run-deploy-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -49,19 +49,3 @@ jobs:
|
|||||||
sleep 5
|
sleep 5
|
||||||
- name: "Run webapp tests"
|
- name: "Run webapp tests"
|
||||||
run: ./tests/webapp-test/run-webapp-test.sh
|
run: ./tests/webapp-test/run-webapp-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -47,19 +47,5 @@ jobs:
|
|||||||
sleep 5
|
sleep 5
|
||||||
- name: "Run smoke tests"
|
- name: "Run smoke tests"
|
||||||
run: ./tests/smoke-test/run-smoke-test.sh
|
run: ./tests/smoke-test/run-smoke-test.sh
|
||||||
- name: Notify Vulcanize Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.VULCANIZE_SLACK_CI_ALERTS }}
|
|
||||||
- name: Notify DeepStack Slack on CI failure
|
|
||||||
if: ${{ always() && github.ref_name == 'main' }}
|
|
||||||
uses: ravsamhq/notify-slack-action@v2
|
|
||||||
with:
|
|
||||||
status: ${{ job.status }}
|
|
||||||
notify_when: 'failure'
|
|
||||||
env:
|
|
||||||
SLACK_WEBHOOK_URL: ${{ secrets.DEEPSTACK_SLACK_CI_ALERTS }}
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
Change this file to trigger running the fixturenet-laconicd-test CI job
|
Change this file to trigger running the fixturenet-laconicd-test CI job
|
||||||
Trigger
|
Trigger
|
||||||
Trigger
|
Trigger
|
||||||
Trigger
|
|
||||||
Trigger
|
|
||||||
Trigger
|
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
Change this file to trigger running the external-stack CI job
|
|
||||||
trigger
|
|
||||||
@@ -71,7 +71,7 @@ def process_container(build_context: BuildContext) -> bool:
|
|||||||
|
|
||||||
# Check if this is in an external stack
|
# Check if this is in an external stack
|
||||||
if stack_is_external(build_context.stack):
|
if stack_is_external(build_context.stack):
|
||||||
container_parent_dir = Path(build_context.stack).parent.parent.joinpath("container-build")
|
container_parent_dir = Path(build_context.stack).joinpath("container-build")
|
||||||
temp_build_dir = container_parent_dir.joinpath(build_context.container.replace("/", "-"))
|
temp_build_dir = container_parent_dir.joinpath(build_context.container.replace("/", "-"))
|
||||||
temp_build_script_filename = temp_build_dir.joinpath("build.sh")
|
temp_build_script_filename = temp_build_dir.joinpath("build.sh")
|
||||||
# Now check if the container exists in the external stack.
|
# Now check if the container exists in the external stack.
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
|
|
||||||
# From: https://raw.githubusercontent.com/blast-io/deployment/master/docker-compose.yml
|
|
||||||
services:
|
|
||||||
# generate jwt.txt if it's absent
|
|
||||||
generate-jwt:
|
|
||||||
image: blastio/openssl
|
|
||||||
volumes:
|
|
||||||
- blast-data:/blast:rw
|
|
||||||
command: >
|
|
||||||
sh -c "[ ! -f /blast/jwt.txt ] && openssl rand -hex 32 | tr -d '\n' > /blast/jwt.txt || exit 0"
|
|
||||||
# initialise geth db
|
|
||||||
geth-init:
|
|
||||||
image: blastio/blast-geth:${NETWORK:-testnet-sepolia}
|
|
||||||
volumes:
|
|
||||||
- blast-data:/blast:rw
|
|
||||||
- ../config/fixturenet-blast/genesis.json:/blast/genesis.json
|
|
||||||
entrypoint: /bin/sh
|
|
||||||
command: >
|
|
||||||
-c "[ ! -d /blast/${GETH_DATA_DIR:-blast-geth-data}/geth ] && /usr/local/bin/geth init --datadir=/blast/${GETH_DATA_DIR:-blast-geth-data} /blast/genesis.json || exit 0"
|
|
||||||
depends_on:
|
|
||||||
generate-jwt:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
env_file:
|
|
||||||
- ../config/fixturenet-blast/${NETWORK:-fixturenet}.config
|
|
||||||
blast-geth:
|
|
||||||
image: blastio/blast-geth:${NETWORK:-testnet-sepolia}
|
|
||||||
volumes:
|
|
||||||
- blast-data:/blast
|
|
||||||
ports:
|
|
||||||
- "9545"
|
|
||||||
- "9546"
|
|
||||||
command: >
|
|
||||||
--datadir=/blast/${GETH_DATA_DIR:-blast-geth-data}
|
|
||||||
--http
|
|
||||||
--http.corsdomain="*"
|
|
||||||
--http.vhosts="*"
|
|
||||||
--http.addr=0.0.0.0
|
|
||||||
--http.port=9545
|
|
||||||
--http.api=web3,debug,eth,txpool,net,engine
|
|
||||||
--ws
|
|
||||||
--ws.addr=0.0.0.0
|
|
||||||
--ws.port=9546
|
|
||||||
--ws.origins="*"
|
|
||||||
--ws.api=debug,eth,txpool,net,engine
|
|
||||||
--authrpc.addr="0.0.0.0"
|
|
||||||
--authrpc.port="8551"
|
|
||||||
--authrpc.vhosts="*"
|
|
||||||
--authrpc.jwtsecret=/blast/jwt.txt
|
|
||||||
--syncmode=full
|
|
||||||
--gcmode=archive
|
|
||||||
--nodiscover
|
|
||||||
--maxpeers=0
|
|
||||||
--rollup.disabletxpoolgossip=true
|
|
||||||
env_file:
|
|
||||||
- ../config/fixturenet-blast/${NETWORK:-fixturenet}.config
|
|
||||||
depends_on:
|
|
||||||
geth-init:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
op-node:
|
|
||||||
image: blastio/blast-optimism:${NETWORK:-testnet-sepolia}
|
|
||||||
volumes:
|
|
||||||
- blast-data:/blast
|
|
||||||
- ../config/fixturenet-blast/rollup.json:/blast/rollup.json
|
|
||||||
ports:
|
|
||||||
- "9003"
|
|
||||||
command: >
|
|
||||||
op-node
|
|
||||||
--l1="${CERC_L1_RPC}"
|
|
||||||
--l1.rpckind="any"
|
|
||||||
--l1.trustrpc=true
|
|
||||||
--l2="http://blast-geth:8551"
|
|
||||||
--l2.jwt-secret=/blast/jwt.txt
|
|
||||||
--rollup.config="/blast/rollup.json"
|
|
||||||
depends_on:
|
|
||||||
- blast-geth
|
|
||||||
env_file:
|
|
||||||
- ../config/fixturenet-blast/${NETWORK:-fixturenet}.config
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
blast-data:
|
|
||||||
@@ -3,9 +3,6 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
image: cerc/laconicd:local
|
image: cerc/laconicd:local
|
||||||
command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||||
environment:
|
|
||||||
TEST_AUCTION_ENABLED: ${TEST_AUCTION_ENABLED}
|
|
||||||
TEST_REGISTRY_EXPIRY: ${TEST_REGISTRY_EXPIRY}
|
|
||||||
volumes:
|
volumes:
|
||||||
# The cosmos-sdk node's database directory:
|
# The cosmos-sdk node's database directory:
|
||||||
- laconicd-data:/root/.laconicd
|
- laconicd-data:/root/.laconicd
|
||||||
@@ -28,7 +25,6 @@ services:
|
|||||||
image: cerc/laconic-registry-cli:local
|
image: cerc/laconic-registry-cli:local
|
||||||
volumes:
|
volumes:
|
||||||
- ../config/fixturenet-laconicd/registry-cli-config-template.yml:/registry-cli-config-template.yml
|
- ../config/fixturenet-laconicd/registry-cli-config-template.yml:/registry-cli-config-template.yml
|
||||||
- ${BASE_DIR:-~/cerc}/laconic-registry-cli:/laconic-registry-cli
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
laconicd-data:
|
laconicd-data:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ services:
|
|||||||
hostname: lotus-miner
|
hostname: lotus-miner
|
||||||
env_file:
|
env_file:
|
||||||
- ../config/fixturenet-lotus/lotus-env.env
|
- ../config/fixturenet-lotus/lotus-env.env
|
||||||
image: cerc/lotus-fixturenet:local
|
image: cerc/lotus:local
|
||||||
volumes:
|
volumes:
|
||||||
- ../config/fixturenet-lotus/setup-miner.sh:/docker-entrypoint-scripts.d/setup-miner.sh
|
- ../config/fixturenet-lotus/setup-miner.sh:/docker-entrypoint-scripts.d/setup-miner.sh
|
||||||
- ../config/fixturenet-lotus/fund-account.sh:/fund-account.sh
|
- ../config/fixturenet-lotus/fund-account.sh:/fund-account.sh
|
||||||
@@ -26,7 +26,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
# Use 0.0.0.0 so that calls can be made from outside the container
|
# 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
|
- LOTUS_API_LISTENADDRESS=/ip4/0.0.0.0/tcp/1234/http
|
||||||
image: cerc/lotus-fixturenet:local
|
image: cerc/lotus:local
|
||||||
volumes:
|
volumes:
|
||||||
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
||||||
- lotus_node_1_params:/var/tmp/filecoin-proof-parameters
|
- lotus_node_1_params:/var/tmp/filecoin-proof-parameters
|
||||||
@@ -42,10 +42,10 @@ services:
|
|||||||
- lotus-miner
|
- lotus-miner
|
||||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
||||||
ports:
|
ports:
|
||||||
- "1235"
|
- "1234"
|
||||||
- "2346"
|
- "2345"
|
||||||
- "3457"
|
- "3456"
|
||||||
- "1778"
|
- "1777"
|
||||||
|
|
||||||
lotus-node-2:
|
lotus-node-2:
|
||||||
hostname: lotus-node-2
|
hostname: lotus-node-2
|
||||||
@@ -54,7 +54,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
# Use 0.0.0.0 so that calls can be made from outside the container
|
# 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
|
- LOTUS_API_LISTENADDRESS=/ip4/0.0.0.0/tcp/1234/http
|
||||||
image: cerc/lotus-fixturenet:local
|
image: cerc/lotus:local
|
||||||
volumes:
|
volumes:
|
||||||
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
||||||
- lotus_node_2_params:/var/tmp/filecoin-proof-parameters
|
- lotus_node_2_params:/var/tmp/filecoin-proof-parameters
|
||||||
@@ -70,10 +70,10 @@ services:
|
|||||||
- lotus-miner
|
- lotus-miner
|
||||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
||||||
ports:
|
ports:
|
||||||
- "1236"
|
- "1234"
|
||||||
- "2347"
|
- "2345"
|
||||||
- "3458"
|
- "3456"
|
||||||
- "1779"
|
- "1777"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
lotus_miner_params:
|
lotus_miner_params:
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ services:
|
|||||||
- ../config/fixturenet-eth/fixturenet-eth.env
|
- ../config/fixturenet-eth/fixturenet-eth.env
|
||||||
environment:
|
environment:
|
||||||
RUN_BOOTNODE: "true"
|
RUN_BOOTNODE: "true"
|
||||||
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
|
|
||||||
image: cerc/fixturenet-plugeth-plugeth:local
|
image: cerc/fixturenet-plugeth-plugeth:local
|
||||||
volumes:
|
volumes:
|
||||||
- fixturenet_plugeth_bootnode_geth_data:/root/ethdata
|
- fixturenet_plugeth_bootnode_geth_data:/root/ethdata
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ services:
|
|||||||
- "80"
|
- "80"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "nc", "-v", "localhost", "80"]
|
test: ["CMD", "nc", "-v", "localhost", "80"]
|
||||||
interval: 20s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 15
|
retries: 30
|
||||||
start_period: 10s
|
start_period: 10s
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ version: "3.7"
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
grafana:
|
grafana:
|
||||||
image: grafana/grafana:10.2.3
|
image: grafana/grafana:10.2.2
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
GF_SERVER_ROOT_URL: ${GF_SERVER_ROOT_URL}
|
GF_SERVER_ROOT_URL: ${GF_SERVER_ROOT_URL}
|
||||||
|
|||||||
@@ -16,12 +16,8 @@ services:
|
|||||||
postgres_pass: password
|
postgres_pass: password
|
||||||
postgres_db: graph-node
|
postgres_db: graph-node
|
||||||
ethereum: ${ETH_NETWORKS:-lotus-fixturenet:http://lotus-node-1:1234/rpc/v1}
|
ethereum: ${ETH_NETWORKS:-lotus-fixturenet:http://lotus-node-1:1234/rpc/v1}
|
||||||
# Env varaibles reference: https://git.vdb.to/cerc-io/graph-node/src/branch/master/docs/environment-variables.md
|
|
||||||
GRAPH_LOG: debug
|
GRAPH_LOG: debug
|
||||||
ETHEREUM_REORG_THRESHOLD: 3
|
ETHEREUM_REORG_THRESHOLD: 3
|
||||||
GRAPH_ETHEREUM_JSON_RPC_TIMEOUT: ${GRAPH_ETHEREUM_JSON_RPC_TIMEOUT:-180}
|
|
||||||
GRAPH_ETHEREUM_REQUEST_RETRIES: ${GRAPH_ETHEREUM_REQUEST_RETRIES:-10}
|
|
||||||
GRAPH_ETHEREUM_MAX_BLOCK_RANGE_SIZE: ${GRAPH_ETHEREUM_MAX_BLOCK_RANGE_SIZE:-2000}
|
|
||||||
entrypoint: ["bash", "-c"]
|
entrypoint: ["bash", "-c"]
|
||||||
# Wait for ETH RPC endpoint to be up when running with fixturenet-lotus
|
# Wait for ETH RPC endpoint to be up when running with fixturenet-lotus
|
||||||
command: |
|
command: |
|
||||||
|
|||||||
@@ -1,83 +0,0 @@
|
|||||||
|
|
||||||
# From: https://raw.githubusercontent.com/blast-io/deployment/master/docker-compose.yml
|
|
||||||
services:
|
|
||||||
# generate jwt.txt if it's absent
|
|
||||||
generate-jwt:
|
|
||||||
image: blastio/openssl
|
|
||||||
volumes:
|
|
||||||
- blast-data:/blast:rw
|
|
||||||
command: >
|
|
||||||
sh -c "[ ! -f /blast/jwt.txt ] && openssl rand -hex 32 | tr -d '\n' > /blast/jwt.txt || exit 0"
|
|
||||||
# initialise geth db
|
|
||||||
geth-init:
|
|
||||||
image: blastio/blast-geth:${NETWORK:-mainnet}
|
|
||||||
volumes:
|
|
||||||
- blast-data:/blast:rw
|
|
||||||
entrypoint: /bin/sh
|
|
||||||
command: >
|
|
||||||
-c "[ ! -d /blast/${GETH_DATA_DIR:-blast-geth-data}/geth ] && /usr/local/bin/geth init --datadir=/blast/${GETH_DATA_DIR:-blast-geth-data} /blast/genesis.json || exit 0"
|
|
||||||
depends_on:
|
|
||||||
generate-jwt:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
env_file:
|
|
||||||
- ../config/mainnet-blast/${NETWORK:-mainnet}.config
|
|
||||||
blast-geth:
|
|
||||||
image: blastio/blast-geth:${NETWORK:-mainnet}
|
|
||||||
volumes:
|
|
||||||
- blast-data:/blast
|
|
||||||
ports:
|
|
||||||
- "9545"
|
|
||||||
- "9546"
|
|
||||||
- "6060"
|
|
||||||
command: >
|
|
||||||
--datadir=/blast/${GETH_DATA_DIR:-blast-geth-data}
|
|
||||||
--http
|
|
||||||
--http.corsdomain="*"
|
|
||||||
--http.vhosts="*"
|
|
||||||
--http.addr=0.0.0.0
|
|
||||||
--http.port=9545
|
|
||||||
--http.api=web3,debug,eth,txpool,net,engine
|
|
||||||
--ws
|
|
||||||
--ws.addr=0.0.0.0
|
|
||||||
--ws.port=9546
|
|
||||||
--ws.origins="*"
|
|
||||||
--ws.api=debug,eth,txpool,net,engine
|
|
||||||
--authrpc.addr="0.0.0.0"
|
|
||||||
--authrpc.port="8551"
|
|
||||||
--authrpc.vhosts="*"
|
|
||||||
--authrpc.jwtsecret=/blast/jwt.txt
|
|
||||||
--syncmode=full
|
|
||||||
--metrics
|
|
||||||
--metrics.addr=0.0.0.0
|
|
||||||
--gcmode=archive
|
|
||||||
--nodiscover
|
|
||||||
--maxpeers=0
|
|
||||||
--rollup.disabletxpoolgossip=true
|
|
||||||
env_file:
|
|
||||||
- ../config/mainnet-blast/${NETWORK:-mainnet}.config
|
|
||||||
depends_on:
|
|
||||||
geth-init:
|
|
||||||
condition: service_completed_successfully
|
|
||||||
op-node:
|
|
||||||
image: blastio/blast-optimism:${NETWORK:-mainnet}
|
|
||||||
volumes:
|
|
||||||
- blast-data:/blast
|
|
||||||
ports:
|
|
||||||
- "9003"
|
|
||||||
- "7300"
|
|
||||||
command: >
|
|
||||||
op-node
|
|
||||||
--l1="https://eth-mainnet-1.vdb.to/"
|
|
||||||
--metrics.enabled
|
|
||||||
--l1.rpckind="any"
|
|
||||||
--l1.trustrpc=true
|
|
||||||
--l2="http://blast-geth:8551"
|
|
||||||
--l2.jwt-secret=/blast/jwt.txt
|
|
||||||
--rollup.config="/blast/rollup.json"
|
|
||||||
depends_on:
|
|
||||||
- blast-geth
|
|
||||||
env_file:
|
|
||||||
- ../config/mainnet-blast/${NETWORK:-mainnet}.config
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
blast-data:
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
volumes:
|
|
||||||
parameters:
|
|
||||||
lotus-repo:
|
|
||||||
lotus_shared:
|
|
||||||
|
|
||||||
services:
|
|
||||||
lotus:
|
|
||||||
environment:
|
|
||||||
- LOTUS_API_LISTENADDRESS=/ip4/0.0.0.0/tcp/1234/http
|
|
||||||
- LOTUS_LIBP2P_LISTENADDRESSES=/ip4/0.0.0.0/tcp/1235,/ip6/::/tcp/1235,/ip4/0.0.0.0/udp/1235/quic-v1,/ip6/::/udp/1235/quic-v1,/ip4/0.0.0.0/udp/1235/quic-v1/webtransport,/ip6/::/udp/1235/quic-v1/webtransport
|
|
||||||
image: cerc/lotus-mainnet:local
|
|
||||||
volumes:
|
|
||||||
- parameters:/var/tmp/filecoin-proof-parameters
|
|
||||||
- lotus-repo:/var/lib/lotus
|
|
||||||
- lotus_shared:/root/.lotus
|
|
||||||
ports:
|
|
||||||
- "1234"
|
|
||||||
- "1235"
|
|
||||||
deploy:
|
|
||||||
restart_policy:
|
|
||||||
condition: on-failure
|
|
||||||
delay: 30s
|
|
||||||
entrypoint: ["sh", "/docker-lotus-entrypoint.sh"]
|
|
||||||
@@ -7,12 +7,12 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- REACT_APP_INFURA_KEY=${CERC_INFURA_KEY}
|
- REACT_APP_INFURA_KEY=${CERC_INFURA_KEY}
|
||||||
- REACT_APP_AWS_API_ENDPOINT=${CERC_UNISWAP_GQL}
|
- REACT_APP_AWS_API_ENDPOINT=${CERC_UNISWAP_GQL}
|
||||||
|
- REACT_APP_UNISWAP_API_URL=${CERC_UNISWAP_API}
|
||||||
command: ["./build-app.sh"]
|
command: ["./build-app.sh"]
|
||||||
volumes:
|
volumes:
|
||||||
- ../config/uniswap-interface/build-app.sh:/app/build-app.sh
|
- ../config/uniswap-interface/build-app.sh:/app/build-app.sh
|
||||||
- urbit_app_builds:/app-builds
|
- urbit_app_builds:/app-builds
|
||||||
- ../config/uniswap-interface/urbit-files/mar:/app/mar
|
- ../config/uniswap-interface/urbit-files:/app/urbit-files
|
||||||
- ../config/uniswap-interface/urbit-files/desk.docket-0:/app/desk.docket-0
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
urbit_app_builds:
|
urbit_app_builds:
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
version: "3.2"
|
||||||
|
|
||||||
|
# This is a short-lived container. It runs the Vega build and then copies the output to the
|
||||||
|
# `urbit_app_builds` volume.
|
||||||
|
services:
|
||||||
|
vega-interface:
|
||||||
|
image: cerc/vega-interface:local
|
||||||
|
restart: on-failure
|
||||||
|
# environment:
|
||||||
|
# - REACT_APP_INFURA_KEY=${CERC_INFURA_KEY}
|
||||||
|
# - REACT_APP_AWS_API_ENDPOINT=${CERC_UNISWAP_GQL}
|
||||||
|
entrypoint: ["./build-app.sh"]
|
||||||
|
volumes:
|
||||||
|
- ../config/vega-interface/urbit-files:/app/urbit-files
|
||||||
|
- ../config/vega-interface/build-app.sh:/app/build-app.sh
|
||||||
|
- urbit_app_builds:/app-builds
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
urbit_app_builds:
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
GETH_ROLLUP_SEQUENCERHTTP=https://sequencer.s2.testblast.io
|
|
||||||
OP_NODE_P2P_BOOTNODES=enr:-J-4QM3GLUFfKMSJQuP1UvuKQe8DyovE7Eaiit0l6By4zjTodkR4V8NWXJxNmlg8t8rP-Q-wp3jVmeAOml8cjMj__ROGAYznzb_HgmlkgnY0gmlwhA-cZ_eHb3BzdGFja4X947FQAIlzZWNwMjU2azGhAiuDqvB-AsVSRmnnWr6OHfjgY8YfNclFy9p02flKzXnOg3RjcIJ2YYN1ZHCCdmE,enr:-J-4QDCVpByqQ8nFqCS9aHicqwUfXgzFDslvpEyYz19lvkHLIdtcIGp2d4q5dxHdjRNTO6HXCsnIKxUeuZSPcEbyVQCGAYznzz0RgmlkgnY0gmlwhANiQfuHb3BzdGFja4X947FQAIlzZWNwMjU2azGhAy3AtF2Jh_aPdOohg506Hjmtx-fQ1AKmu71C7PfkWAw9g3RjcIJ2YYN1ZHCCdmE
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"chainId": 608943043,
|
|
||||||
"homesteadBlock": 0,
|
|
||||||
"eip150Block": 0,
|
|
||||||
"eip155Block": 0,
|
|
||||||
"eip158Block": 0,
|
|
||||||
"byzantiumBlock": 0,
|
|
||||||
"constantinopleBlock": 0,
|
|
||||||
"petersburgBlock": 0,
|
|
||||||
"istanbulBlock": 0,
|
|
||||||
"muirGlacierBlock": 0,
|
|
||||||
"berlinBlock": 0,
|
|
||||||
"londonBlock": 0,
|
|
||||||
"arrowGlacierBlock": 0,
|
|
||||||
"grayGlacierBlock": 0,
|
|
||||||
"mergeNetsplitBlock": 0,
|
|
||||||
"shanghaiTime": 0,
|
|
||||||
"bedrockBlock": 0,
|
|
||||||
"regolithTime": 0,
|
|
||||||
"canyonTime": 0,
|
|
||||||
"terminalTotalDifficulty": 0,
|
|
||||||
"terminalTotalDifficultyPassed": true,
|
|
||||||
"optimism": {
|
|
||||||
"eip1559Elasticity": 6,
|
|
||||||
"eip1559Denominator": 50,
|
|
||||||
"eip1559DenominatorCanyon": 250
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"alloc": {
|
|
||||||
"0000000000000000000000000000000000000000": {
|
|
||||||
"balance": "0x1"
|
|
||||||
},
|
|
||||||
"4200000000000000000000000000000000000000": {
|
|
||||||
"code": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100ae5780638f283970146100db578063f851a440146100fb5761005d565b3661005d5761005b610110565b005b61005b610110565b34801561007157600080fd5b5061005b610080366004610521565b6101c8565b61009861009336600461053c565b61020e565b6040516100a591906105bf565b60405180910390f35b3480156100ba57600080fd5b506100c361033e565b6040516001600160a01b0390911681526020016100a5565b3480156100e757600080fd5b5061005b6100f6366004610521565b6103a9565b34801561010757600080fd5b506100c36103e4565b600061013a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90506001600160a01b0381166101a55760405162461bcd60e51b815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e697469616044820152641b1a5e995960da1b60648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e806101c2573d6000fd5b503d6000f35b600080516020610625833981519152546001600160a01b0316336001600160a01b031614806101f5575033155b156102065761020381610432565b50565b610203610110565b60606102266000805160206106258339815191525490565b6001600160a01b0316336001600160a01b03161480610243575033155b1561032f5761025184610432565b600080856001600160a01b0316858560405161026e929190610614565b600060405180830381855af49150503d80600081146102a9576040519150601f19603f3d011682016040523d82523d6000602084013e6102ae565b606091505b5091509150816103265760405162461bcd60e51b815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c656400000000000000606482015260840161019c565b91506103379050565b610337610110565b9392505050565b60006103566000805160206106258339815191525490565b6001600160a01b0316336001600160a01b03161480610373575033155b1561039e57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6103a6610110565b90565b600080516020610625833981519152546001600160a01b0316336001600160a01b031614806103d6575033155b15610206576102038161048e565b60006103fc6000805160206106258339815191525490565b6001600160a01b0316336001600160a01b03161480610419575033155b1561039e57506000805160206106258339815191525490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006104a66000805160206106258339815191525490565b600080516020610625833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b80356001600160a01b038116811461051c57600080fd5b919050565b60006020828403121561053357600080fd5b61033782610505565b60008060006040848603121561055157600080fd5b61055a84610505565b9250602084013567ffffffffffffffff8082111561057757600080fd5b818601915086601f83011261058b57600080fd5b81358181111561059a57600080fd5b8760208285010111156105ac57600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156105ec578581018301518582016040015282016105d0565b818111156105fe576000604083870101525b50601f01601f1916929092016040019392505050565b818382376000910190815291905056feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a164736f6c634300080f000a",
|
|
||||||
"storage": {
|
|
||||||
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30000",
|
|
||||||
"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x0000000000000000000000004200000000000000000000000000000000000018"
|
|
||||||
},
|
|
||||||
"balance": "0x0",
|
|
||||||
"flags": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nonce": "0x0",
|
|
||||||
"timestamp": "0x659b7460",
|
|
||||||
"extraData": "0x424544524f434b",
|
|
||||||
"gasLimit": "0x1c9c380",
|
|
||||||
"difficulty": "0x0",
|
|
||||||
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"coinbase": "0x4200000000000000000000000000000000000011",
|
|
||||||
"number": "0x0",
|
|
||||||
"gasUsed": "0x0",
|
|
||||||
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"baseFeePerGas": "0x3b9aca00",
|
|
||||||
"excessBlobGas": null,
|
|
||||||
"blobGasUsed": null
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"genesis": {
|
|
||||||
"l1": {
|
|
||||||
"hash": "0x17728cf4d8e0b4f292d2390a869fd7c632d39e72efb00ca3462b4387c6aa2437",
|
|
||||||
"number": 5044255
|
|
||||||
},
|
|
||||||
"l2": {
|
|
||||||
"hash": "0x26a1c0faad7b041f34569a1bb383f00ab74b335883a44bed53e9f41ced5fd906",
|
|
||||||
"number": 0
|
|
||||||
},
|
|
||||||
"l2_time": 1704686688,
|
|
||||||
"system_config": {
|
|
||||||
"batcherAddr": "0xba26fee2fa917443e05e65de8d4350bcd2f59222",
|
|
||||||
"overhead": "0x00000000000000000000000000000000000000000000000000000000000000bc",
|
|
||||||
"scalar": "0x00000000000000000000000000000000000000000000000000000000000a6fe0",
|
|
||||||
"gasLimit": 30000000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"block_time": 2,
|
|
||||||
"max_sequencer_drift": 600,
|
|
||||||
"seq_window_size": 3600,
|
|
||||||
"channel_timeout": 300,
|
|
||||||
"l1_chain_id": 11155111,
|
|
||||||
"l2_chain_id": 608943043,
|
|
||||||
"regolith_time": 0,
|
|
||||||
"canyon_time": 0,
|
|
||||||
"batch_inbox_address": "0x1c3b85a2108784eab6a4bf56cdd6f722e415b331",
|
|
||||||
"deposit_contract_address": "0x2757e4430e694f27b73ec9c02257cab3a498c8c5",
|
|
||||||
"l1_system_config_address": "0x329faf078c364a316e08bf6a17b7eee6ae75a613",
|
|
||||||
"protocol_versions_address": "0x0000000000000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
@@ -22,7 +22,4 @@ CERC_STATEDIFF_DB_LOG_STATEMENTS="${CERC_STATEDIFF_DB_LOG_STATEMENTS:-false}"
|
|||||||
CERC_STATEDIFF_WORKERS=2
|
CERC_STATEDIFF_WORKERS=2
|
||||||
|
|
||||||
CERC_GETH_VMODULE="statediff/*=5,rpc/*=5"
|
CERC_GETH_VMODULE="statediff/*=5,rpc/*=5"
|
||||||
CERC_GETH_VERBOSITY=${CERC_GETH_VERBOSITY:-3}
|
CERC_GETH_VERBOSITY=${CERC_GETH_VERBOSITY:-3}
|
||||||
|
|
||||||
# Used by Lighthouse
|
|
||||||
SECONDS_PER_ETH1_BLOCK=${SECONDS_PER_ETH1_BLOCK:-3}
|
|
||||||
@@ -102,17 +102,6 @@ if [ "$1" == "clean" ] || [ ! -d "$HOME/.laconicd/data/blockstore.db" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Enable telemetry (prometheus metrics: http://localhost:1317/metrics?format=prometheus)
|
|
||||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
||||||
sed -i '' 's/enabled = false/enabled = true/g' $HOME/.laconicd/config/app.toml
|
|
||||||
sed -i '' 's/prometheus-retention-time = 0/prometheus-retention-time = 60/g' $HOME/.laconicd/config/app.toml
|
|
||||||
sed -i '' 's/prometheus = false/prometheus = true/g' $HOME/.laconicd/config/config.toml
|
|
||||||
else
|
|
||||||
sed -i 's/enabled = false/enabled = true/g' $HOME/.laconicd/config/app.toml
|
|
||||||
sed -i 's/prometheus-retention-time = 0/prometheus-retention-time = 60/g' $HOME/.laconicd/config/app.toml
|
|
||||||
sed -i 's/prometheus = false/prometheus = true/g' $HOME/.laconicd/config/config.toml
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Allocate genesis accounts (cosmos formatted addresses)
|
# Allocate genesis accounts (cosmos formatted addresses)
|
||||||
laconicd add-genesis-account $KEY 100000000000000000000000000aphoton --keyring-backend $KEYRING
|
laconicd add-genesis-account $KEY 100000000000000000000000000aphoton --keyring-backend $KEYRING
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -1,32 +0,0 @@
|
|||||||
POSTGRES_DB=keycloak
|
|
||||||
POSTGRES_USER=keycloak
|
|
||||||
POSTGRES_PASSWORD=keycloak
|
|
||||||
# Don't change this unless you also change the healthcheck in docker-compose-mainnet-eth-keycloak.yml
|
|
||||||
PGPORT=35432
|
|
||||||
KC_DB=postgres
|
|
||||||
KC_DB_URL_HOST=keycloak-db
|
|
||||||
KC_DB_URL_PORT=${PGPORT}
|
|
||||||
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
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# Enable startup script debug output.
|
|
||||||
CERC_SCRIPT_DEBUG=false
|
|
||||||
|
|
||||||
# Specify any other lighthouse CLI options.
|
|
||||||
LIGHTHOUSE_OPTS=""
|
|
||||||
|
|
||||||
# Override the advertised public IP (optional)
|
|
||||||
# --enr-address
|
|
||||||
#LIGHTHOUSE_ENR_ADDRESS=""
|
|
||||||
|
|
||||||
# --checkpoint-sync-url
|
|
||||||
LIGHTHOUSE_CHECKPOINT_SYNC_URL="https://beaconstate.ethstaker.cc"
|
|
||||||
|
|
||||||
# --checkpoint-sync-url-timeout
|
|
||||||
LIGHTHOUSE_CHECKPOINT_SYNC_URL_TIMEOUT=300
|
|
||||||
|
|
||||||
# --datadir
|
|
||||||
LIGHTHOUSE_DATADIR=/data
|
|
||||||
|
|
||||||
# --debug-level
|
|
||||||
LIGHTHOUSE_DEBUG_LEVEL=info
|
|
||||||
|
|
||||||
# --http-port
|
|
||||||
LIGHTHOUSE_HTTP_PORT=5052
|
|
||||||
|
|
||||||
# --execution-jwt
|
|
||||||
LIGHTHOUSE_JWTSECRET=/etc/mainnet-eth/jwtsecret
|
|
||||||
|
|
||||||
# --metrics-port
|
|
||||||
LIGHTHOUSE_METRICS_PORT=5054
|
|
||||||
|
|
||||||
# --port --enr-udp-port --enr-tcp-port
|
|
||||||
LIGHTHOUSE_NETWORK_PORT=9000
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
GETH_ROLLUP_SEQUENCERHTTP=https://sequencer.blast.io
|
|
||||||
OP_NODE_P2P_BOOTNODES=enr:-J64QGwHl9uYLfC_cnmxSA6wQH811nkOWJDWjzxqkEUlJoZHWvI66u-BXgVcPCeMUmg0dBpFQAPotFchG67FHJMZ9OSGAY3d6wevgmlkgnY0gmlwhANizeSHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaECg4pk0cskPAyJ7pOmo9E6RqGBwV-Lex4VS9a3MQvu7PWDdGNwgnZhg3VkcIJ2YQ,enr:-J64QDge2jYBQtcNEpRqmKfci5E5BHAhNBjgv4WSdwH1_wPqbueq2bDj38-TSW8asjy5lJj1Xftui6Or8lnaYFCqCI-GAY3d6wf3gmlkgnY0gmlwhCO2D9yHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaEDo4aCTq7pCEN8om9U5n_VyWdambGnQhwHNwKc8o-OicaDdGNwgnZhg3VkcIJ2YQ
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
{
|
|
||||||
"genesis": {
|
|
||||||
"l1": {
|
|
||||||
"hash": "0xfcfb8d586bdae763f1189988789211c69eb893a895e7ba48be3ca6289f0941b7",
|
|
||||||
"number": 19300102
|
|
||||||
},
|
|
||||||
"l2": {
|
|
||||||
"hash": "0xb689b35ef29d0bec5816938e0e52683c7257d2e325420ea69b739a2be4754b89",
|
|
||||||
"number": 0
|
|
||||||
},
|
|
||||||
"l2_time": 1708809815,
|
|
||||||
"system_config": {
|
|
||||||
"batcherAddr": "0x415c8893d514f9bc5211d36eeda4183226b84aa7",
|
|
||||||
"overhead": "0x00000000000000000000000000000000000000000000000000000000000000bc",
|
|
||||||
"scalar": "0x00000000000000000000000000000000000000000000000000000000000a6fe0",
|
|
||||||
"gasLimit": 30000000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"block_time": 2,
|
|
||||||
"max_sequencer_drift": 600,
|
|
||||||
"seq_window_size": 3600,
|
|
||||||
"channel_timeout": 300,
|
|
||||||
"l1_chain_id": 1,
|
|
||||||
"l2_chain_id": 81457,
|
|
||||||
"regolith_time": 0,
|
|
||||||
"canyon_time": 0,
|
|
||||||
"batch_inbox_address": "0xff00000000000000000000000000000000081457",
|
|
||||||
"deposit_contract_address": "0x0ec68c5b10f21effb74f2a5c61dfe6b08c0db6cb",
|
|
||||||
"l1_system_config_address": "0x5531dcff39ec1ec727c4c5d2fc49835368f805a9",
|
|
||||||
"protocol_versions_address": "0x0000000000000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
if [[ "true" == "$CERC_SCRIPT_DEBUG" ]]; then
|
|
||||||
set -x
|
|
||||||
fi
|
|
||||||
|
|
||||||
ENR_OPTS=""
|
|
||||||
if [[ -n "$LIGHTHOUSE_ENR_ADDRESS" ]]; then
|
|
||||||
ENR_OPTS="--enr-address $LIGHTHOUSE_ENR_ADDRESS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec lighthouse bn \
|
|
||||||
--checkpoint-sync-url "$LIGHTHOUSE_CHECKPOINT_SYNC_URL" \
|
|
||||||
--checkpoint-sync-url-timeout ${LIGHTHOUSE_CHECKPOINT_SYNC_URL_TIMEOUT} \
|
|
||||||
--datadir "$LIGHTHOUSE_DATADIR" \
|
|
||||||
--debug-level $LIGHTHOUSE_DEBUG_LEVEL \
|
|
||||||
--disable-deposit-contract-sync \
|
|
||||||
--disable-upnp \
|
|
||||||
--enr-tcp-port $LIGHTHOUSE_NETWORK_PORT \
|
|
||||||
--enr-udp-port $LIGHTHOUSE_NETWORK_PORT \
|
|
||||||
--execution-endpoint "$LIGHTHOUSE_EXECUTION_ENDPOINT" \
|
|
||||||
--execution-jwt /etc/mainnet-eth/jwtsecret \
|
|
||||||
--http \
|
|
||||||
--http-address 0.0.0.0 \
|
|
||||||
--http-port $LIGHTHOUSE_HTTP_PORT \
|
|
||||||
--metrics \
|
|
||||||
--metrics-address=0.0.0.0 \
|
|
||||||
--metrics-port $LIGHTHOUSE_METRICS_PORT \
|
|
||||||
--network mainnet \
|
|
||||||
--port $LIGHTHOUSE_NETWORK_PORT \
|
|
||||||
$ENR_OPTS $LIGHTHOUSE_OPTS
|
|
||||||
-1072
File diff suppressed because it is too large
Load Diff
@@ -65,12 +65,3 @@ scrape_configs:
|
|||||||
target_label: instance
|
target_label: instance
|
||||||
- target_label: __address__
|
- target_label: __address__
|
||||||
replacement: postgres-exporter:9187
|
replacement: postgres-exporter:9187
|
||||||
|
|
||||||
- job_name: laconicd
|
|
||||||
metrics_path: /metrics
|
|
||||||
scrape_interval: 30s
|
|
||||||
static_configs:
|
|
||||||
# Add laconicd REST endpoint target with host and port (1317)
|
|
||||||
# - targets: ['example-host:1317']
|
|
||||||
params:
|
|
||||||
format: ['prometheus']
|
|
||||||
|
|||||||
@@ -771,81 +771,3 @@ groups:
|
|||||||
annotations:
|
annotations:
|
||||||
summary: Watcher {{ index $labels "instance" }} of group {{ index $labels "job" }} is falling behind external head by {{ index $values "diff" }}
|
summary: Watcher {{ index $labels "instance" }} of group {{ index $labels "job" }} is falling behind external head by {{ index $values "diff" }}
|
||||||
isPaused: false
|
isPaused: false
|
||||||
|
|
||||||
# Ajna
|
|
||||||
- uid: ajna_diff_external
|
|
||||||
title: ajna_watcher_head_tracking
|
|
||||||
condition: condition
|
|
||||||
data:
|
|
||||||
- refId: diff
|
|
||||||
relativeTimeRange:
|
|
||||||
from: 600
|
|
||||||
to: 0
|
|
||||||
datasourceUid: PBFA97CFB590B2093
|
|
||||||
model:
|
|
||||||
datasource:
|
|
||||||
type: prometheus
|
|
||||||
uid: PBFA97CFB590B2093
|
|
||||||
disableTextWrap: false
|
|
||||||
editorMode: code
|
|
||||||
expr: latest_block_number - on(chain) group_right sync_status_block_number{job="ajna", instance="ajna", kind="latest_indexed"}
|
|
||||||
fullMetaSearch: false
|
|
||||||
includeNullMetadata: true
|
|
||||||
instant: true
|
|
||||||
intervalMs: 1000
|
|
||||||
legendFormat: __auto
|
|
||||||
maxDataPoints: 43200
|
|
||||||
range: false
|
|
||||||
refId: diff
|
|
||||||
useBackend: false
|
|
||||||
- refId: latest_external
|
|
||||||
relativeTimeRange:
|
|
||||||
from: 600
|
|
||||||
to: 0
|
|
||||||
datasourceUid: PBFA97CFB590B2093
|
|
||||||
model:
|
|
||||||
datasource:
|
|
||||||
type: prometheus
|
|
||||||
uid: PBFA97CFB590B2093
|
|
||||||
editorMode: code
|
|
||||||
expr: latest_block_number{chain="filecoin"}
|
|
||||||
hide: false
|
|
||||||
instant: true
|
|
||||||
legendFormat: __auto
|
|
||||||
range: false
|
|
||||||
refId: latest_external
|
|
||||||
- refId: condition
|
|
||||||
relativeTimeRange:
|
|
||||||
from: 600
|
|
||||||
to: 0
|
|
||||||
datasourceUid: __expr__
|
|
||||||
model:
|
|
||||||
conditions:
|
|
||||||
- evaluator:
|
|
||||||
params:
|
|
||||||
- 0
|
|
||||||
- 0
|
|
||||||
type: gt
|
|
||||||
operator:
|
|
||||||
type: and
|
|
||||||
query:
|
|
||||||
params: []
|
|
||||||
reducer:
|
|
||||||
params: []
|
|
||||||
type: avg
|
|
||||||
type: query
|
|
||||||
datasource:
|
|
||||||
name: Expression
|
|
||||||
type: __expr__
|
|
||||||
uid: __expr__
|
|
||||||
expression: ${diff} >= 16
|
|
||||||
intervalMs: 1000
|
|
||||||
maxDataPoints: 43200
|
|
||||||
refId: condition
|
|
||||||
type: math
|
|
||||||
noDataState: Alerting
|
|
||||||
execErrState: Alerting
|
|
||||||
for: 15m
|
|
||||||
annotations:
|
|
||||||
summary: Watcher {{ index $labels "instance" }} of group {{ index $labels "job" }} is falling behind external head by {{ index $values "diff" }}
|
|
||||||
isPaused: false
|
|
||||||
|
|||||||
@@ -15,7 +15,5 @@ yarn build
|
|||||||
|
|
||||||
# Copy over build and other files to app-builds for urbit deployment
|
# Copy over build and other files to app-builds for urbit deployment
|
||||||
mkdir -p /app-builds/uniswap
|
mkdir -p /app-builds/uniswap
|
||||||
cp -r ./build /app-builds/uniswap/
|
cp -r urbit-files /app-builds/uniswap/
|
||||||
|
cp -r ./build /app-builds/uniswap/urbit-files
|
||||||
cp -r mar /app-builds/uniswap/
|
|
||||||
cp desk.docket-0 /app-builds/uniswap/
|
|
||||||
|
|||||||
@@ -0,0 +1,225 @@
|
|||||||
|
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
::
|
||||||
|
:: Proxy server
|
||||||
|
:: ------------
|
||||||
|
::
|
||||||
|
:: This is a simple agent which accepts requests at the path given in the `on-init` arm-- in this
|
||||||
|
:: case, "/apps/uniswap-proxy/"-- and proxies them to the upstream, in this case,
|
||||||
|
:: "https://api.uniswap.org/".
|
||||||
|
::
|
||||||
|
:: For example, assuming your ship is running on `localhost:8080`, a request to the url
|
||||||
|
::
|
||||||
|
:: `http://localhost:8080/apps/uniswap-proxy/v1/graphql`
|
||||||
|
::
|
||||||
|
:: will be proxied to
|
||||||
|
::
|
||||||
|
:: `https://api.uniswap.org/v1/graphql`
|
||||||
|
::
|
||||||
|
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
::
|
||||||
|
/+ dbug, server, default-agent
|
||||||
|
::
|
||||||
|
|%
|
||||||
|
+$ card card:agent:gall
|
||||||
|
+$ state
|
||||||
|
$% %0
|
||||||
|
==
|
||||||
|
--
|
||||||
|
::
|
||||||
|
:: Path config
|
||||||
|
|%
|
||||||
|
++ base-url-path /apps/uniswap-proxy :: HTTP path on the ship that this agent will bind to
|
||||||
|
++ upstream-api-url "https://api.uniswap.org/" :: Upstream HTTP api that requests should be proxied to
|
||||||
|
--
|
||||||
|
::
|
||||||
|
%- agent:dbug
|
||||||
|
::
|
||||||
|
=| state
|
||||||
|
=* state -
|
||||||
|
::
|
||||||
|
^- agent:gall
|
||||||
|
=<
|
||||||
|
|_ =bowl:gall
|
||||||
|
+* this .
|
||||||
|
default ~(. (default-agent this) bowl)
|
||||||
|
::
|
||||||
|
++ on-init
|
||||||
|
^- (quip card _this)
|
||||||
|
:_ this
|
||||||
|
:~
|
||||||
|
[%pass /eyre/connect %arvo %e %connect [~ base-url-path] %proxy]
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ on-poke
|
||||||
|
|= [=mark =vase]
|
||||||
|
^- (quip card _this)
|
||||||
|
:_ this :: We have no state
|
||||||
|
?+ mark (on-poke:default mark vase)
|
||||||
|
%handle-http-request
|
||||||
|
=/ [eyre-id=@ta inbound-req=inbound-request:eyre] !<([@ta =inbound-request:eyre] vase)
|
||||||
|
~& "Eyre id: {<eyre-id>}"
|
||||||
|
=/ old-req request:inbound-req
|
||||||
|
=/ new-req=request:http
|
||||||
|
%= old-req
|
||||||
|
:: Remove path prefix from the url, replace with Uniswap domain and path prefix
|
||||||
|
url (rewrite-path url:old-req)
|
||||||
|
:: Change the "Origin" header to match the upstream (this is hacky as fuck and will break eventually)
|
||||||
|
header-list (rewrite-headers header-list:old-req)
|
||||||
|
==
|
||||||
|
~& "Proxying {<url.old-req>} to {<url.new-req>}"
|
||||||
|
~& "Outgoing headers: {<header-list:new-req>}"
|
||||||
|
:~
|
||||||
|
[%pass /response/[eyre-id] %arvo %i %request new-req *outbound-config:iris]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ on-arvo
|
||||||
|
|= [=wire =sign-arvo]
|
||||||
|
^- (quip card _this)
|
||||||
|
:_ this :: We don't have any state
|
||||||
|
?+ sign-arvo (on-arvo:default wire sign-arvo)
|
||||||
|
::
|
||||||
|
:: Arvo will respond when we initially connect to Eyre in `on-init`. We will accept (and ignore)
|
||||||
|
:: that and reject any other communications.
|
||||||
|
[%eyre %bound *]
|
||||||
|
~& "Got eyre bound: {<sign-arvo>}"
|
||||||
|
~
|
||||||
|
[%iris %http-response %finished *]
|
||||||
|
?+ wire (on-arvo:default wire sign-arvo)
|
||||||
|
[%response @ ~]
|
||||||
|
=/ original-eyre-id=@ta (snag 1 `(list @ta)`wire)
|
||||||
|
=/ resp=client-response:iris +:+:sign-arvo
|
||||||
|
?> ?= %finished -.resp
|
||||||
|
=/ resp-header=response-header:http response-header:resp
|
||||||
|
=/ the-octs=octs data:(need full-file:resp)
|
||||||
|
::
|
||||||
|
=/ thedata=@t q.the-octs
|
||||||
|
~& resp-header
|
||||||
|
~& "Proxied HTTP {<status-code:resp-header>}: {<thedata>}"
|
||||||
|
%+ give-simple-payload:app:server
|
||||||
|
original-eyre-id
|
||||||
|
:- %_(resp-header headers [['Content-type'^'application/json'] ~])
|
||||||
|
`the-octs
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: Each time Eyre pokes a request to us, it will subscribe for the response. We will just accept
|
||||||
|
:: those connections (wire = /http-response/[eyre-id]) and reject any others.
|
||||||
|
:: See: https://docs.urbit.org/system/kernel/eyre/reference/tasks#connect
|
||||||
|
++ on-watch
|
||||||
|
|= =path
|
||||||
|
^- (quip card _this)
|
||||||
|
?+ path (on-watch:default path)
|
||||||
|
[%http-response *]
|
||||||
|
`this
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ on-save on-save:default
|
||||||
|
++ on-load on-load:default
|
||||||
|
++ on-leave on-leave:default
|
||||||
|
++ on-peek on-peek:default
|
||||||
|
++ on-agent on-agent:default
|
||||||
|
++ on-fail on-fail:default
|
||||||
|
--
|
||||||
|
::
|
||||||
|
:: Helpers core
|
||||||
|
|%
|
||||||
|
:: Rewrites a path like "/apps/uniswap-proxy/v1/graphql" to "https://api.uniswap.org/v1/graphql".
|
||||||
|
:: `url-path` is a path, not a full URL!
|
||||||
|
++ rewrite-path
|
||||||
|
|= [url-path=@t]
|
||||||
|
%+ rash
|
||||||
|
url-path
|
||||||
|
:: Prepend the `upstream-api-url` base url and convert back to a cord
|
||||||
|
%+ cook
|
||||||
|
|= [a=tape]
|
||||||
|
(crip (weld upstream-api-url a))
|
||||||
|
:: Strip the base path
|
||||||
|
;~ pfix
|
||||||
|
(ifix [(just '/') (just '/')] (jest (crip (join '/' `(list @t)`base-url-path))))
|
||||||
|
(star prn)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: Change the 'Origin' http header to "https://api.uniswap.org".
|
||||||
|
:: I don't know why this makes the request work, but it does.
|
||||||
|
:: Also drop the "x-forwarded-for" header for Red Horizon; otherwise this breaks it.
|
||||||
|
++ rewrite-headers
|
||||||
|
|= [headers=header-list:http]
|
||||||
|
^- header-list:http
|
||||||
|
=/ ret *header-list:http
|
||||||
|
|-
|
||||||
|
?~ headers
|
||||||
|
ret
|
||||||
|
%= $
|
||||||
|
ret ?+ (crip (cass (trip key:(head headers))))
|
||||||
|
::
|
||||||
|
:: Default: use the header
|
||||||
|
(snoc ret (head headers))
|
||||||
|
::
|
||||||
|
:: Drop "x-forwarded-for" header
|
||||||
|
%'x-forwarded-for'
|
||||||
|
ret
|
||||||
|
::
|
||||||
|
:: Drop the "cookie" header, which contains the Urbit auth token (!)
|
||||||
|
%'cookie'
|
||||||
|
ret
|
||||||
|
::
|
||||||
|
:: Rewrite "origin" header
|
||||||
|
%'origin'
|
||||||
|
(snoc ret ['origin' 'https://api.uniswap.org'])
|
||||||
|
==
|
||||||
|
headers +.headers
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: Manually construct a card that can be passed to iris, simulating a Uniswap graphql request.
|
||||||
|
:: Can be useful for testing purposes.
|
||||||
|
++ iris-request-card
|
||||||
|
::
|
||||||
|
:: The resulting card produces an HTTP request equivalent to the following cURL command:
|
||||||
|
::
|
||||||
|
:: curl 'https://api.uniswap.org/v1/graphql' \
|
||||||
|
:: -H 'authority: interface.gateway.uniswap.org' \
|
||||||
|
:: -H 'accept: */*' \
|
||||||
|
:: -H 'accept-language: en-US,en;q=0.7' \
|
||||||
|
:: -H 'content-type: application/json' \
|
||||||
|
:: -H 'origin: https://app.uniswap.org' \
|
||||||
|
:: -H 'referer: https://app.uniswap.org/' \
|
||||||
|
:: -H 'sec-ch-ua: "Not A(Brand";v="99", "Brave";v="121", "Chromium";v="121"' \
|
||||||
|
:: -H 'sec-ch-ua-mobile: ?0' \
|
||||||
|
:: -H 'sec-ch-ua-platform: "Linux"' \
|
||||||
|
:: -H 'sec-fetch-dest: empty' \
|
||||||
|
:: -H 'sec-fetch-mode: cors' \
|
||||||
|
:: -H 'sec-fetch-site: same-site' \
|
||||||
|
:: -H 'sec-gpc: 1' \
|
||||||
|
:: -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36' \
|
||||||
|
:: --data-raw $'{"operationName":"TokenSpotPrice","variables":{"address":null,"chain":"ETHEREUM"},"query":"query TokenSpotPrice($chain: Chain\u0021, $address: String = null) {\\n token(chain: $chain, address: $address) {\\n id\\n address\\n chain\\n name\\n symbol\\n project {\\n id\\n markets(currencies: [USD]) {\\n id\\n price {\\n id\\n value\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}"}' \
|
||||||
|
:: --compressed
|
||||||
|
::
|
||||||
|
=/ the-request=request:http
|
||||||
|
:* %'POST' 'https://api.uniswap.org/v1/graphql'
|
||||||
|
:~ ['Accept-Language' 'en-US,en']
|
||||||
|
['Cache-Control' 'no-cache']
|
||||||
|
['Connection' 'keep-alive']
|
||||||
|
['Origin' 'http://localhost:8080']
|
||||||
|
['Pragma' 'no-cache']
|
||||||
|
['Referer' 'http://localhost:8080/']
|
||||||
|
['Sec-Fetch-Dest' 'empty']
|
||||||
|
['Sec-Fetch-Mode' 'cors']
|
||||||
|
['Sec-Fetch-Site' 'same-site']
|
||||||
|
['Sec-GPC' '1']
|
||||||
|
['User-Agent' 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36']
|
||||||
|
['accept' '*/*']
|
||||||
|
['content-type' 'application/json']
|
||||||
|
['sec-ch-ua' '"Not A(Brand";v="99", "Brave";v="121", "Chromium";v="121"']
|
||||||
|
['sec-ch-ua-mobile' '?0']
|
||||||
|
['sec-ch-ua-platform' '"Linux"']
|
||||||
|
==
|
||||||
|
:- ~ %- as-octs:mimes:html
|
||||||
|
'''
|
||||||
|
{"operationName":"TokenSpotPrice","variables":{"address":null,"chain":"ETHEREUM"},"query":"query TokenSpotPrice($chain: Chain\u0021, $address: String = null) {\n token(chain: $chain, address: $address) {\n id\n address\n chain\n name\n symbol\n project {\n id\n markets(currencies: [USD]) {\n id\n price {\n id\n value\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}"}
|
||||||
|
'''
|
||||||
|
==
|
||||||
|
:~
|
||||||
|
[%pass /response/1 %arvo %i %request the-request *outbound-config:iris]
|
||||||
|
==
|
||||||
|
--
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
:~ %proxy
|
||||||
|
==
|
||||||
@@ -0,0 +1,155 @@
|
|||||||
|
:: dbug: agent wrapper for generic debugging tools
|
||||||
|
::
|
||||||
|
:: usage: %-(agent:dbug your-agent)
|
||||||
|
::
|
||||||
|
|%
|
||||||
|
+$ poke
|
||||||
|
$% [%bowl ~]
|
||||||
|
[%state grab=cord]
|
||||||
|
[%incoming =about]
|
||||||
|
[%outgoing =about]
|
||||||
|
==
|
||||||
|
::
|
||||||
|
+$ about
|
||||||
|
$@ ~
|
||||||
|
$% [%ship =ship]
|
||||||
|
[%path =path]
|
||||||
|
[%wire =wire]
|
||||||
|
[%term =term]
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ agent
|
||||||
|
|= =agent:gall
|
||||||
|
^- agent:gall
|
||||||
|
!.
|
||||||
|
|_ =bowl:gall
|
||||||
|
+* this .
|
||||||
|
ag ~(. agent bowl)
|
||||||
|
::
|
||||||
|
++ on-poke
|
||||||
|
|= [=mark =vase]
|
||||||
|
^- (quip card:agent:gall agent:gall)
|
||||||
|
?. ?=(%dbug mark)
|
||||||
|
=^ cards agent (on-poke:ag mark vase)
|
||||||
|
[cards this]
|
||||||
|
=/ dbug
|
||||||
|
!<(poke vase)
|
||||||
|
=; =tang
|
||||||
|
((%*(. slog pri 1) tang) [~ this])
|
||||||
|
?- -.dbug
|
||||||
|
%bowl [(sell !>(bowl))]~
|
||||||
|
::
|
||||||
|
%state
|
||||||
|
=? grab.dbug =('' grab.dbug) '-'
|
||||||
|
=; product=^vase
|
||||||
|
[(sell product)]~
|
||||||
|
=/ state=^vase
|
||||||
|
:: if the underlying app has implemented a /dbug/state scry endpoint,
|
||||||
|
:: use that vase in place of +on-save's.
|
||||||
|
::
|
||||||
|
=/ result=(each ^vase tang)
|
||||||
|
(mule |.(q:(need (need (on-peek:ag /x/dbug/state)))))
|
||||||
|
?:(?=(%& -.result) p.result on-save:ag)
|
||||||
|
%+ slap
|
||||||
|
(slop state !>([bowl=bowl ..zuse]))
|
||||||
|
(ream grab.dbug)
|
||||||
|
::
|
||||||
|
%incoming
|
||||||
|
=; =tang
|
||||||
|
?^ tang tang
|
||||||
|
[%leaf "no matching subscriptions"]~
|
||||||
|
%+ murn
|
||||||
|
%+ sort ~(tap by sup.bowl)
|
||||||
|
|= [[* a=[=ship =path]] [* b=[=ship =path]]]
|
||||||
|
(aor [path ship]:a [path ship]:b)
|
||||||
|
|= [=duct [=ship =path]]
|
||||||
|
^- (unit tank)
|
||||||
|
=; relevant=?
|
||||||
|
?. relevant ~
|
||||||
|
`>[path=path from=ship duct=duct]<
|
||||||
|
?: ?=(~ about.dbug) &
|
||||||
|
?- -.about.dbug
|
||||||
|
%ship =(ship ship.about.dbug)
|
||||||
|
%path ?=(^ (find path.about.dbug path))
|
||||||
|
%wire %+ lien duct
|
||||||
|
|=(=wire ?=(^ (find wire.about.dbug wire)))
|
||||||
|
%term !!
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%outgoing
|
||||||
|
=; =tang
|
||||||
|
?^ tang tang
|
||||||
|
[%leaf "no matching subscriptions"]~
|
||||||
|
%+ murn
|
||||||
|
%+ sort ~(tap by wex.bowl)
|
||||||
|
|= [[[a=wire *] *] [[b=wire *] *]]
|
||||||
|
(aor a b)
|
||||||
|
|= [[=wire =ship =term] [acked=? =path]]
|
||||||
|
^- (unit tank)
|
||||||
|
=; relevant=?
|
||||||
|
?. relevant ~
|
||||||
|
`>[wire=wire agnt=[ship term] path=path ackd=acked]<
|
||||||
|
?: ?=(~ about.dbug) &
|
||||||
|
?- -.about.dbug
|
||||||
|
%ship =(ship ship.about.dbug)
|
||||||
|
%path ?=(^ (find path.about.dbug path))
|
||||||
|
%wire ?=(^ (find wire.about.dbug wire))
|
||||||
|
%term =(term term.about.dbug)
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ on-peek
|
||||||
|
|= =path
|
||||||
|
^- (unit (unit cage))
|
||||||
|
?. ?=([@ %dbug *] path)
|
||||||
|
(on-peek:ag path)
|
||||||
|
?+ path [~ ~]
|
||||||
|
[%u %dbug ~] ``noun+!>(&)
|
||||||
|
[%x %dbug %state ~] ``noun+!>(on-save:ag)
|
||||||
|
[%x %dbug %subscriptions ~] ``noun+!>([wex sup]:bowl)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ on-init
|
||||||
|
^- (quip card:agent:gall agent:gall)
|
||||||
|
=^ cards agent on-init:ag
|
||||||
|
[cards this]
|
||||||
|
::
|
||||||
|
++ on-save on-save:ag
|
||||||
|
::
|
||||||
|
++ on-load
|
||||||
|
|= old-state=vase
|
||||||
|
^- (quip card:agent:gall agent:gall)
|
||||||
|
=^ cards agent (on-load:ag old-state)
|
||||||
|
[cards this]
|
||||||
|
::
|
||||||
|
++ on-watch
|
||||||
|
|= =path
|
||||||
|
^- (quip card:agent:gall agent:gall)
|
||||||
|
=^ cards agent (on-watch:ag path)
|
||||||
|
[cards this]
|
||||||
|
::
|
||||||
|
++ on-leave
|
||||||
|
|= =path
|
||||||
|
^- (quip card:agent:gall agent:gall)
|
||||||
|
=^ cards agent (on-leave:ag path)
|
||||||
|
[cards this]
|
||||||
|
::
|
||||||
|
++ on-agent
|
||||||
|
|= [=wire =sign:agent:gall]
|
||||||
|
^- (quip card:agent:gall agent:gall)
|
||||||
|
=^ cards agent (on-agent:ag wire sign)
|
||||||
|
[cards this]
|
||||||
|
::
|
||||||
|
++ on-arvo
|
||||||
|
|= [=wire =sign-arvo]
|
||||||
|
^- (quip card:agent:gall agent:gall)
|
||||||
|
=^ cards agent (on-arvo:ag wire sign-arvo)
|
||||||
|
[cards this]
|
||||||
|
::
|
||||||
|
++ on-fail
|
||||||
|
|= [=term =tang]
|
||||||
|
^- (quip card:agent:gall agent:gall)
|
||||||
|
=^ cards agent (on-fail:ag term tang)
|
||||||
|
[cards this]
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
|= [agent=agent:gall]
|
||||||
|
|_ =bowl:gall
|
||||||
|
++ on-init
|
||||||
|
`agent
|
||||||
|
::
|
||||||
|
++ on-save
|
||||||
|
!>(~)
|
||||||
|
::
|
||||||
|
++ on-load
|
||||||
|
|= old-state=vase
|
||||||
|
`agent
|
||||||
|
::
|
||||||
|
++ on-poke
|
||||||
|
|= =cage
|
||||||
|
~| "unexpected poke to {<dap.bowl>} with mark {<p.cage>}"
|
||||||
|
!!
|
||||||
|
::
|
||||||
|
++ on-watch
|
||||||
|
|= =path
|
||||||
|
~| "unexpected subscription to {<dap.bowl>} on path {<path>}"
|
||||||
|
!!
|
||||||
|
::
|
||||||
|
++ on-leave
|
||||||
|
|= path
|
||||||
|
`agent
|
||||||
|
::
|
||||||
|
++ on-peek
|
||||||
|
|= =path
|
||||||
|
~| "unexpected scry into {<dap.bowl>} on path {<path>}"
|
||||||
|
!!
|
||||||
|
::
|
||||||
|
++ on-agent
|
||||||
|
|= [=wire =sign:agent:gall]
|
||||||
|
^- (quip card:agent:gall _agent)
|
||||||
|
?- -.sign
|
||||||
|
%poke-ack
|
||||||
|
?~ p.sign
|
||||||
|
`agent
|
||||||
|
%- (slog leaf+"poke failed from {<dap.bowl>} on wire {<wire>}" u.p.sign)
|
||||||
|
`agent
|
||||||
|
::
|
||||||
|
%watch-ack
|
||||||
|
?~ p.sign
|
||||||
|
`agent
|
||||||
|
=/ =tank leaf+"subscribe failed from {<dap.bowl>} on wire {<wire>}"
|
||||||
|
%- (slog tank u.p.sign)
|
||||||
|
`agent
|
||||||
|
::
|
||||||
|
%kick `agent
|
||||||
|
%fact
|
||||||
|
~| "unexpected subscription update to {<dap.bowl>} on wire {<wire>}"
|
||||||
|
~| "with mark {<p.cage.sign>}"
|
||||||
|
!!
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ on-arvo
|
||||||
|
|= [=wire =sign-arvo]
|
||||||
|
~| "unexpected system response {<sign-arvo>} to {<dap.bowl>} on wire {<wire>}"
|
||||||
|
!!
|
||||||
|
::
|
||||||
|
++ on-fail
|
||||||
|
|= [=term =tang]
|
||||||
|
%- (slog leaf+"error in {<dap.bowl>}" >term< tang)
|
||||||
|
`agent
|
||||||
|
--
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
=, eyre
|
||||||
|
|%
|
||||||
|
+$ request-line
|
||||||
|
$: [ext=(unit @ta) site=(list @t)]
|
||||||
|
args=(list [key=@t value=@t])
|
||||||
|
==
|
||||||
|
:: +parse-request-line: take a cord and parse out a url
|
||||||
|
::
|
||||||
|
++ parse-request-line
|
||||||
|
|= url=@t
|
||||||
|
^- request-line
|
||||||
|
(fall (rush url ;~(plug apat:de-purl:html yque:de-purl:html)) [[~ ~] ~])
|
||||||
|
::
|
||||||
|
++ manx-to-octs
|
||||||
|
|= man=manx
|
||||||
|
^- octs
|
||||||
|
(as-octt:mimes:html (en-xml:html man))
|
||||||
|
::
|
||||||
|
++ json-to-octs
|
||||||
|
|= jon=json
|
||||||
|
^- octs
|
||||||
|
(as-octs:mimes:html (en:json:html jon))
|
||||||
|
::
|
||||||
|
++ app
|
||||||
|
|%
|
||||||
|
::
|
||||||
|
:: +require-authorization:
|
||||||
|
:: redirect to the login page when unauthenticated
|
||||||
|
:: otherwise call handler on inbound request
|
||||||
|
::
|
||||||
|
++ require-authorization
|
||||||
|
|= $: =inbound-request:eyre
|
||||||
|
handler=$-(inbound-request:eyre simple-payload:http)
|
||||||
|
==
|
||||||
|
^- simple-payload:http
|
||||||
|
::
|
||||||
|
?: authenticated.inbound-request
|
||||||
|
~! this
|
||||||
|
~! +:*handler
|
||||||
|
(handler inbound-request)
|
||||||
|
::
|
||||||
|
=- [[307 ['location' -]~] ~]
|
||||||
|
%^ cat 3
|
||||||
|
'/~/login?redirect='
|
||||||
|
url.request.inbound-request
|
||||||
|
::
|
||||||
|
:: +require-authorization-simple:
|
||||||
|
:: redirect to the login page when unauthenticated
|
||||||
|
:: otherwise pass through simple-paylod
|
||||||
|
::
|
||||||
|
++ require-authorization-simple
|
||||||
|
|= [=inbound-request:eyre =simple-payload:http]
|
||||||
|
^- simple-payload:http
|
||||||
|
::
|
||||||
|
?: authenticated.inbound-request
|
||||||
|
~! this
|
||||||
|
simple-payload
|
||||||
|
::
|
||||||
|
=- [[307 ['location' -]~] ~]
|
||||||
|
%^ cat 3
|
||||||
|
'/~/login?redirect='
|
||||||
|
url.request.inbound-request
|
||||||
|
::
|
||||||
|
++ give-simple-payload
|
||||||
|
|= [eyre-id=@ta =simple-payload:http]
|
||||||
|
^- (list card:agent:gall)
|
||||||
|
=/ header-cage
|
||||||
|
[%http-response-header !>(response-header.simple-payload)]
|
||||||
|
=/ data-cage
|
||||||
|
[%http-response-data !>(data.simple-payload)]
|
||||||
|
:~ [%give %fact ~[/http-response/[eyre-id]] header-cage]
|
||||||
|
[%give %fact ~[/http-response/[eyre-id]] data-cage]
|
||||||
|
[%give %kick ~[/http-response/[eyre-id]] ~]
|
||||||
|
==
|
||||||
|
--
|
||||||
|
++ gen
|
||||||
|
|%
|
||||||
|
::
|
||||||
|
++ max-1-da ['cache-control' 'max-age=86400']
|
||||||
|
++ max-1-wk ['cache-control' 'max-age=604800']
|
||||||
|
::
|
||||||
|
++ html-response
|
||||||
|
=| cache=?
|
||||||
|
|= =octs
|
||||||
|
^- simple-payload:http
|
||||||
|
:_ `octs
|
||||||
|
[200 [['content-type' 'text/html'] ?:(cache [max-1-wk ~] ~)]]
|
||||||
|
::
|
||||||
|
++ css-response
|
||||||
|
=| cache=?
|
||||||
|
|= =octs
|
||||||
|
^- simple-payload:http
|
||||||
|
:_ `octs
|
||||||
|
[200 [['content-type' 'text/css'] ?:(cache [max-1-wk ~] ~)]]
|
||||||
|
::
|
||||||
|
++ js-response
|
||||||
|
=| cache=?
|
||||||
|
|= =octs
|
||||||
|
^- simple-payload:http
|
||||||
|
:_ `octs
|
||||||
|
[200 [['content-type' 'text/javascript'] ?:(cache [max-1-wk ~] ~)]]
|
||||||
|
::
|
||||||
|
++ png-response
|
||||||
|
=| cache=?
|
||||||
|
|= =octs
|
||||||
|
^- simple-payload:http
|
||||||
|
:_ `octs
|
||||||
|
[200 [['content-type' 'image/png'] ?:(cache [max-1-wk ~] ~)]]
|
||||||
|
::
|
||||||
|
++ svg-response
|
||||||
|
=| cache=?
|
||||||
|
|= =octs
|
||||||
|
^- simple-payload:http
|
||||||
|
:_ `octs
|
||||||
|
[200 [['content-type' 'image/svg+xml'] ?:(cache [max-1-wk ~] ~)]]
|
||||||
|
::
|
||||||
|
++ ico-response
|
||||||
|
|= =octs
|
||||||
|
^- simple-payload:http
|
||||||
|
[[200 [['content-type' 'image/x-icon'] max-1-wk ~]] `octs]
|
||||||
|
::
|
||||||
|
++ woff2-response
|
||||||
|
=| cache=?
|
||||||
|
|= =octs
|
||||||
|
^- simple-payload:http
|
||||||
|
[[200 [['content-type' 'font/woff2'] max-1-wk ~]] `octs]
|
||||||
|
::
|
||||||
|
++ json-response
|
||||||
|
=| cache=_|
|
||||||
|
|= =json
|
||||||
|
^- simple-payload:http
|
||||||
|
:_ `(json-to-octs json)
|
||||||
|
[200 [['content-type' 'application/json'] ?:(cache [max-1-da ~] ~)]]
|
||||||
|
::
|
||||||
|
++ manx-response
|
||||||
|
=| cache=_|
|
||||||
|
|= man=manx
|
||||||
|
^- simple-payload:http
|
||||||
|
:_ `(manx-to-octs man)
|
||||||
|
[200 [['content-type' 'text/html'] ?:(cache [max-1-da ~] ~)]]
|
||||||
|
::
|
||||||
|
++ not-found
|
||||||
|
^- simple-payload:http
|
||||||
|
[[404 ~] ~]
|
||||||
|
::
|
||||||
|
++ login-redirect
|
||||||
|
|= =request:http
|
||||||
|
^- simple-payload:http
|
||||||
|
=- [[307 ['location' -]~] ~]
|
||||||
|
%^ cat 3
|
||||||
|
'/~/login?redirect='
|
||||||
|
url.request
|
||||||
|
::
|
||||||
|
++ redirect
|
||||||
|
|= redirect=cord
|
||||||
|
^- simple-payload:http
|
||||||
|
[[307 ['location' redirect]~] ~]
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
|_ bil=(list dude:gall)
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime `^mime`[/text/x-bill (as-octs:mimes:html hoon)]
|
||||||
|
++ noun bil
|
||||||
|
++ hoon
|
||||||
|
^- @t
|
||||||
|
|^ (crip (of-wall:format (wrap-lines (spit-duz bil))))
|
||||||
|
::
|
||||||
|
++ wrap-lines
|
||||||
|
|= taz=wall
|
||||||
|
^- wall
|
||||||
|
?~ taz ["~"]~
|
||||||
|
:- (weld ":~ " i.taz)
|
||||||
|
%- snoc :_ "=="
|
||||||
|
(turn t.taz |=(t=tape (weld " " t)))
|
||||||
|
::
|
||||||
|
++ spit-duz
|
||||||
|
|= duz=(list dude:gall)
|
||||||
|
^- wall
|
||||||
|
(turn duz |=(=dude:gall ['%' (trip dude)]))
|
||||||
|
--
|
||||||
|
++ txt (to-wain:format hoon)
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ noun (list dude:gall)
|
||||||
|
++ mime
|
||||||
|
|= [=mite len=@ud tex=@]
|
||||||
|
~_ tex
|
||||||
|
!<((list dude:gall) (slap !>(~) (ream tex)))
|
||||||
|
--
|
||||||
|
++ grad %noun
|
||||||
|
--
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
:::: /hoon/hoon/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
=, eyre
|
||||||
|
|_ own=@t
|
||||||
|
::
|
||||||
|
++ grow :: convert to
|
||||||
|
|%
|
||||||
|
++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime
|
||||||
|
++ hymn
|
||||||
|
;html
|
||||||
|
;head
|
||||||
|
;title:"Source"
|
||||||
|
;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js";
|
||||||
|
;script@"/lib/syntax/hoon.js";
|
||||||
|
;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/".
|
||||||
|
"codemirror/4.3.0/codemirror.min.css");
|
||||||
|
;link/"/lib/syntax/codemirror.css"(rel "stylesheet");
|
||||||
|
==
|
||||||
|
;body
|
||||||
|
;textarea#src:"{(trip own)}"
|
||||||
|
;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})'
|
||||||
|
==
|
||||||
|
==
|
||||||
|
++ txt
|
||||||
|
(to-wain:format own)
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|% :: convert from
|
||||||
|
++ mime |=([p=mite q=octs] q.q)
|
||||||
|
++ noun @t :: clam from %noun
|
||||||
|
++ txt of-wain:format
|
||||||
|
--
|
||||||
|
++ grad %txt
|
||||||
|
--
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
|_ kal=waft:clay
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime `^mime`[/text/x-kelvin (as-octs:mimes:html hoon)]
|
||||||
|
++ noun kal
|
||||||
|
++ hoon
|
||||||
|
%+ rap 3
|
||||||
|
%+ turn
|
||||||
|
%+ sort
|
||||||
|
~(tap in (waft-to-wefts:clay kal))
|
||||||
|
|= [a=weft b=weft]
|
||||||
|
?: =(lal.a lal.b)
|
||||||
|
(gte num.a num.b)
|
||||||
|
(gte lal.a lal.b)
|
||||||
|
|= =weft
|
||||||
|
(rap 3 '[%' (scot %tas lal.weft) ' ' (scot %ud num.weft) ']\0a' ~)
|
||||||
|
::
|
||||||
|
++ txt (to-wain:format hoon)
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ noun waft:clay
|
||||||
|
++ mime
|
||||||
|
|= [=mite len=@ud tex=@]
|
||||||
|
(cord-to-waft:clay tex)
|
||||||
|
--
|
||||||
|
++ grad %noun
|
||||||
|
--
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
::
|
|
||||||
:::: /hoon/map/mar
|
|
||||||
:: Mark for js source maps
|
|
||||||
/? 310
|
|
||||||
::
|
|
||||||
=, eyre
|
|
||||||
|_ mud=@
|
|
||||||
++ grow
|
|
||||||
|%
|
|
||||||
++ mime [/application/octet-stream (as-octs:mimes:html (@t mud))]
|
|
||||||
--
|
|
||||||
++ grab
|
|
||||||
|% :: convert from
|
|
||||||
++ mime |=([p=mite q=octs] (@t q.q))
|
|
||||||
++ noun cord :: clam from %noun
|
|
||||||
--
|
|
||||||
++ grad %mime
|
|
||||||
--
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/mime/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
|_ own=mime
|
||||||
|
++ grow
|
||||||
|
^?
|
||||||
|
|%
|
||||||
|
++ jam `@`q.q.own
|
||||||
|
--
|
||||||
|
::
|
||||||
|
++ grab :: convert from
|
||||||
|
^?
|
||||||
|
|%
|
||||||
|
++ noun mime :: clam from %noun
|
||||||
|
++ tape
|
||||||
|
|=(a=_"" [/application/x-urb-unknown (as-octt:mimes:html a)])
|
||||||
|
--
|
||||||
|
++ grad
|
||||||
|
^?
|
||||||
|
|%
|
||||||
|
++ form %mime
|
||||||
|
++ diff |=(mime +<)
|
||||||
|
++ pact |=(mime +<)
|
||||||
|
++ join |=([mime mime] `(unit mime)`~)
|
||||||
|
++ mash
|
||||||
|
|= [[ship desk mime] [ship desk mime]]
|
||||||
|
^- mime
|
||||||
|
~|(%mime-mash !!)
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/noun/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
!:
|
||||||
|
:::: A minimal noun mark
|
||||||
|
|_ non=*
|
||||||
|
++ grab |%
|
||||||
|
++ noun *
|
||||||
|
--
|
||||||
|
++ grow |%
|
||||||
|
++ mime [/application/x-urb-jam (as-octs:mimes:html (jam non))]
|
||||||
|
--
|
||||||
|
++ grad
|
||||||
|
|%
|
||||||
|
++ form %noun
|
||||||
|
++ diff |=(* +<)
|
||||||
|
++ pact |=(* +<)
|
||||||
|
++ join |=([* *] *(unit *))
|
||||||
|
++ mash |=([[ship desk *] [ship desk *]] `*`~|(%noun-mash !!))
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
|_ dat=octs
|
|
||||||
++ grow
|
|
||||||
|%
|
|
||||||
++ mime [/font/ttf dat]
|
|
||||||
--
|
|
||||||
++ grab
|
|
||||||
|%
|
|
||||||
++ mime |=([=mite =octs] octs)
|
|
||||||
++ noun octs
|
|
||||||
--
|
|
||||||
++ grad %mime
|
|
||||||
--
|
|
||||||
@@ -0,0 +1,274 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/txt/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
=, clay
|
||||||
|
=, differ
|
||||||
|
=, format
|
||||||
|
=, mimes:html
|
||||||
|
|_ txt=wain
|
||||||
|
::
|
||||||
|
++ grab :: convert from
|
||||||
|
|%
|
||||||
|
++ mime |=((pair mite octs) (to-wain q.q))
|
||||||
|
++ noun wain :: clam from %noun
|
||||||
|
--
|
||||||
|
++ grow
|
||||||
|
=> v=.
|
||||||
|
|%
|
||||||
|
++ mime => v [/text/plain (as-octs (of-wain txt))]
|
||||||
|
--
|
||||||
|
++ grad
|
||||||
|
|%
|
||||||
|
++ form %txt-diff
|
||||||
|
++ diff
|
||||||
|
|= tyt=wain
|
||||||
|
^- (urge cord)
|
||||||
|
(lusk txt tyt (loss txt tyt))
|
||||||
|
::
|
||||||
|
++ pact
|
||||||
|
|= dif=(urge cord)
|
||||||
|
~| [%pacting dif]
|
||||||
|
^- wain
|
||||||
|
(lurk txt dif)
|
||||||
|
::
|
||||||
|
++ join
|
||||||
|
|= [ali=(urge cord) bob=(urge cord)]
|
||||||
|
^- (unit (urge cord))
|
||||||
|
|^
|
||||||
|
=. ali (clean ali)
|
||||||
|
=. bob (clean bob)
|
||||||
|
|- ^- (unit (urge cord))
|
||||||
|
?~ ali `bob
|
||||||
|
?~ bob `ali
|
||||||
|
?- -.i.ali
|
||||||
|
%&
|
||||||
|
?- -.i.bob
|
||||||
|
%&
|
||||||
|
?: =(p.i.ali p.i.bob)
|
||||||
|
%+ bind $(ali t.ali, bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
?: (gth p.i.ali p.i.bob)
|
||||||
|
%+ bind $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.bob cud])
|
||||||
|
%+ bind $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?: =(p.i.ali (lent p.i.bob))
|
||||||
|
%+ bind $(ali t.ali, bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.bob cud])
|
||||||
|
?: (gth p.i.ali (lent p.i.bob))
|
||||||
|
%+ bind $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.bob cud])
|
||||||
|
~
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?- -.i.bob
|
||||||
|
%|
|
||||||
|
?. =(i.ali i.bob)
|
||||||
|
~
|
||||||
|
%+ bind $(ali t.ali, bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
::
|
||||||
|
%&
|
||||||
|
?: =(p.i.bob (lent p.i.ali))
|
||||||
|
%+ bind $(ali t.ali, bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
?: (gth p.i.bob (lent p.i.ali))
|
||||||
|
%+ bind $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
~
|
||||||
|
==
|
||||||
|
==
|
||||||
|
++ clean :: clean
|
||||||
|
|= wig=(urge cord)
|
||||||
|
^- (urge cord)
|
||||||
|
?~ wig ~
|
||||||
|
?~ t.wig wig
|
||||||
|
?: ?=(%& -.i.wig)
|
||||||
|
?: ?=(%& -.i.t.wig)
|
||||||
|
$(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig])
|
||||||
|
[i.wig $(wig t.wig)]
|
||||||
|
?: ?=(%| -.i.t.wig)
|
||||||
|
$(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig])
|
||||||
|
[i.wig $(wig t.wig)]
|
||||||
|
--
|
||||||
|
::
|
||||||
|
++ mash
|
||||||
|
|= $: [als=ship ald=desk ali=(urge cord)]
|
||||||
|
[bos=ship bod=desk bob=(urge cord)]
|
||||||
|
==
|
||||||
|
^- (urge cord)
|
||||||
|
|^
|
||||||
|
=. ali (clean ali)
|
||||||
|
=. bob (clean bob)
|
||||||
|
|- ^- (urge cord)
|
||||||
|
?~ ali bob
|
||||||
|
?~ bob ali
|
||||||
|
?- -.i.ali
|
||||||
|
%&
|
||||||
|
?- -.i.bob
|
||||||
|
%&
|
||||||
|
?: =(p.i.ali p.i.bob)
|
||||||
|
[i.ali $(ali t.ali, bob t.bob)]
|
||||||
|
?: (gth p.i.ali p.i.bob)
|
||||||
|
[i.bob $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)]
|
||||||
|
[i.ali $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))]
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?: =(p.i.ali (lent p.i.bob))
|
||||||
|
[i.bob $(ali t.ali, bob t.bob)]
|
||||||
|
?: (gth p.i.ali (lent p.i.bob))
|
||||||
|
[i.bob $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)]
|
||||||
|
=/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
|
||||||
|
(resolve ali bob)
|
||||||
|
[fic $(ali ali, bob bob)]
|
||||||
|
:: ~ :: here, alice is good for a while, but not for the whole
|
||||||
|
== :: length of bob's changes
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?- -.i.bob
|
||||||
|
%|
|
||||||
|
=/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
|
||||||
|
(resolve ali bob)
|
||||||
|
[fic $(ali ali, bob bob)]
|
||||||
|
::
|
||||||
|
%&
|
||||||
|
?: =(p.i.bob (lent p.i.ali))
|
||||||
|
[i.ali $(ali t.ali, bob t.bob)]
|
||||||
|
?: (gth p.i.bob (lent p.i.ali))
|
||||||
|
[i.ali $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))]
|
||||||
|
=/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
|
||||||
|
(resolve ali bob)
|
||||||
|
[fic $(ali ali, bob bob)]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ annotate :: annotate conflict
|
||||||
|
|= $: ali=(list @t)
|
||||||
|
bob=(list @t)
|
||||||
|
bas=(list @t)
|
||||||
|
==
|
||||||
|
^- (list @t)
|
||||||
|
%- zing
|
||||||
|
^- (list (list @t))
|
||||||
|
%- flop
|
||||||
|
^- (list (list @t))
|
||||||
|
:- :_ ~
|
||||||
|
%^ cat 3 '<<<<<<<<<<<<'
|
||||||
|
%^ cat 3 ' '
|
||||||
|
%^ cat 3 `@t`(scot %p bos)
|
||||||
|
%^ cat 3 '/'
|
||||||
|
bod
|
||||||
|
|
||||||
|
:- bob
|
||||||
|
:- ~['------------']
|
||||||
|
:- bas
|
||||||
|
:- ~['++++++++++++']
|
||||||
|
:- ali
|
||||||
|
:- :_ ~
|
||||||
|
%^ cat 3 '>>>>>>>>>>>>'
|
||||||
|
%^ cat 3 ' '
|
||||||
|
%^ cat 3 `@t`(scot %p als)
|
||||||
|
%^ cat 3 '/'
|
||||||
|
ald
|
||||||
|
~
|
||||||
|
::
|
||||||
|
++ clean :: clean
|
||||||
|
|= wig=(urge cord)
|
||||||
|
^- (urge cord)
|
||||||
|
?~ wig ~
|
||||||
|
?~ t.wig wig
|
||||||
|
?: ?=(%& -.i.wig)
|
||||||
|
?: ?=(%& -.i.t.wig)
|
||||||
|
$(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig])
|
||||||
|
[i.wig $(wig t.wig)]
|
||||||
|
?: ?=(%| -.i.t.wig)
|
||||||
|
$(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig])
|
||||||
|
[i.wig $(wig t.wig)]
|
||||||
|
::
|
||||||
|
++ resolve
|
||||||
|
|= [ali=(urge cord) bob=(urge cord)]
|
||||||
|
^- [fic=[%| p=(list cord) q=(list cord)] ali=(urge cord) bob=(urge cord)]
|
||||||
|
=- [[%| bac (annotate alc boc bac)] ali bob]
|
||||||
|
|- ^- $: $: bac=(list cord)
|
||||||
|
alc=(list cord)
|
||||||
|
boc=(list cord)
|
||||||
|
==
|
||||||
|
ali=(urge cord)
|
||||||
|
bob=(urge cord)
|
||||||
|
==
|
||||||
|
?~ ali [[~ ~ ~] ali bob]
|
||||||
|
?~ bob [[~ ~ ~] ali bob]
|
||||||
|
?- -.i.ali
|
||||||
|
%&
|
||||||
|
?- -.i.bob
|
||||||
|
%& [[~ ~ ~] ali bob] :: no conflict
|
||||||
|
%|
|
||||||
|
=+ lob=(lent p.i.bob)
|
||||||
|
?: =(lob p.i.ali)
|
||||||
|
[[p.i.bob p.i.bob q.i.bob] t.ali t.bob]
|
||||||
|
?: (lth lob p.i.ali)
|
||||||
|
[[p.i.bob p.i.bob q.i.bob] [[%& (sub p.i.ali lob)] t.ali] t.bob]
|
||||||
|
=+ wat=(scag (sub lob p.i.ali) p.i.bob)
|
||||||
|
=+ ^= res
|
||||||
|
%= $
|
||||||
|
ali t.ali
|
||||||
|
bob [[%| (scag (sub lob p.i.ali) p.i.bob) ~] t.bob]
|
||||||
|
==
|
||||||
|
:* :* (welp bac.res wat)
|
||||||
|
(welp alc.res wat)
|
||||||
|
(welp boc.res q.i.bob)
|
||||||
|
==
|
||||||
|
ali.res
|
||||||
|
bob.res
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?- -.i.bob
|
||||||
|
%&
|
||||||
|
=+ loa=(lent p.i.ali)
|
||||||
|
?: =(loa p.i.bob)
|
||||||
|
[[p.i.ali q.i.ali p.i.ali] t.ali t.bob]
|
||||||
|
?: (lth loa p.i.bob)
|
||||||
|
[[p.i.ali q.i.ali p.i.ali] t.ali [[%& (sub p.i.bob loa)] t.bob]]
|
||||||
|
=+ wat=(slag (sub loa p.i.bob) p.i.ali)
|
||||||
|
=+ ^= res
|
||||||
|
%= $
|
||||||
|
ali [[%| (scag (sub loa p.i.bob) p.i.ali) ~] t.ali]
|
||||||
|
bob t.bob
|
||||||
|
==
|
||||||
|
:* :* (welp bac.res wat)
|
||||||
|
(welp alc.res q.i.ali)
|
||||||
|
(welp boc.res wat)
|
||||||
|
==
|
||||||
|
ali.res
|
||||||
|
bob.res
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
=+ loa=(lent p.i.ali)
|
||||||
|
=+ lob=(lent p.i.bob)
|
||||||
|
?: =(loa lob)
|
||||||
|
[[p.i.ali q.i.ali q.i.bob] t.ali t.bob]
|
||||||
|
=+ ^= res
|
||||||
|
?: (gth loa lob)
|
||||||
|
$(ali [[%| (scag (sub loa lob) p.i.ali) ~] t.ali], bob t.bob)
|
||||||
|
~& [%scagging loa=loa pibob=p.i.bob slag=(scag loa p.i.bob)]
|
||||||
|
$(ali t.ali, bob [[%| (scag (sub lob loa) p.i.bob) ~] t.bob])
|
||||||
|
:* :* (welp bac.res ?:((gth loa lob) p.i.bob p.i.ali))
|
||||||
|
(welp alc.res q.i.ali)
|
||||||
|
(welp boc.res q.i.bob)
|
||||||
|
==
|
||||||
|
ali.res
|
||||||
|
bob.res
|
||||||
|
==
|
||||||
|
==
|
||||||
|
==
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
|_ dat=octs
|
|
||||||
++ grow
|
|
||||||
|%
|
|
||||||
++ mime [/font/woff dat]
|
|
||||||
--
|
|
||||||
++ grab
|
|
||||||
|%
|
|
||||||
++ mime |=([=mite =octs] octs)
|
|
||||||
++ noun octs
|
|
||||||
--
|
|
||||||
++ grad %mime
|
|
||||||
--
|
|
||||||
@@ -17,16 +17,10 @@ if [ -d ${app_desk_dir} ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
app_build=/app-builds/${CERC_URBIT_APP}/build
|
app_files=/app-builds/${CERC_URBIT_APP}/urbit-files
|
||||||
app_mark_files=/app-builds/${CERC_URBIT_APP}/mar
|
|
||||||
app_docket_file=/app-builds/${CERC_URBIT_APP}/desk.docket-0
|
|
||||||
|
|
||||||
echo "Reading app build from ${app_build}"
|
|
||||||
echo "Reading additional mark files from ${app_mark_files}"
|
|
||||||
echo "Reading docket file ${app_docket_file}"
|
|
||||||
|
|
||||||
# Loop until the app's build appears
|
# Loop until the app's build appears
|
||||||
while [ ! -d ${app_build} ]; do
|
while [ ! -d "${app_files}/build" ]; do
|
||||||
echo "${CERC_URBIT_APP} app build not found, retrying in 5s..."
|
echo "${CERC_URBIT_APP} app build not found, retrying in 5s..."
|
||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
@@ -50,15 +44,16 @@ hood () {
|
|||||||
hood "merge %${CERC_URBIT_APP} our %landscape"
|
hood "merge %${CERC_URBIT_APP} our %landscape"
|
||||||
hood "mount %${CERC_URBIT_APP}"
|
hood "mount %${CERC_URBIT_APP}"
|
||||||
|
|
||||||
# Copy over build to desk data dir
|
rm "${app_desk_dir}/desk.bill" # Don't install the landscape apps
|
||||||
cp -r ${app_build} ${app_desk_dir}
|
|
||||||
|
|
||||||
# Copy over the additional mark files
|
|
||||||
cp ${app_mark_files}/* ${app_desk_dir}/mar/
|
|
||||||
|
|
||||||
rm "${app_desk_dir}/desk.bill"
|
|
||||||
rm "${app_desk_dir}/desk.ship"
|
rm "${app_desk_dir}/desk.ship"
|
||||||
|
|
||||||
|
|
||||||
|
echo "Copying files from ${app_files}"
|
||||||
|
|
||||||
|
# Copy over build to desk data dir
|
||||||
|
cp -r ${app_files}/* ${app_desk_dir}
|
||||||
|
rm ${app_desk_dir}/desk.docket-0 # Remove until we have a valid glob path; it's added back again below
|
||||||
|
|
||||||
# Commit changes and create a glob
|
# Commit changes and create a glob
|
||||||
hood "commit %${CERC_URBIT_APP}"
|
hood "commit %${CERC_URBIT_APP}"
|
||||||
dojo "-landscape!make-glob %${CERC_URBIT_APP} /build"
|
dojo "-landscape!make-glob %${CERC_URBIT_APP} /build"
|
||||||
@@ -99,8 +94,8 @@ while true; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Replace the docket file for app
|
# Replace the docket file for app
|
||||||
# Substitue the glob URL and hash
|
# Substitute the glob URL and hash
|
||||||
cp ${app_docket_file} ${app_desk_dir}/
|
cp ${app_files}/desk.docket-0 ${app_desk_dir}/
|
||||||
sed -i "s|REPLACE_WITH_GLOB_URL|${glob_url}|g; s|REPLACE_WITH_GLOB_HASH|${glob_hash}|g" ${app_desk_dir}/desk.docket-0
|
sed -i "s|REPLACE_WITH_GLOB_URL|${glob_url}|g; s|REPLACE_WITH_GLOB_HASH|${glob_hash}|g" ${app_desk_dir}/desk.docket-0
|
||||||
|
|
||||||
# Commit changes and install the app
|
# Commit changes and install the app
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check and exit if a deployment already exists (on restarts)
|
||||||
|
if [ -d /app-builds/vega/build ]; then
|
||||||
|
echo "Build already exists, remove volume to rebuild"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
./docker/prepare-dist.sh
|
||||||
|
|
||||||
|
# Post-process the output: rename files, e.g., `AlphaLyrae.woff2` => `alphalyrae.woff2`
|
||||||
|
while read filepath; do
|
||||||
|
filename=$(basename "$filepath")
|
||||||
|
dir=$(dirname "$filepath")
|
||||||
|
if echo "$filename" | grep -q "[A-Z]"; then
|
||||||
|
newfilename=$(tr '[:upper:]' '[:lower:]' <<< "$filename")
|
||||||
|
echo "Translating '$filepath' => $dir/$newfilename'"
|
||||||
|
mv "$filepath" "$dir/$newfilename"
|
||||||
|
find dist-result -type f | xargs sed -i "s/$filename/$newfilename/g"
|
||||||
|
fi
|
||||||
|
done < <(find dist-result/ -type f)
|
||||||
|
|
||||||
|
|
||||||
|
# Copy over dist-result and other files to `app-builds` volume for urbit deployment
|
||||||
|
mkdir -p /app-builds/vega
|
||||||
|
cp -r ./dist-result /app-builds/vega/build
|
||||||
|
cp -r urbit-files/* /app-builds/vega/
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
:~ title+'Vegas'
|
||||||
|
info+'vegas'
|
||||||
|
color+0xcd.75df
|
||||||
|
image+'https://vegaprotocol.eth.limo/favicon.ico'
|
||||||
|
base+'vegas'
|
||||||
|
glob-http+['REPLACE_WITH_GLOB_URL' REPLACE_WITH_GLOB_HASH]
|
||||||
|
version+[0 0 1]
|
||||||
|
website+'https://vega.xyz/'
|
||||||
|
license+'MIT'
|
||||||
|
==
|
||||||
@@ -0,0 +1,223 @@
|
|||||||
|
/- *docket
|
||||||
|
|%
|
||||||
|
::
|
||||||
|
++ mime
|
||||||
|
|%
|
||||||
|
+$ draft
|
||||||
|
$: title=(unit @t)
|
||||||
|
info=(unit @t)
|
||||||
|
color=(unit @ux)
|
||||||
|
glob-http=(unit [=url hash=@uvH])
|
||||||
|
glob-ames=(unit [=ship hash=@uvH])
|
||||||
|
base=(unit term)
|
||||||
|
site=(unit path)
|
||||||
|
image=(unit url)
|
||||||
|
version=(unit version)
|
||||||
|
website=(unit url)
|
||||||
|
license=(unit cord)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ finalize
|
||||||
|
|= =draft
|
||||||
|
^- (unit docket)
|
||||||
|
?~ title.draft ~
|
||||||
|
?~ info.draft ~
|
||||||
|
?~ color.draft ~
|
||||||
|
?~ version.draft ~
|
||||||
|
?~ website.draft ~
|
||||||
|
?~ license.draft ~
|
||||||
|
=/ href=(unit href)
|
||||||
|
?^ site.draft `[%site u.site.draft]
|
||||||
|
?~ base.draft ~
|
||||||
|
?^ glob-http.draft
|
||||||
|
`[%glob u.base hash.u.glob-http %http url.u.glob-http]:draft
|
||||||
|
?~ glob-ames.draft
|
||||||
|
~
|
||||||
|
`[%glob u.base hash.u.glob-ames %ames ship.u.glob-ames]:draft
|
||||||
|
?~ href ~
|
||||||
|
=, draft
|
||||||
|
:- ~
|
||||||
|
:* %1
|
||||||
|
u.title
|
||||||
|
u.info
|
||||||
|
u.color
|
||||||
|
u.href
|
||||||
|
image
|
||||||
|
u.version
|
||||||
|
u.website
|
||||||
|
u.license
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ from-clauses
|
||||||
|
=| =draft
|
||||||
|
|= cls=(list clause)
|
||||||
|
^- (unit docket)
|
||||||
|
=* loop $
|
||||||
|
?~ cls (finalize draft)
|
||||||
|
=* clause i.cls
|
||||||
|
=. draft
|
||||||
|
?- -.clause
|
||||||
|
%title draft(title `title.clause)
|
||||||
|
%info draft(info `info.clause)
|
||||||
|
%color draft(color `color.clause)
|
||||||
|
%glob-http draft(glob-http `[url hash]:clause)
|
||||||
|
%glob-ames draft(glob-ames `[ship hash]:clause)
|
||||||
|
%base draft(base `base.clause)
|
||||||
|
%site draft(site `path.clause)
|
||||||
|
%image draft(image `url.clause)
|
||||||
|
%version draft(version `version.clause)
|
||||||
|
%website draft(website `website.clause)
|
||||||
|
%license draft(license `license.clause)
|
||||||
|
==
|
||||||
|
loop(cls t.cls)
|
||||||
|
::
|
||||||
|
++ to-clauses
|
||||||
|
|= d=docket
|
||||||
|
^- (list clause)
|
||||||
|
%- zing
|
||||||
|
:~ :~ title+title.d
|
||||||
|
info+info.d
|
||||||
|
color+color.d
|
||||||
|
version+version.d
|
||||||
|
website+website.d
|
||||||
|
license+license.d
|
||||||
|
==
|
||||||
|
?~ image.d ~ ~[image+u.image.d]
|
||||||
|
?: ?=(%site -.href.d) ~[site+path.href.d]
|
||||||
|
=/ ref=glob-reference glob-reference.href.d
|
||||||
|
:~ base+base.href.d
|
||||||
|
?- -.location.ref
|
||||||
|
%http [%glob-http url.location.ref hash.ref]
|
||||||
|
%ames [%glob-ames ship.location.ref hash.ref]
|
||||||
|
== == ==
|
||||||
|
::
|
||||||
|
++ spit-clause
|
||||||
|
|= =clause
|
||||||
|
^- tape
|
||||||
|
%+ weld " {(trip -.clause)}+"
|
||||||
|
?+ -.clause "'{(trip +.clause)}'"
|
||||||
|
%color (scow %ux color.clause)
|
||||||
|
%site (spud path.clause)
|
||||||
|
::
|
||||||
|
%glob-http
|
||||||
|
"['{(trip url.clause)}' {(scow %uv hash.clause)}]"
|
||||||
|
::
|
||||||
|
%glob-ames
|
||||||
|
"[{(scow %p ship.clause)} {(scow %uv hash.clause)}]"
|
||||||
|
::
|
||||||
|
%version
|
||||||
|
=, version.clause
|
||||||
|
"[{(scow %ud major)} {(scow %ud minor)} {(scow %ud patch)}]"
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ spit-docket
|
||||||
|
|= dock=docket
|
||||||
|
^- tape
|
||||||
|
;: welp
|
||||||
|
":~\0a"
|
||||||
|
`tape`(zing (join "\0a" (turn (to-clauses dock) spit-clause)))
|
||||||
|
"\0a=="
|
||||||
|
==
|
||||||
|
--
|
||||||
|
::
|
||||||
|
++ enjs
|
||||||
|
=, enjs:format
|
||||||
|
|%
|
||||||
|
::
|
||||||
|
++ charge-update
|
||||||
|
|= u=^charge-update
|
||||||
|
^- json
|
||||||
|
%+ frond -.u
|
||||||
|
^- json
|
||||||
|
?- -.u
|
||||||
|
%del-charge s+desk.u
|
||||||
|
::
|
||||||
|
%initial
|
||||||
|
%- pairs
|
||||||
|
%+ turn ~(tap by initial.u)
|
||||||
|
|=([=desk c=^charge] [desk (charge c)])
|
||||||
|
::
|
||||||
|
%add-charge
|
||||||
|
%- pairs
|
||||||
|
:~ desk+s+desk.u
|
||||||
|
charge+(charge charge.u)
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ num
|
||||||
|
|= a=@u
|
||||||
|
^- ^tape
|
||||||
|
=/ p=json (numb a)
|
||||||
|
?> ?=(%n -.p)
|
||||||
|
(trip p.p)
|
||||||
|
::
|
||||||
|
++ version
|
||||||
|
|= v=^version
|
||||||
|
^- json
|
||||||
|
:- %s
|
||||||
|
%- crip
|
||||||
|
"{(num major.v)}.{(num minor.v)}.{(num patch.v)}"
|
||||||
|
::
|
||||||
|
++ merge
|
||||||
|
|= [a=json b=json]
|
||||||
|
^- json
|
||||||
|
?> &(?=(%o -.a) ?=(%o -.b))
|
||||||
|
[%o (~(uni by p.a) p.b)]
|
||||||
|
::
|
||||||
|
++ href
|
||||||
|
|= h=^href
|
||||||
|
%+ frond -.h
|
||||||
|
?- -.h
|
||||||
|
%site s+(spat path.h)
|
||||||
|
%glob
|
||||||
|
%- pairs
|
||||||
|
:~ base+s+base.h
|
||||||
|
glob-reference+(glob-reference glob-reference.h)
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ glob-reference
|
||||||
|
|= ref=^glob-reference
|
||||||
|
%- pairs
|
||||||
|
:~ hash+s+(scot %uv hash.ref)
|
||||||
|
location+(glob-location location.ref)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ glob-location
|
||||||
|
|= loc=^glob-location
|
||||||
|
^- json
|
||||||
|
%+ frond -.loc
|
||||||
|
?- -.loc
|
||||||
|
%http s+url.loc
|
||||||
|
%ames s+(scot %p ship.loc)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ charge
|
||||||
|
|= c=^charge
|
||||||
|
%+ merge (docket docket.c)
|
||||||
|
%- pairs
|
||||||
|
:~ chad+(chad chad.c)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ docket
|
||||||
|
|= d=^docket
|
||||||
|
^- json
|
||||||
|
%- pairs
|
||||||
|
:~ title+s+title.d
|
||||||
|
info+s+info.d
|
||||||
|
color+s+(scot %ux color.d)
|
||||||
|
href+(href href.d)
|
||||||
|
image+?~(image.d ~ s+u.image.d)
|
||||||
|
version+(version version.d)
|
||||||
|
license+s+license.d
|
||||||
|
website+s+website.d
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ chad
|
||||||
|
|= c=^chad
|
||||||
|
%+ frond -.c
|
||||||
|
?+ -.c ~
|
||||||
|
%hung s+err.c
|
||||||
|
==
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
|_ bil=(list dude:gall)
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime `^mime`[/text/x-bill (as-octs:mimes:html hoon)]
|
||||||
|
++ noun bil
|
||||||
|
++ hoon
|
||||||
|
^- @t
|
||||||
|
|^ (crip (of-wall:format (wrap-lines (spit-duz bil))))
|
||||||
|
::
|
||||||
|
++ wrap-lines
|
||||||
|
|= taz=wall
|
||||||
|
^- wall
|
||||||
|
?~ taz ["~"]~
|
||||||
|
:- (weld ":~ " i.taz)
|
||||||
|
%- snoc :_ "=="
|
||||||
|
(turn t.taz |=(t=tape (weld " " t)))
|
||||||
|
::
|
||||||
|
++ spit-duz
|
||||||
|
|= duz=(list dude:gall)
|
||||||
|
^- wall
|
||||||
|
(turn duz |=(=dude:gall ['%' (trip dude)]))
|
||||||
|
--
|
||||||
|
++ txt (to-wain:format hoon)
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ noun (list dude:gall)
|
||||||
|
++ mime
|
||||||
|
|= [=mite len=@ud tex=@]
|
||||||
|
~_ tex
|
||||||
|
!<((list dude:gall) (slap !>(~) (ream tex)))
|
||||||
|
--
|
||||||
|
++ grad %noun
|
||||||
|
--
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/css/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
=, eyre
|
||||||
|
=, mimes:html
|
||||||
|
|_ mud=@t
|
||||||
|
++ grow :: convert to
|
||||||
|
|%
|
||||||
|
++ mime [/text/css (as-octs mud)] :: convert to %mime
|
||||||
|
++ hymn :: convert to %hymn
|
||||||
|
|^ html
|
||||||
|
++ style ;style
|
||||||
|
;- (trip mud)
|
||||||
|
==
|
||||||
|
++ html ;html:(head:"{style}" body)
|
||||||
|
--
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|% :: convert from
|
||||||
|
++ mime |=([p=mite q=octs] (@t q.q))
|
||||||
|
++ noun @t :: clam from %noun
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/+ dock=docket
|
||||||
|
|_ =docket:dock
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime
|
||||||
|
^- ^mime
|
||||||
|
[/text/x-docket (as-octt:mimes:html (spit-docket:mime:dock docket))]
|
||||||
|
++ noun docket
|
||||||
|
++ json (docket:enjs:dock docket)
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
::
|
||||||
|
++ mime
|
||||||
|
|= [=mite len=@ud tex=@]
|
||||||
|
^- docket:dock
|
||||||
|
%- need
|
||||||
|
%- from-clauses:mime:dock
|
||||||
|
!<((list clause:dock) (slap !>(~) (ream tex)))
|
||||||
|
|
||||||
|
::
|
||||||
|
++ noun docket:dock
|
||||||
|
--
|
||||||
|
++ grad %noun
|
||||||
|
--
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
:::: /hoon/hoon/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
=, eyre
|
||||||
|
|_ own=@t
|
||||||
|
::
|
||||||
|
++ grow :: convert to
|
||||||
|
|%
|
||||||
|
++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime
|
||||||
|
++ hymn
|
||||||
|
;html
|
||||||
|
;head
|
||||||
|
;title:"Source"
|
||||||
|
;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js";
|
||||||
|
;script@"/lib/syntax/hoon.js";
|
||||||
|
;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/".
|
||||||
|
"codemirror/4.3.0/codemirror.min.css");
|
||||||
|
;link/"/lib/syntax/codemirror.css"(rel "stylesheet");
|
||||||
|
==
|
||||||
|
;body
|
||||||
|
;textarea#src:"{(trip own)}"
|
||||||
|
;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})'
|
||||||
|
==
|
||||||
|
==
|
||||||
|
++ txt
|
||||||
|
(to-wain:format own)
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|% :: convert from
|
||||||
|
++ mime |=([p=mite q=octs] q.q)
|
||||||
|
++ noun @t :: clam from %noun
|
||||||
|
++ txt of-wain:format
|
||||||
|
--
|
||||||
|
++ grad %txt
|
||||||
|
--
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/html/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
:::: compute
|
||||||
|
::
|
||||||
|
=, html
|
||||||
|
|_ htm=@t
|
||||||
|
++ grow :: convert to
|
||||||
|
^?
|
||||||
|
|% ::
|
||||||
|
++ mime [/text/html (met 3 htm) htm] :: to %mime
|
||||||
|
++ hymn (need (de-xml htm)) :: to %hymn
|
||||||
|
-- ::
|
||||||
|
++ grab ^?
|
||||||
|
|% :: convert from
|
||||||
|
++ noun @t :: clam from %noun
|
||||||
|
++ mime |=([p=mite q=octs] q.q) :: retrieve form %mime
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
|_ dat=@
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime [/image/x-icon (as-octs:mimes:html dat)]
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ mime |=([p=mite q=octs] q.q)
|
||||||
|
++ noun @
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
|_ dat=@
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime [/image/jpeg (as-octs:mimes:html dat)]
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ mime |=([p=mite q=octs] q.q)
|
||||||
|
++ noun @
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/js/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
=, eyre
|
||||||
|
|_ mud=@
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime [/application/javascript (as-octs:mimes:html (@t mud))]
|
||||||
|
++ hymn :: convert to %hymn
|
||||||
|
|^ html
|
||||||
|
++ script ;script
|
||||||
|
;- (trip (@t mud))
|
||||||
|
==
|
||||||
|
++ html ;html:(head:"{script}" body)
|
||||||
|
--
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|% :: convert from
|
||||||
|
++ mime |=([p=mite q=octs] (@t q.q))
|
||||||
|
++ noun cord :: clam from %noun
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/json/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
:::: compute
|
||||||
|
::
|
||||||
|
=, eyre
|
||||||
|
=, format
|
||||||
|
=, html
|
||||||
|
|_ jon=^json
|
||||||
|
::
|
||||||
|
++ grow :: convert to
|
||||||
|
|%
|
||||||
|
++ mime [/application/json (as-octs:mimes -:txt)] :: convert to %mime
|
||||||
|
++ txt [(en:json jon)]~
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|% :: convert from
|
||||||
|
++ mime |=([p=mite q=octs] (fall (de:json (@t q.q)) *^json))
|
||||||
|
++ noun ^json :: clam from %noun
|
||||||
|
++ numb numb:enjs
|
||||||
|
++ time time:enjs
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
::
|
||||||
|
/- *json-rpc
|
||||||
|
::
|
||||||
|
|_ res=response
|
||||||
|
::
|
||||||
|
++ grad %noun
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ noun res
|
||||||
|
--
|
||||||
|
++ grab :: convert from
|
||||||
|
|%
|
||||||
|
++ noun response :: from noun
|
||||||
|
++ httr :: from httr
|
||||||
|
|= hit=httr:eyre
|
||||||
|
^- response
|
||||||
|
~| hit
|
||||||
|
?: ?=(%2 (div p.hit 100))
|
||||||
|
%- json
|
||||||
|
?~ r.hit
|
||||||
|
a+~
|
||||||
|
(need (de:json:html q:u.r.hit))
|
||||||
|
fail+hit
|
||||||
|
++ json :: from json
|
||||||
|
=, dejs-soft:format
|
||||||
|
|= a=json
|
||||||
|
^- response
|
||||||
|
=; dere
|
||||||
|
=+ res=((ar dere) a)
|
||||||
|
?~ res (need (dere a))
|
||||||
|
[%batch u.res]
|
||||||
|
|= a=json
|
||||||
|
^- (unit response)
|
||||||
|
=/ res=(unit [@t json])
|
||||||
|
::TODO breaks when no id present
|
||||||
|
((ot id+so result+some ~) a)
|
||||||
|
?^ res `[%result u.res]
|
||||||
|
~| a
|
||||||
|
:+ ~ %error %- need
|
||||||
|
((ot id+so error+(ot code+no message+so ~) ~) a)
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
|_ kal=waft:clay
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime `^mime`[/text/x-kelvin (as-octs:mimes:html hoon)]
|
||||||
|
++ noun kal
|
||||||
|
++ hoon
|
||||||
|
%+ rap 3
|
||||||
|
%+ turn
|
||||||
|
%+ sort
|
||||||
|
~(tap in (waft-to-wefts:clay kal))
|
||||||
|
|= [a=weft b=weft]
|
||||||
|
?: =(lal.a lal.b)
|
||||||
|
(gte num.a num.b)
|
||||||
|
(gte lal.a lal.b)
|
||||||
|
|= =weft
|
||||||
|
(rap 3 '[%' (scot %tas lal.weft) ' ' (scot %ud num.weft) ']\0a' ~)
|
||||||
|
::
|
||||||
|
++ txt (to-wain:format hoon)
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ noun waft:clay
|
||||||
|
++ mime
|
||||||
|
|= [=mite len=@ud tex=@]
|
||||||
|
(cord-to-waft:clay tex)
|
||||||
|
--
|
||||||
|
++ grad %noun
|
||||||
|
--
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/mime/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
|_ own=mime
|
||||||
|
++ grow
|
||||||
|
^?
|
||||||
|
|%
|
||||||
|
++ jam `@`q.q.own
|
||||||
|
--
|
||||||
|
::
|
||||||
|
++ grab :: convert from
|
||||||
|
^?
|
||||||
|
|%
|
||||||
|
++ noun mime :: clam from %noun
|
||||||
|
++ tape
|
||||||
|
|=(a=_"" [/application/x-urb-unknown (as-octt:mimes:html a)])
|
||||||
|
--
|
||||||
|
++ grad
|
||||||
|
^?
|
||||||
|
|%
|
||||||
|
++ form %mime
|
||||||
|
++ diff |=(mime +<)
|
||||||
|
++ pact |=(mime +<)
|
||||||
|
++ join |=([mime mime] `(unit mime)`~)
|
||||||
|
++ mash
|
||||||
|
|= [[ship desk mime] [ship desk mime]]
|
||||||
|
^- mime
|
||||||
|
~|(%mime-mash !!)
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/noun/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
!:
|
||||||
|
:::: A minimal noun mark
|
||||||
|
|_ non=*
|
||||||
|
++ grab |%
|
||||||
|
++ noun *
|
||||||
|
--
|
||||||
|
++ grow |%
|
||||||
|
++ mime [/application/x-urb-jam (as-octs:mimes:html (jam non))]
|
||||||
|
--
|
||||||
|
++ grad
|
||||||
|
|%
|
||||||
|
++ form %noun
|
||||||
|
++ diff |=(* +<)
|
||||||
|
++ pact |=(* +<)
|
||||||
|
++ join |=([* *] *(unit *))
|
||||||
|
++ mash |=([[ship desk *] [ship desk *]] `*`~|(%noun-mash !!))
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
|_ dat=@
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime [/image/png (as-octs:mimes:html dat)]
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ mime |=([p=mite q=octs] q.q)
|
||||||
|
++ noun @
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
|_ s=ship
|
||||||
|
++ grad %noun
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ noun s
|
||||||
|
++ json s+(scot %p s)
|
||||||
|
++ mime
|
||||||
|
^- ^mime
|
||||||
|
[/text/x-ship (as-octt:mimes:html (scow %p s))]
|
||||||
|
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ noun ship
|
||||||
|
++ json (su:dejs:format ;~(pfix sig fed:ag))
|
||||||
|
++ mime
|
||||||
|
|= [=mite len=@ tex=@]
|
||||||
|
(slav %p (snag 0 (to-wain:format tex)))
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/txt-diff/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
|_ txt-diff=(urge:clay cord)
|
||||||
|
::
|
||||||
|
++ grad %noun
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ noun txt-diff
|
||||||
|
--
|
||||||
|
++ grab :: convert from
|
||||||
|
|%
|
||||||
|
++ noun (urge:clay cord) :: make from %noun
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,274 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/txt/mar
|
||||||
|
::
|
||||||
|
/? 310
|
||||||
|
::
|
||||||
|
=, clay
|
||||||
|
=, differ
|
||||||
|
=, format
|
||||||
|
=, mimes:html
|
||||||
|
|_ txt=wain
|
||||||
|
::
|
||||||
|
++ grab :: convert from
|
||||||
|
|%
|
||||||
|
++ mime |=((pair mite octs) (to-wain q.q))
|
||||||
|
++ noun wain :: clam from %noun
|
||||||
|
--
|
||||||
|
++ grow
|
||||||
|
=> v=.
|
||||||
|
|%
|
||||||
|
++ mime => v [/text/plain (as-octs (of-wain txt))]
|
||||||
|
--
|
||||||
|
++ grad
|
||||||
|
|%
|
||||||
|
++ form %txt-diff
|
||||||
|
++ diff
|
||||||
|
|= tyt=wain
|
||||||
|
^- (urge cord)
|
||||||
|
(lusk txt tyt (loss txt tyt))
|
||||||
|
::
|
||||||
|
++ pact
|
||||||
|
|= dif=(urge cord)
|
||||||
|
~| [%pacting dif]
|
||||||
|
^- wain
|
||||||
|
(lurk txt dif)
|
||||||
|
::
|
||||||
|
++ join
|
||||||
|
|= [ali=(urge cord) bob=(urge cord)]
|
||||||
|
^- (unit (urge cord))
|
||||||
|
|^
|
||||||
|
=. ali (clean ali)
|
||||||
|
=. bob (clean bob)
|
||||||
|
|- ^- (unit (urge cord))
|
||||||
|
?~ ali `bob
|
||||||
|
?~ bob `ali
|
||||||
|
?- -.i.ali
|
||||||
|
%&
|
||||||
|
?- -.i.bob
|
||||||
|
%&
|
||||||
|
?: =(p.i.ali p.i.bob)
|
||||||
|
%+ bind $(ali t.ali, bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
?: (gth p.i.ali p.i.bob)
|
||||||
|
%+ bind $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.bob cud])
|
||||||
|
%+ bind $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?: =(p.i.ali (lent p.i.bob))
|
||||||
|
%+ bind $(ali t.ali, bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.bob cud])
|
||||||
|
?: (gth p.i.ali (lent p.i.bob))
|
||||||
|
%+ bind $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.bob cud])
|
||||||
|
~
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?- -.i.bob
|
||||||
|
%|
|
||||||
|
?. =(i.ali i.bob)
|
||||||
|
~
|
||||||
|
%+ bind $(ali t.ali, bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
::
|
||||||
|
%&
|
||||||
|
?: =(p.i.bob (lent p.i.ali))
|
||||||
|
%+ bind $(ali t.ali, bob t.bob)
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
?: (gth p.i.bob (lent p.i.ali))
|
||||||
|
%+ bind $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))
|
||||||
|
|=(cud=(urge cord) [i.ali cud])
|
||||||
|
~
|
||||||
|
==
|
||||||
|
==
|
||||||
|
++ clean :: clean
|
||||||
|
|= wig=(urge cord)
|
||||||
|
^- (urge cord)
|
||||||
|
?~ wig ~
|
||||||
|
?~ t.wig wig
|
||||||
|
?: ?=(%& -.i.wig)
|
||||||
|
?: ?=(%& -.i.t.wig)
|
||||||
|
$(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig])
|
||||||
|
[i.wig $(wig t.wig)]
|
||||||
|
?: ?=(%| -.i.t.wig)
|
||||||
|
$(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig])
|
||||||
|
[i.wig $(wig t.wig)]
|
||||||
|
--
|
||||||
|
::
|
||||||
|
++ mash
|
||||||
|
|= $: [als=ship ald=desk ali=(urge cord)]
|
||||||
|
[bos=ship bod=desk bob=(urge cord)]
|
||||||
|
==
|
||||||
|
^- (urge cord)
|
||||||
|
|^
|
||||||
|
=. ali (clean ali)
|
||||||
|
=. bob (clean bob)
|
||||||
|
|- ^- (urge cord)
|
||||||
|
?~ ali bob
|
||||||
|
?~ bob ali
|
||||||
|
?- -.i.ali
|
||||||
|
%&
|
||||||
|
?- -.i.bob
|
||||||
|
%&
|
||||||
|
?: =(p.i.ali p.i.bob)
|
||||||
|
[i.ali $(ali t.ali, bob t.bob)]
|
||||||
|
?: (gth p.i.ali p.i.bob)
|
||||||
|
[i.bob $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)]
|
||||||
|
[i.ali $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))]
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?: =(p.i.ali (lent p.i.bob))
|
||||||
|
[i.bob $(ali t.ali, bob t.bob)]
|
||||||
|
?: (gth p.i.ali (lent p.i.bob))
|
||||||
|
[i.bob $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)]
|
||||||
|
=/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
|
||||||
|
(resolve ali bob)
|
||||||
|
[fic $(ali ali, bob bob)]
|
||||||
|
:: ~ :: here, alice is good for a while, but not for the whole
|
||||||
|
== :: length of bob's changes
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?- -.i.bob
|
||||||
|
%|
|
||||||
|
=/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
|
||||||
|
(resolve ali bob)
|
||||||
|
[fic $(ali ali, bob bob)]
|
||||||
|
::
|
||||||
|
%&
|
||||||
|
?: =(p.i.bob (lent p.i.ali))
|
||||||
|
[i.ali $(ali t.ali, bob t.bob)]
|
||||||
|
?: (gth p.i.bob (lent p.i.ali))
|
||||||
|
[i.ali $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))]
|
||||||
|
=/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
|
||||||
|
(resolve ali bob)
|
||||||
|
[fic $(ali ali, bob bob)]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ annotate :: annotate conflict
|
||||||
|
|= $: ali=(list @t)
|
||||||
|
bob=(list @t)
|
||||||
|
bas=(list @t)
|
||||||
|
==
|
||||||
|
^- (list @t)
|
||||||
|
%- zing
|
||||||
|
^- (list (list @t))
|
||||||
|
%- flop
|
||||||
|
^- (list (list @t))
|
||||||
|
:- :_ ~
|
||||||
|
%^ cat 3 '<<<<<<<<<<<<'
|
||||||
|
%^ cat 3 ' '
|
||||||
|
%^ cat 3 `@t`(scot %p bos)
|
||||||
|
%^ cat 3 '/'
|
||||||
|
bod
|
||||||
|
|
||||||
|
:- bob
|
||||||
|
:- ~['------------']
|
||||||
|
:- bas
|
||||||
|
:- ~['++++++++++++']
|
||||||
|
:- ali
|
||||||
|
:- :_ ~
|
||||||
|
%^ cat 3 '>>>>>>>>>>>>'
|
||||||
|
%^ cat 3 ' '
|
||||||
|
%^ cat 3 `@t`(scot %p als)
|
||||||
|
%^ cat 3 '/'
|
||||||
|
ald
|
||||||
|
~
|
||||||
|
::
|
||||||
|
++ clean :: clean
|
||||||
|
|= wig=(urge cord)
|
||||||
|
^- (urge cord)
|
||||||
|
?~ wig ~
|
||||||
|
?~ t.wig wig
|
||||||
|
?: ?=(%& -.i.wig)
|
||||||
|
?: ?=(%& -.i.t.wig)
|
||||||
|
$(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig])
|
||||||
|
[i.wig $(wig t.wig)]
|
||||||
|
?: ?=(%| -.i.t.wig)
|
||||||
|
$(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig])
|
||||||
|
[i.wig $(wig t.wig)]
|
||||||
|
::
|
||||||
|
++ resolve
|
||||||
|
|= [ali=(urge cord) bob=(urge cord)]
|
||||||
|
^- [fic=[%| p=(list cord) q=(list cord)] ali=(urge cord) bob=(urge cord)]
|
||||||
|
=- [[%| bac (annotate alc boc bac)] ali bob]
|
||||||
|
|- ^- $: $: bac=(list cord)
|
||||||
|
alc=(list cord)
|
||||||
|
boc=(list cord)
|
||||||
|
==
|
||||||
|
ali=(urge cord)
|
||||||
|
bob=(urge cord)
|
||||||
|
==
|
||||||
|
?~ ali [[~ ~ ~] ali bob]
|
||||||
|
?~ bob [[~ ~ ~] ali bob]
|
||||||
|
?- -.i.ali
|
||||||
|
%&
|
||||||
|
?- -.i.bob
|
||||||
|
%& [[~ ~ ~] ali bob] :: no conflict
|
||||||
|
%|
|
||||||
|
=+ lob=(lent p.i.bob)
|
||||||
|
?: =(lob p.i.ali)
|
||||||
|
[[p.i.bob p.i.bob q.i.bob] t.ali t.bob]
|
||||||
|
?: (lth lob p.i.ali)
|
||||||
|
[[p.i.bob p.i.bob q.i.bob] [[%& (sub p.i.ali lob)] t.ali] t.bob]
|
||||||
|
=+ wat=(scag (sub lob p.i.ali) p.i.bob)
|
||||||
|
=+ ^= res
|
||||||
|
%= $
|
||||||
|
ali t.ali
|
||||||
|
bob [[%| (scag (sub lob p.i.ali) p.i.bob) ~] t.bob]
|
||||||
|
==
|
||||||
|
:* :* (welp bac.res wat)
|
||||||
|
(welp alc.res wat)
|
||||||
|
(welp boc.res q.i.bob)
|
||||||
|
==
|
||||||
|
ali.res
|
||||||
|
bob.res
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
?- -.i.bob
|
||||||
|
%&
|
||||||
|
=+ loa=(lent p.i.ali)
|
||||||
|
?: =(loa p.i.bob)
|
||||||
|
[[p.i.ali q.i.ali p.i.ali] t.ali t.bob]
|
||||||
|
?: (lth loa p.i.bob)
|
||||||
|
[[p.i.ali q.i.ali p.i.ali] t.ali [[%& (sub p.i.bob loa)] t.bob]]
|
||||||
|
=+ wat=(slag (sub loa p.i.bob) p.i.ali)
|
||||||
|
=+ ^= res
|
||||||
|
%= $
|
||||||
|
ali [[%| (scag (sub loa p.i.bob) p.i.ali) ~] t.ali]
|
||||||
|
bob t.bob
|
||||||
|
==
|
||||||
|
:* :* (welp bac.res wat)
|
||||||
|
(welp alc.res q.i.ali)
|
||||||
|
(welp boc.res wat)
|
||||||
|
==
|
||||||
|
ali.res
|
||||||
|
bob.res
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%|
|
||||||
|
=+ loa=(lent p.i.ali)
|
||||||
|
=+ lob=(lent p.i.bob)
|
||||||
|
?: =(loa lob)
|
||||||
|
[[p.i.ali q.i.ali q.i.bob] t.ali t.bob]
|
||||||
|
=+ ^= res
|
||||||
|
?: (gth loa lob)
|
||||||
|
$(ali [[%| (scag (sub loa lob) p.i.ali) ~] t.ali], bob t.bob)
|
||||||
|
~& [%scagging loa=loa pibob=p.i.bob slag=(scag loa p.i.bob)]
|
||||||
|
$(ali t.ali, bob [[%| (scag (sub lob loa) p.i.bob) ~] t.bob])
|
||||||
|
:* :* (welp bac.res ?:((gth loa lob) p.i.bob p.i.ali))
|
||||||
|
(welp alc.res q.i.ali)
|
||||||
|
(welp boc.res q.i.bob)
|
||||||
|
==
|
||||||
|
ali.res
|
||||||
|
bob.res
|
||||||
|
==
|
||||||
|
==
|
||||||
|
==
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
|_ dat=octs
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime [/font/woff dat]
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ mime |=([=mite =octs] octs)
|
||||||
|
++ noun octs
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
|_ dat=octs
|
||||||
|
++ grow
|
||||||
|
|%
|
||||||
|
++ mime [/font/woff2 dat]
|
||||||
|
--
|
||||||
|
++ grab
|
||||||
|
|%
|
||||||
|
++ mime |=([=mite =octs] octs)
|
||||||
|
++ noun octs
|
||||||
|
--
|
||||||
|
++ grad %mime
|
||||||
|
--
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
::
|
||||||
|
:::: /hoon/xhtml/mar
|
||||||
|
::
|
||||||
|
/= xhtml /mar/html
|
||||||
|
xhtml
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
|%
|
||||||
|
::
|
||||||
|
+$ version
|
||||||
|
[major=@ud minor=@ud patch=@ud]
|
||||||
|
::
|
||||||
|
+$ glob (map path mime)
|
||||||
|
::
|
||||||
|
+$ url cord
|
||||||
|
:: $glob-location: How to retrieve a glob
|
||||||
|
::
|
||||||
|
+$ glob-reference
|
||||||
|
[hash=@uvH location=glob-location]
|
||||||
|
::
|
||||||
|
+$ glob-location
|
||||||
|
$% [%http =url]
|
||||||
|
[%ames =ship]
|
||||||
|
==
|
||||||
|
:: $href: Where a tile links to
|
||||||
|
::
|
||||||
|
+$ href
|
||||||
|
$% [%glob base=term =glob-reference]
|
||||||
|
[%site =path]
|
||||||
|
==
|
||||||
|
:: $chad: State of a docket
|
||||||
|
::
|
||||||
|
+$ chad
|
||||||
|
$~ [%install ~]
|
||||||
|
$% :: Done
|
||||||
|
[%glob =glob]
|
||||||
|
[%site ~]
|
||||||
|
:: Waiting
|
||||||
|
[%install ~]
|
||||||
|
[%suspend glob=(unit glob)]
|
||||||
|
:: Error
|
||||||
|
[%hung err=cord]
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: $charge: A realized $docket
|
||||||
|
::
|
||||||
|
+$ charge
|
||||||
|
$: =docket
|
||||||
|
=chad
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: $clause: A key and value, as part of a docket
|
||||||
|
::
|
||||||
|
:: Only used to parse $docket
|
||||||
|
::
|
||||||
|
+$ clause
|
||||||
|
$% [%title title=@t]
|
||||||
|
[%info info=@t]
|
||||||
|
[%color color=@ux]
|
||||||
|
[%glob-http url=cord hash=@uvH]
|
||||||
|
[%glob-ames =ship hash=@uvH]
|
||||||
|
[%image =url]
|
||||||
|
[%site =path]
|
||||||
|
[%base base=term]
|
||||||
|
[%version =version]
|
||||||
|
[%website website=url]
|
||||||
|
[%license license=cord]
|
||||||
|
==
|
||||||
|
::
|
||||||
|
:: $docket: A description of JS bundles for a desk
|
||||||
|
::
|
||||||
|
+$ docket
|
||||||
|
$: %1
|
||||||
|
title=@t
|
||||||
|
info=@t
|
||||||
|
color=@ux
|
||||||
|
=href
|
||||||
|
image=(unit url)
|
||||||
|
=version
|
||||||
|
website=url
|
||||||
|
license=cord
|
||||||
|
==
|
||||||
|
::
|
||||||
|
+$ charge-update
|
||||||
|
$% [%initial initial=(map desk charge)]
|
||||||
|
[%add-charge =desk =charge]
|
||||||
|
[%del-charge =desk]
|
||||||
|
==
|
||||||
|
--
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[%zuse 412]
|
||||||
@@ -1,23 +1,26 @@
|
|||||||
FROM ethpandaops/ethereum-genesis-generator:3.0.0 AS ethgen
|
FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen
|
||||||
|
|
||||||
FROM golang:1.20-alpine as builder
|
FROM golang:1.20-alpine as builder
|
||||||
|
|
||||||
RUN apk add --no-cache python3 py3-pip make bash envsubst jq
|
RUN apk add --no-cache python3 py3-pip
|
||||||
|
|
||||||
|
COPY genesis /opt/genesis
|
||||||
|
|
||||||
# Install ethereum-genesis-generator tools
|
# Install ethereum-genesis-generator tools
|
||||||
|
COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/
|
||||||
|
COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/
|
||||||
COPY --from=ethgen /apps /apps
|
COPY --from=ethgen /apps /apps
|
||||||
RUN cd /apps/el-gen && pip3 install --break-system-packages -r requirements.txt
|
RUN cd /apps/el-gen && pip3 install --break-system-packages -r requirements.txt
|
||||||
RUN pip3 install --break-system-packages --upgrade "web3==v6.15.1"
|
# web3==5.24.0 used by el-gen is broken on python 3.11
|
||||||
|
RUN pip3 install --break-system-packages --upgrade "web3==6.5.0"
|
||||||
RUN pip3 install --break-system-packages --upgrade "typing-extensions"
|
RUN pip3 install --break-system-packages --upgrade "typing-extensions"
|
||||||
|
|
||||||
# Install tool to generate initial block
|
|
||||||
RUN go install github.com/cerc-io/eth-dump-genblock@b29516740fc01cf1d1d623acbfd0e9a2b6440a96
|
|
||||||
|
|
||||||
# Build genesis config
|
# Build genesis config
|
||||||
COPY genesis /opt/genesis
|
RUN apk add --no-cache make bash envsubst jq
|
||||||
RUN cd /opt/genesis && make genesis-el
|
RUN cd /opt/genesis && make genesis-el
|
||||||
|
|
||||||
# Snag the genesis block info.
|
# Snag the genesis block info.
|
||||||
|
RUN go install github.com/cerc-io/eth-dump-genblock@latest
|
||||||
RUN eth-dump-genblock /opt/genesis/build/el/geth.json > /opt/genesis/build/el/genesis_block.json
|
RUN eth-dump-genblock /opt/genesis/build/el/geth.json > /opt/genesis/build/el/genesis_block.json
|
||||||
|
|
||||||
FROM alpine:latest
|
FROM alpine:latest
|
||||||
|
|||||||
+27
-3
@@ -9,8 +9,32 @@ mkdir -p ../build/el
|
|||||||
tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX)
|
tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX)
|
||||||
envsubst < el-config.yaml > $tmp_dir/genesis-config.yaml
|
envsubst < el-config.yaml > $tmp_dir/genesis-config.yaml
|
||||||
|
|
||||||
python3 /apps/el-gen/genesis_geth.py $tmp_dir/genesis-config.yaml | \
|
ttd=`cat $tmp_dir/genesis-config.yaml | grep terminal_total_difficulty | awk '{ print $2 }'`
|
||||||
jq 'del(.config.pragueTime)' \
|
homestead_block=`cat $tmp_dir/genesis-config.yaml | grep homestead_block | awk '{ print $2 }'`
|
||||||
> ../build/el/geth.json
|
eip150_block=`cat $tmp_dir/genesis-config.yaml | grep eip150_block | awk '{ print $2 }'`
|
||||||
|
eip155_block=`cat $tmp_dir/genesis-config.yaml | grep eip155_block | awk '{ print $2 }'`
|
||||||
|
eip158_block=`cat $tmp_dir/genesis-config.yaml | grep eip158_block | awk '{ print $2 }'`
|
||||||
|
byzantium_block=`cat $tmp_dir/genesis-config.yaml | grep byzantium_block | awk '{ print $2 }'`
|
||||||
|
constantinople_block=`cat $tmp_dir/genesis-config.yaml | grep constantinople_block | awk '{ print $2 }'`
|
||||||
|
petersburg_block=`cat $tmp_dir/genesis-config.yaml | grep petersburg_block | awk '{ print $2 }'`
|
||||||
|
istanbul_block=`cat $tmp_dir/genesis-config.yaml | grep istanbul_block | awk '{ print $2 }'`
|
||||||
|
berlin_block=`cat $tmp_dir/genesis-config.yaml | grep berlin_block | awk '{ print $2 }'`
|
||||||
|
london_block=`cat $tmp_dir/genesis-config.yaml | grep london_block | awk '{ print $2 }'`
|
||||||
|
merge_fork_block=`cat $tmp_dir/genesis-config.yaml | grep merge_fork_block | awk '{ print $2 }'`
|
||||||
|
|
||||||
|
python3 /apps/el-gen/genesis_geth.py $tmp_dir/genesis-config.yaml | \
|
||||||
|
jq ".config.terminalTotalDifficulty=$ttd" | \
|
||||||
|
jq ".config.homesteadBlock=$homestead_block" | \
|
||||||
|
jq ".config.eip150Block=$eip150_block" | \
|
||||||
|
jq ".config.eip155Block=$eip155_block" | \
|
||||||
|
jq ".config.eip158Block=$eip158_block" | \
|
||||||
|
jq ".config.byzantiumBlock=$byzantium_block" | \
|
||||||
|
jq ".config.constantinopleBlock=$constantinople_block" | \
|
||||||
|
jq ".config.petersburgBlock=$petersburg_block" | \
|
||||||
|
jq ".config.istanbulBlock=$istanbul_block" | \
|
||||||
|
jq ".config.berlinBlock=$berlin_block" | \
|
||||||
|
jq ".config.londonBlock=$london_block" | \
|
||||||
|
jq ".config.mergeForkBlock=$merge_fork_block" | \
|
||||||
|
jq ".config.mergeNetsplitBlock=$merge_fork_block" \
|
||||||
|
> ../build/el/geth.json
|
||||||
python3 ../accounts/mnemonic_to_csv.py $tmp_dir/genesis-config.yaml > ../build/el/accounts.csv
|
python3 ../accounts/mnemonic_to_csv.py $tmp_dir/genesis-config.yaml > ../build/el/accounts.csv
|
||||||
|
|||||||
+19
-5
@@ -10,8 +10,22 @@ el_premine_addrs: {}
|
|||||||
chain_id: 1212
|
chain_id: 1212
|
||||||
deposit_contract_address: "0x1212121212121212121212121212121212121212"
|
deposit_contract_address: "0x1212121212121212121212121212121212121212"
|
||||||
genesis_timestamp: 0
|
genesis_timestamp: 0
|
||||||
genesis_delay: 0
|
terminal_total_difficulty: 1000
|
||||||
deneb_fork_epoch: 0
|
homestead_block: 1
|
||||||
# note: only needed as workaround https://github.com/ethpandaops/ethereum-genesis-generator/pull/105
|
eip150_block: 1
|
||||||
electra_fork_epoch: 0
|
eip155_block: 1
|
||||||
slot_duration_in_seconds: 3
|
eip158_block: 1
|
||||||
|
byzantium_block: 1
|
||||||
|
constantinople_block: 1
|
||||||
|
petersburg_block: 1
|
||||||
|
istanbul_block: 1
|
||||||
|
berlin_block: 1
|
||||||
|
london_block: 1
|
||||||
|
merge_fork_block: 1
|
||||||
|
|
||||||
|
clique:
|
||||||
|
enabled: false
|
||||||
|
signers:
|
||||||
|
- 36d56343bc308d4ffaac2f793d121aba905fa6cc
|
||||||
|
- 5e762d4a3847cadaf40a4b0c39574b0ff6698c78
|
||||||
|
- 15d7acc1019fdf8ab4f0f7bd31ec1487ecb5a2bd
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ fi
|
|||||||
|
|
||||||
ETHERBASE=`cat /opt/testnet/build/el/accounts.csv | head -1 | cut -d',' -f2`
|
ETHERBASE=`cat /opt/testnet/build/el/accounts.csv | head -1 | cut -d',' -f2`
|
||||||
NETWORK_ID=`cat /opt/testnet/el/el-config.yaml | grep 'chain_id' | awk '{ print $2 }'`
|
NETWORK_ID=`cat /opt/testnet/el/el-config.yaml | grep 'chain_id' | awk '{ print $2 }'`
|
||||||
NETRESTRICT=`ip addr | grep -w inet | grep -v '127.0' | awk '{print $2}'`
|
NETRESTRICT=`ip addr | grep inet | grep -v '127.0' | awk '{print $2}'`
|
||||||
CERC_ETH_DATADIR="${CERC_ETH_DATADIR:-$HOME/ethdata}"
|
CERC_ETH_DATADIR="${CERC_ETH_DATADIR:-$HOME/ethdata}"
|
||||||
CERC_PLUGINS_DIR="${CERC_PLUGINS_DIR:-/usr/local/lib/plugeth}"
|
CERC_PLUGINS_DIR="${CERC_PLUGINS_DIR:-/usr/local/lib/plugeth}"
|
||||||
|
|
||||||
@@ -102,13 +102,6 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
OTHER_OPTS=""
|
|
||||||
# miner options were removed in v1.12
|
|
||||||
GETH_VERSION=$(geth --version | grep -io '[0-9][0-9a-z.-]*')
|
|
||||||
if echo -e "$GETH_VERSION\n1.12" | sort -Vc; then
|
|
||||||
OTHER_OPTS="--miner.threads=1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
$START_CMD \
|
$START_CMD \
|
||||||
--datadir="${CERC_ETH_DATADIR}" \
|
--datadir="${CERC_ETH_DATADIR}" \
|
||||||
--bootnodes="${ENODE}" \
|
--bootnodes="${ENODE}" \
|
||||||
@@ -133,12 +126,12 @@ else
|
|||||||
--cache.preimages \
|
--cache.preimages \
|
||||||
--syncmode=full \
|
--syncmode=full \
|
||||||
--mine \
|
--mine \
|
||||||
|
--miner.threads=1 \
|
||||||
--metrics \
|
--metrics \
|
||||||
--metrics.addr="0.0.0.0" \
|
--metrics.addr="0.0.0.0" \
|
||||||
--verbosity=${CERC_GETH_VERBOSITY:-3} \
|
--verbosity=${CERC_GETH_VERBOSITY:-3} \
|
||||||
--log.vmodule="${CERC_GETH_VMODULE:-statediff/*=5}" \
|
--log.vmodule="${CERC_GETH_VMODULE:-statediff/*=5}" \
|
||||||
--miner.etherbase="${ETHERBASE}" \
|
--miner.etherbase="${ETHERBASE}" \
|
||||||
${OTHER_OPTS} \
|
|
||||||
${STATEDIFF_OPTS} \
|
${STATEDIFF_OPTS} \
|
||||||
&
|
&
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
FROM cerc/lighthouse-cli:local AS lcli
|
FROM cerc/lighthouse-cli:local AS lcli
|
||||||
|
FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen
|
||||||
FROM cerc/fixturenet-eth-genesis:local AS fnetgen
|
FROM cerc/fixturenet-eth-genesis:local AS fnetgen
|
||||||
|
|
||||||
FROM cerc/lighthouse:local
|
FROM cerc/lighthouse:local
|
||||||
@@ -11,13 +12,16 @@ RUN apt-get update && apt-get -y upgrade && apt-get install -y --no-install-reco
|
|||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY --from=lcli /usr/local/bin/lcli /usr/local/bin/lcli
|
|
||||||
COPY --from=fnetgen /opt/genesis/el /opt/testnet/el
|
|
||||||
COPY --from=fnetgen /opt/genesis/build/el /opt/testnet/build/el
|
|
||||||
|
|
||||||
COPY genesis /opt/testnet
|
COPY genesis /opt/testnet
|
||||||
COPY run-cl.sh /opt/testnet/run.sh
|
COPY run-cl.sh /opt/testnet/run.sh
|
||||||
|
|
||||||
|
COPY --from=lcli /usr/local/bin/lcli /usr/local/bin/lcli
|
||||||
|
COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/eth2-testnet-genesis
|
||||||
|
COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/eth2-val-tools
|
||||||
|
COPY --from=ethgen /apps /apps
|
||||||
|
COPY --from=fnetgen /opt/genesis/el /opt/testnet/el
|
||||||
|
COPY --from=fnetgen /opt/genesis/build/el /opt/testnet/build/el
|
||||||
|
|
||||||
RUN cd /opt/testnet && make genesis-cl
|
RUN cd /opt/testnet && make genesis-cl
|
||||||
|
|
||||||
# Work around some bugs in lcli where the default path is always used.
|
# Work around some bugs in lcli where the default path is always used.
|
||||||
|
|||||||
+1
@@ -10,6 +10,7 @@ set -Eeuo pipefail
|
|||||||
source ./vars.env
|
source ./vars.env
|
||||||
|
|
||||||
SUBSCRIBE_ALL_SUBNETS=
|
SUBSCRIBE_ALL_SUBNETS=
|
||||||
|
DEBUG_LEVEL=${DEBUG_LEVEL:-debug}
|
||||||
|
|
||||||
# Get positional arguments
|
# Get positional arguments
|
||||||
data_dir=$DATADIR/node_${NODE_NUMBER}
|
data_dir=$DATADIR/node_${NODE_NUMBER}
|
||||||
|
|||||||
+2
@@ -9,6 +9,8 @@ set -Eeuo pipefail
|
|||||||
|
|
||||||
source ./vars.env
|
source ./vars.env
|
||||||
|
|
||||||
|
DEBUG_LEVEL=${1:-info}
|
||||||
|
|
||||||
echo "Starting bootnode"
|
echo "Starting bootnode"
|
||||||
|
|
||||||
# Clean up existing ENR dir to avoid node connectivity issues on a restart
|
# Clean up existing ENR dir to avoid node connectivity issues on a restart
|
||||||
|
|||||||
+13
-7
@@ -1,6 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# See https://github.com/sigp/lighthouse/scripts/local_testnet/setup.sh
|
|
||||||
#
|
#
|
||||||
# Deploys the deposit contract and makes deposits for $VALIDATOR_COUNT insecure deterministic validators.
|
# Deploys the deposit contract and makes deposits for $VALIDATOR_COUNT insecure deterministic validators.
|
||||||
# Produces a testnet specification and a genesis state where the genesis time
|
# Produces a testnet specification and a genesis state where the genesis time
|
||||||
@@ -25,26 +24,23 @@ echo "(Note: errors of the form 'WARN: Scrypt parameters are too weak...' below
|
|||||||
lcli \
|
lcli \
|
||||||
new-testnet \
|
new-testnet \
|
||||||
--spec $SPEC_PRESET \
|
--spec $SPEC_PRESET \
|
||||||
--testnet-dir $TESTNET_DIR \
|
|
||||||
--deposit-contract-address $ETH1_DEPOSIT_CONTRACT_ADDRESS \
|
--deposit-contract-address $ETH1_DEPOSIT_CONTRACT_ADDRESS \
|
||||||
|
--testnet-dir $TESTNET_DIR \
|
||||||
--min-genesis-active-validator-count $GENESIS_VALIDATOR_COUNT \
|
--min-genesis-active-validator-count $GENESIS_VALIDATOR_COUNT \
|
||||||
--validator-count $VALIDATOR_COUNT \
|
--validator-count $VALIDATOR_COUNT \
|
||||||
--min-genesis-time $GENESIS_TIME \
|
--min-genesis-time $GENESIS_TIME \
|
||||||
--genesis-delay $GENESIS_DELAY \
|
--genesis-delay $GENESIS_DELAY \
|
||||||
--genesis-fork-version $GENESIS_FORK_VERSION \
|
--genesis-fork-version $GENESIS_FORK_VERSION \
|
||||||
--altair-fork-epoch $ALTAIR_FORK_EPOCH \
|
--altair-fork-epoch $ALTAIR_FORK_EPOCH \
|
||||||
--bellatrix-fork-epoch $BELLATRIX_FORK_EPOCH \
|
--bellatrix-fork-epoch $MERGE_FORK_EPOCH \
|
||||||
--capella-fork-epoch $CAPELLA_FORK_EPOCH \
|
|
||||||
--deneb-fork-epoch $DENEB_FORK_EPOCH \
|
|
||||||
--eth1-id $ETH1_CHAIN_ID \
|
--eth1-id $ETH1_CHAIN_ID \
|
||||||
--eth1-block-hash $ETH1_BLOCK_HASH \
|
--eth1-block-hash $ETH1_BLOCK_HASH \
|
||||||
--eth1-follow-distance 1 \
|
--eth1-follow-distance 1 \
|
||||||
--seconds-per-slot $SECONDS_PER_SLOT \
|
--seconds-per-slot $SECONDS_PER_SLOT \
|
||||||
--seconds-per-eth1-block $SECONDS_PER_ETH1_BLOCK \
|
--seconds-per-eth1-block $SECONDS_PER_ETH1_BLOCK \
|
||||||
--interop-genesis-state \
|
|
||||||
--force
|
--force
|
||||||
|
|
||||||
echo Specification and genesis.ssz generated at $TESTNET_DIR.
|
echo Specification generated at $TESTNET_DIR.
|
||||||
echo "Generating $VALIDATOR_COUNT validators concurrently... (this may take a while)"
|
echo "Generating $VALIDATOR_COUNT validators concurrently... (this may take a while)"
|
||||||
|
|
||||||
lcli \
|
lcli \
|
||||||
@@ -54,3 +50,13 @@ lcli \
|
|||||||
--node-count $BN_COUNT
|
--node-count $BN_COUNT
|
||||||
|
|
||||||
echo Validators generated with keystore passwords at $DATADIR.
|
echo Validators generated with keystore passwords at $DATADIR.
|
||||||
|
echo "Building genesis state... (this might take a while)"
|
||||||
|
|
||||||
|
lcli \
|
||||||
|
interop-genesis \
|
||||||
|
--spec $SPEC_PRESET \
|
||||||
|
--genesis-time $GENESIS_TIME \
|
||||||
|
--testnet-dir $TESTNET_DIR \
|
||||||
|
$GENESIS_VALIDATOR_COUNT
|
||||||
|
|
||||||
|
echo Created genesis state in $TESTNET_DIR
|
||||||
|
|||||||
+2
@@ -8,6 +8,8 @@ set -Eeuo pipefail
|
|||||||
|
|
||||||
source ./vars.env
|
source ./vars.env
|
||||||
|
|
||||||
|
DEBUG_LEVEL=info
|
||||||
|
|
||||||
BUILDER_PROPOSALS=
|
BUILDER_PROPOSALS=
|
||||||
|
|
||||||
# Get options
|
# Get options
|
||||||
|
|||||||
+1
-6
@@ -25,9 +25,7 @@ BOOTNODE_PORT=${BOOTNODE_PORT:-4242}
|
|||||||
|
|
||||||
# Hard fork configuration
|
# Hard fork configuration
|
||||||
ALTAIR_FORK_EPOCH=${ALTAIR_FORK_EPOCH:-0}
|
ALTAIR_FORK_EPOCH=${ALTAIR_FORK_EPOCH:-0}
|
||||||
BELLATRIX_FORK_EPOCH=${BELLATRIX_FORK_EPOCH:-0}
|
MERGE_FORK_EPOCH=${MERGE_FORK_EPOCH:-0}
|
||||||
CAPELLA_FORK_EPOCH=${CAPELLA_FORK_EPOCH:-0}
|
|
||||||
DENEB_FORK_EPOCH=${DENEB_FORK_EPOCH:-0}
|
|
||||||
|
|
||||||
# Spec version (mainnet or minimal)
|
# Spec version (mainnet or minimal)
|
||||||
SPEC_PRESET=${SPEC_PRESET:-mainnet}
|
SPEC_PRESET=${SPEC_PRESET:-mainnet}
|
||||||
@@ -53,6 +51,3 @@ ETH1_TTD=${ETH1_TTD:-`cat $ETH1_GENESIS_JSON | jq -r '.config.terminalTotalDiffi
|
|||||||
ETH1_DEPOSIT_CONTRACT_ADDRESS=${ETH1_DEPOSIT_CONTRACT_ADDRESS:-`cat $ETH1_CONFIG_YAML | grep 'deposit_contract_address' | awk '{ print $2 }' | sed 's/"//g'`}
|
ETH1_DEPOSIT_CONTRACT_ADDRESS=${ETH1_DEPOSIT_CONTRACT_ADDRESS:-`cat $ETH1_CONFIG_YAML | grep 'deposit_contract_address' | awk '{ print $2 }' | sed 's/"//g'`}
|
||||||
ETH1_DEPOSIT_CONTRACT_BLOCK=${ETH1_DEPOSIT_CONTRACT_BLOCK:-0x0}
|
ETH1_DEPOSIT_CONTRACT_BLOCK=${ETH1_DEPOSIT_CONTRACT_BLOCK:-0x0}
|
||||||
SUGGESTED_FEE_RECIPIENT=`cat ../build/el/accounts.csv | head -1 | cut -d',' -f2`
|
SUGGESTED_FEE_RECIPIENT=`cat ../build/el/accounts.csv | head -1 | cut -d',' -f2`
|
||||||
|
|
||||||
# --debug-level
|
|
||||||
DEBUG_LEVEL=${LIGHTHOUSE_DEBUG_LEVEL:-debug}
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
FROM sigp/lighthouse:v5.1.2
|
ARG TAG_SUFFIX="-modern"
|
||||||
|
FROM sigp/lighthouse:v4.3.0${TAG_SUFFIX}
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y upgrade \
|
RUN apt-get update; apt-get install bash netcat curl less jq wget -y;
|
||||||
&& apt-get -y install bash netcat curl less jq wget \
|
|
||||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root/
|
||||||
ADD start-lighthouse.sh .
|
ADD start-lighthouse.sh .
|
||||||
|
|
||||||
ENTRYPOINT [ "./start-lighthouse.sh" ]
|
ENTRYPOINT [ "./start-lighthouse.sh" ]
|
||||||
|
|||||||
@@ -6,4 +6,4 @@ source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
|||||||
# See: https://stackoverflow.com/a/246128/1701505
|
# See: https://stackoverflow.com/a/246128/1701505
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
docker build -t cerc/lighthouse:local ${build_command_args} ${SCRIPT_DIR}
|
docker build -t cerc/lighthouse:local ${build_command_args} --build-arg TAG_SUFFIX="" ${SCRIPT_DIR}
|
||||||
|
|||||||
+5
-4
@@ -1,5 +1,5 @@
|
|||||||
#####################################
|
#####################################
|
||||||
FROM golang:1.21.7-bullseye AS lotus-builder
|
FROM golang:1.19.12-bullseye AS lotus-builder
|
||||||
MAINTAINER Lotus Development Team
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
||||||
@@ -29,6 +29,7 @@ RUN set -eux; \
|
|||||||
rustup --version; \
|
rustup --version; \
|
||||||
cargo --version; \
|
cargo --version; \
|
||||||
rustc --version;
|
rustc --version;
|
||||||
|
|
||||||
COPY ./ /opt/filecoin
|
COPY ./ /opt/filecoin
|
||||||
WORKDIR /opt/filecoin
|
WORKDIR /opt/filecoin
|
||||||
|
|
||||||
@@ -37,13 +38,13 @@ WORKDIR /opt/filecoin
|
|||||||
### make configurable filecoin-ffi build
|
### make configurable filecoin-ffi build
|
||||||
ARG FFI_BUILD_FROM_SOURCE=0
|
ARG FFI_BUILD_FROM_SOURCE=0
|
||||||
ENV FFI_BUILD_FROM_SOURCE=${FFI_BUILD_FROM_SOURCE}
|
ENV FFI_BUILD_FROM_SOURCE=${FFI_BUILD_FROM_SOURCE}
|
||||||
RUN ls /opt/filecoin
|
|
||||||
RUN make clean deps
|
RUN make clean deps
|
||||||
|
|
||||||
ARG RUSTFLAGS=""
|
ARG RUSTFLAGS=""
|
||||||
ARG GOFLAGS=""
|
ARG GOFLAGS=""
|
||||||
|
|
||||||
#RUN make lotus
|
#RUN make buildall
|
||||||
RUN make 2k
|
RUN make 2k
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
@@ -74,7 +75,7 @@ COPY --from=lotus-builder /opt/filecoin/lotus-shed /usr/local/bin/
|
|||||||
#COPY scripts/docker-lotus-entrypoint.sh /
|
#COPY scripts/docker-lotus-entrypoint.sh /
|
||||||
#COPY myscripts/setup-node.sh /docker-entrypoint-scripts.d/setup-node.sh
|
#COPY myscripts/setup-node.sh /docker-entrypoint-scripts.d/setup-node.sh
|
||||||
|
|
||||||
ARG DOCKER_LOTUS_IMPORT_SNAPSHOT https://forest-archive.chainsafe.dev/latest/mainnet/
|
ARG DOCKER_LOTUS_IMPORT_SNAPSHOT https://snapshots.mainnet.filops.net/minimal/latest
|
||||||
ENV DOCKER_LOTUS_IMPORT_SNAPSHOT ${DOCKER_LOTUS_IMPORT_SNAPSHOT}
|
ENV DOCKER_LOTUS_IMPORT_SNAPSHOT ${DOCKER_LOTUS_IMPORT_SNAPSHOT}
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
||||||
ENV LOTUS_PATH /var/lib/lotus
|
ENV LOTUS_PATH /var/lib/lotus
|
||||||
+3
-3
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Build cerc/fixturenet-lotus
|
# Build cerc/lotus
|
||||||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
# Use a release version tag to match the modified Dockerfile replaced in next step
|
# Use a release version tag to match the modified Dockerfile replaced in next step
|
||||||
git -C ${CERC_REPO_BASE_DIR}/lotus checkout master
|
git -C ${CERC_REPO_BASE_DIR}/lotus checkout v1.23.3
|
||||||
|
|
||||||
# Replace repo's Dockerfile with modified one
|
# Replace repo's Dockerfile with modified one
|
||||||
cp ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/lotus/Dockerfile
|
cp ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/lotus/Dockerfile
|
||||||
|
|
||||||
docker build -t cerc/fixturenet-lotus:local ${build_command_args} ${CERC_REPO_BASE_DIR}/lotus
|
docker build -t cerc/lotus:local ${build_command_args} ${CERC_REPO_BASE_DIR}/lotus
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
#####################################
|
|
||||||
FROM golang:1.21.7-bullseye AS lotus-builder
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
|
||||||
|
|
||||||
ENV XDG_CACHE_HOME="/tmp"
|
|
||||||
|
|
||||||
### taken from https://github.com/rust-lang/docker-rust/blob/master/1.63.0/buster/Dockerfile
|
|
||||||
ENV RUSTUP_HOME=/usr/local/rustup \
|
|
||||||
CARGO_HOME=/usr/local/cargo \
|
|
||||||
PATH=/usr/local/cargo/bin:$PATH \
|
|
||||||
RUST_VERSION=1.63.0
|
|
||||||
|
|
||||||
RUN set -eux; \
|
|
||||||
dpkgArch="$(dpkg --print-architecture)"; \
|
|
||||||
case "${dpkgArch##*-}" in \
|
|
||||||
amd64) rustArch='x86_64-unknown-linux-gnu'; rustupSha256='5cc9ffd1026e82e7fb2eec2121ad71f4b0f044e88bca39207b3f6b769aaa799c' ;; \
|
|
||||||
arm64) rustArch='aarch64-unknown-linux-gnu'; rustupSha256='e189948e396d47254103a49c987e7fb0e5dd8e34b200aa4481ecc4b8e41fb929' ;; \
|
|
||||||
*) echo >&2 "unsupported architecture: ${dpkgArch}"; exit 1 ;; \
|
|
||||||
esac; \
|
|
||||||
url="https://static.rust-lang.org/rustup/archive/1.25.1/${rustArch}/rustup-init"; \
|
|
||||||
wget "$url"; \
|
|
||||||
echo "${rustupSha256} *rustup-init" | sha256sum -c -; \
|
|
||||||
chmod +x rustup-init; \
|
|
||||||
./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION --default-host ${rustArch}; \
|
|
||||||
rm rustup-init; \
|
|
||||||
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
|
|
||||||
rustup --version; \
|
|
||||||
cargo --version; \
|
|
||||||
rustc --version;
|
|
||||||
|
|
||||||
COPY ./ /opt/filecoin
|
|
||||||
WORKDIR /opt/filecoin
|
|
||||||
|
|
||||||
ARG FFI_BUILD_FROM_SOURCE=0
|
|
||||||
ENV FFI_BUILD_FROM_SOURCE=${FFI_BUILD_FROM_SOURCE}
|
|
||||||
|
|
||||||
#RUN make clean deps
|
|
||||||
|
|
||||||
ARG RUSTFLAGS=""
|
|
||||||
ARG GOFLAGS=""
|
|
||||||
|
|
||||||
RUN make clean deps && \
|
|
||||||
make lotus lotus-shed lotus-stats && \
|
|
||||||
install -C ./lotus /usr/local/bin/lotus && \
|
|
||||||
install -C ./lotus-shed /usr/local/bin/lotus-shed && \
|
|
||||||
install -C ./lotus-stats /usr/local/bin/lotus-stats
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
FROM ubuntu:20.04 AS lotus-base
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
# Base resources
|
|
||||||
COPY --from=lotus-builder /etc/ssl/certs /etc/ssl/certs
|
|
||||||
COPY --from=lotus-builder /lib/*/libdl.so.2 /lib/
|
|
||||||
COPY --from=lotus-builder /lib/*/librt.so.1 /lib/
|
|
||||||
COPY --from=lotus-builder /lib/*/libgcc_s.so.1 /lib/
|
|
||||||
COPY --from=lotus-builder /lib/*/libutil.so.1 /lib/
|
|
||||||
COPY --from=lotus-builder /usr/lib/*/libltdl.so.7 /lib/
|
|
||||||
COPY --from=lotus-builder /usr/lib/*/libnuma.so.1 /lib/
|
|
||||||
COPY --from=lotus-builder /usr/lib/*/libhwloc.so.* /lib/
|
|
||||||
COPY --from=lotus-builder /usr/lib/*/libOpenCL.so.1 /lib/
|
|
||||||
|
|
||||||
RUN useradd -r -u 532 -U fc \
|
|
||||||
&& mkdir -p /etc/OpenCL/vendors \
|
|
||||||
&& echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
FROM lotus-base AS lotus
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
COPY --from=lotus-builder \
|
|
||||||
/usr/local/bin/lotus \
|
|
||||||
/usr/local/bin/lotus-shed \
|
|
||||||
/usr/local/bin/
|
|
||||||
|
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
|
||||||
ENV LOTUS_PATH /var/lib/lotus
|
|
||||||
ENV DOCKER_LOTUS_IMPORT_WALLET ""
|
|
||||||
|
|
||||||
RUN mkdir /var/lib/lotus /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN chown fc: /var/lib/lotus /var/tmp/filecoin-proof-parameters
|
|
||||||
|
|
||||||
VOLUME /var/lib/lotus
|
|
||||||
VOLUME /var/tmp/filecoin-proof-parameters
|
|
||||||
|
|
||||||
USER fc
|
|
||||||
|
|
||||||
EXPOSE 1234
|
|
||||||
|
|
||||||
|
|
||||||
CMD ["-help"]
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
FROM lotus-base AS lotus-all-in-one
|
|
||||||
|
|
||||||
# Install netcat for healthcheck
|
|
||||||
RUN apt-get update && apt-get install -y netcat && apt-get install -y iproute2
|
|
||||||
|
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
|
||||||
ENV LOTUS_PATH /var/lib/lotus
|
|
||||||
|
|
||||||
ARG DOCKER_LOTUS_IMPORT_SNAPSHOT=https://forest-archive.chainsafe.dev/latest/mainnet/
|
|
||||||
ENV DOCKER_LOTUS_IMPORT_SNAPSHOT=${DOCKER_LOTUS_IMPORT_SNAPSHOT}
|
|
||||||
|
|
||||||
COPY --from=lotus-builder /opt/filecoin/lotus /usr/local/bin/
|
|
||||||
COPY --from=lotus-builder /opt/filecoin/lotus-shed /usr/local/bin/
|
|
||||||
COPY --from=lotus-builder /opt/filecoin/lotus-stats /usr/local/bin/
|
|
||||||
COPY scripts/docker-lotus-entrypoint.sh /docker-lotus-entrypoint.sh
|
|
||||||
RUN chmod +x /docker-lotus-entrypoint.sh
|
|
||||||
|
|
||||||
RUN mkdir /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN mkdir /var/lib/lotus
|
|
||||||
RUN chown fc: /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN chown fc: /var/lib/lotus
|
|
||||||
|
|
||||||
|
|
||||||
VOLUME /var/tmp/filecoin-proof-parameters
|
|
||||||
VOLUME /var/lib/lotus
|
|
||||||
|
|
||||||
EXPOSE 1234
|
|
||||||
EXPOSE 1235
|
|
||||||
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Build cerc/mainnet-lotus
|
|
||||||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
|
||||||
|
|
||||||
git stash
|
|
||||||
|
|
||||||
# Use a release version tag to match the modified Dockerfile replaced in next step
|
|
||||||
git -C ${CERC_REPO_BASE_DIR}/lotus checkout master
|
|
||||||
|
|
||||||
# Replace repo's Dockerfile with modified one
|
|
||||||
cp ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/lotus/Dockerfile
|
|
||||||
|
|
||||||
docker build -t cerc/lotus-mainnet:local ${build_command_args} ${CERC_REPO_BASE_DIR}/lotus
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user