Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
#491 separate indexer
  • Loading branch information
otselnik committed Feb 3, 2022
commit 980a4f0f1b3b48dae0bc99757f9fa5c8cb31e4bc
1 change: 1 addition & 0 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ steps:
- "evm_loader.log"
- "faucet.log"
- "airdropper.log"
- "indexer.log"

- wait

Expand Down
1 change: 1 addition & 0 deletions .buildkite/steps/deploy-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ function cleanup_docker {
if docker logs evm_loader >evm_loader.log 2>&1; then echo "evm_loader logs saved"; fi
if docker logs faucet >faucet.log 2>&1; then echo "faucet logs saved"; fi
if docker logs airdropper >airdropper.log 2>&1; then echo "airdropper logs saved"; fi
if docker logs indexer >indexer.log 2>&1; then echo "indexer logs saved"; fi

echo "\nCleanup docker-compose..."
docker-compose -f proxy/docker-compose-test.yml down --rmi 'all'
Expand Down
9 changes: 9 additions & 0 deletions proxy/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@
from .proxy import entry_point
import os
from .indexer.airdropper import run_airdropper
from .indexer.indexer import run_indexer
from solana.rpc.api import Client

if __name__ == '__main__':
airdropper_mode = os.environ.get('AIRDROPPER_MODE', 'False').lower() in [1, 'true', 'True']
indexer_mode = os.environ.get('INDEXER_MODE', 'False').lower() in [1, 'true', 'True']
if airdropper_mode:
print("Will run in airdropper mode")
solana_url = os.environ['SOLANA_URL']
Expand All @@ -39,5 +41,12 @@
neon_decimals,
pp_solana_url,
max_conf)
elif indexer_mode:
print("Will run in indexer mode")

solana_url = os.environ['SOLANA_URL']
evm_loader_id = os.environ['EVM_LOADER']

run_indexer(solana_url, evm_loader_id)
else:
entry_point()
22 changes: 22 additions & 0 deletions proxy/docker-compose-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ services:
condition: service_healthy
evm_loader:
condition: service_completed_successfully
indexer:
condition: service_started
ports:
- 127.0.0.1:9090:9090
expose:
Expand Down Expand Up @@ -137,6 +139,26 @@ services:
faucet:
condition: service_started

indexer:
container_name: indexer
image: neonlabsorg/proxy:${REVISION}
environment:
SOLANA_URL: http://solana:8899
POSTGRES_DB: neon-db
POSTGRES_USER: neon-proxy
POSTGRES_PASSWORD: neon-proxy-pass
CONFIG: ci
PP_SOLANA_URL: https://api.mainnet-beta.solana.com
hostname: indexer
depends_on:
postgres:
condition: service_healthy
evm_loader:
condition: service_completed_successfully
networks:
- net
entrypoint: proxy/run-indexer.sh

networks:
net:

2 changes: 2 additions & 0 deletions proxy/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
EVM_LOADER_ID = os.environ.get("EVM_LOADER")
neon_cli_timeout = float(os.environ.get("NEON_CLI_TIMEOUT", "0.1"))

INDEXER_MODE = os.environ.get('INDEXER_MODE', 'True')

NEW_USER_AIRDROP_AMOUNT = int(os.environ.get("NEW_USER_AIRDROP_AMOUNT", "0"))
CONFIRMATION_CHECK_DELAY = float(os.environ.get("NEON_CONFIRMATION_CHECK_DELAY", "0.1"))
CONTINUE_COUNT_FACTOR = int(os.environ.get("CONTINUE_COUNT_FACTOR", "3"))
Expand Down
11 changes: 6 additions & 5 deletions proxy/proxy.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

from multiprocessing import Process
from .indexer.indexer import run_indexer
from proxy.environment import SOLANA_URL, EVM_LOADER_ID
from proxy.environment import SOLANA_URL, EVM_LOADER_ID, INDEXER_MODE


class Proxy:
Expand All @@ -43,10 +43,11 @@ def delete_pid_file(self) -> None:
os.remove(self.flags.pid_file)

def __enter__(self) -> 'Proxy':
self.indexer = Process(target=run_indexer,
args=(SOLANA_URL,
EVM_LOADER_ID,))
self.indexer.start()
if INDEXER_MODE.lower() not in [1, 'true', 'True']:
self.indexer = Process(target=run_indexer,
args=(SOLANA_URL,
EVM_LOADER_ID,))
self.indexer.start()
self.acceptors = AcceptorPool(
flags=self.flags,
work_klass=HttpProtocolHandler
Expand Down
12 changes: 12 additions & 0 deletions proxy/run-indexer.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash

if [ -z "$EVM_LOADER" ]; then
echo "Extracting EVM_LOADER address from keypair file..."
export EVM_LOADER=$(solana address -k /spl/bin/evm_loader-keypair.json)
echo "EVM_LOADER=$EVM_LOADER"
fi
export INDEXER_MODE='true'

source proxy/run-set-env.sh

python3 -m proxy
71 changes: 1 addition & 70 deletions proxy/run-proxy.sh
Original file line number Diff line number Diff line change
@@ -1,75 +1,6 @@
#!/bin/bash

set -xeo pipefail

date

if [ "$CONFIG" == "ci" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="http://solana:8899"
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=100000
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="0.5"
[[ -z "$CONTINUE_COUNT_FACTOR" ]] && export CONTINUE_COUNT_FACTOR="3"
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE=0
[[ -z "$POSTGRES_HOST" ]] && export POSTGRES_HOST="postgres"
[[ -z "$CANCEL_TIMEOUT" ]] && export CANCEL_TIMEOUT=10
[[ -z "$RETRY_ON_FAIL" ]] && export RETRY_ON_FAIL=10
[[ -z "$FINALIZED" ]] && export FINALIZED="finalized"
[[ -z "$START_SLOT" ]] && export START_SLOT="LATEST"
[[ -z "$CONFIRM_TIMEOUT" ]] && export CONFIRM_TIMEOUT=10
[[ -z "$PERM_ACCOUNT_LIMIT" ]] && export PERM_ACCOUNT_LIMIT=2
elif [ "$CONFIG" == "local" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="http://localhost:8899"
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=0
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="0.9"
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE=0
[[ -z "$POSTGRES_HOST" ]] && export POSTGRES_HOST="localhost"
[[ -z "$CANCEL_TIMEOUT" ]] && export CANCEL_TIMEOUT=10
[[ -z "$RETRY_ON_FAIL" ]] && export RETRY_ON_FAIL=10
[[ -z "$FINALIZED" ]] && export FINALIZED="finalized"
[[ -z "$START_SLOT" ]] && export START_SLOT=0
[[ -z "$CONFIRM_TIMEOUT" ]] && export CONFIRM_TIMEOUT=10
[[ -z "$PERM_ACCOUNT_LIMIT" ]] && export PERM_ACCOUNT_LIMIT=2
elif [ "$CONFIG" == "devnet" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="https://api.devnet.solana.com"
[[ -z "$EVM_LOADER" ]] && export EVM_LOADER=eeLSJgWzzxrqKv1UxtRVVH8FX3qCQWUs9QuAjJpETGU
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=90000
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="10"
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE=1
[[ -z "$POSTGRES_HOST" ]] && export POSTGRES_HOST="localhost"
[[ -z "$CANCEL_TIMEOUT" ]] && export CANCEL_TIMEOUT=60
[[ -z "$RETRY_ON_FAIL" ]] && export RETRY_ON_FAIL=10
[[ -z "$FINALIZED" ]] && export FINALIZED="finalized"
[[ -z "$START_SLOT" ]] && export START_SLOT="LATEST"
[[ -z "$CONFIRM_TIMEOUT" ]] && export CONFIRM_TIMEOUT=30
[[ -z "$PERM_ACCOUNT_LIMIT" ]] && export PERM_ACCOUNT_LIMIT=16
elif [ "$CONFIG" == "testnet" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="https://api.testnet.solana.com"
[[ -z "$EVM_LOADER" ]] && export EVM_LOADER=eeLSJgWzzxrqKv1UxtRVVH8FX3qCQWUs9QuAjJpETGU
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=90000
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="15"
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE="1"
[[ -z "$POSTGRES_HOST" ]] && export POSTGRES_HOST="localhost"
[[ -z "$CANCEL_TIMEOUT" ]] && export CANCEL_TIMEOUT=60
[[ -z "$RETRY_ON_FAIL" ]] && export RETRY_ON_FAIL=10
[[ -z "$FINALIZED" ]] && export FINALIZED="finalized"
[[ -z "$START_SLOT" ]] && export START_SLOT="LATEST"
[[ -z "$CONFIRM_TIMEOUT" ]] && export CONFIRM_TIMEOUT=30
[[ -z "$PERM_ACCOUNT_LIMIT" ]] && export PERM_ACCOUNT_LIMIT=16
elif [ "$CONFIG" != "custom" ]; then
exit 1
fi

[[ -z "$SOLANA_URL" ]] && echo "SOLANA_URL is not set" && exit 1
[[ -z "$EVM_LOADER" ]] && echo "EVM_LOADER is not set" && exit 1

solana config set -u $SOLANA_URL

isArg() { case "$1" in "$2"|"$2="*) true;; *) false;; esac }
EXTRA_ARGS_TIMEOUT=' --timeout 300'
for val in $EXTRA_ARGS; do
isArg $val '--timeout' && EXTRA_ARGS_TIMEOUT=''
done
EXTRA_ARGS+=$EXTRA_ARGS_TIMEOUT
source proxy/run-set-env.sh

echo run-proxy
python3 -m proxy --hostname 0.0.0.0 --port 9090 --enable-web-server --plugins proxy.plugin.SolanaProxyPlugin $EXTRA_ARGS
72 changes: 72 additions & 0 deletions proxy/run-set-env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/bin/bash

set -xeo pipefail

date

if [ "$CONFIG" == "ci" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="http://solana:8899"
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=100000
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="0.5"
[[ -z "$CONTINUE_COUNT_FACTOR" ]] && export CONTINUE_COUNT_FACTOR="3"
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE=0
[[ -z "$POSTGRES_HOST" ]] && export POSTGRES_HOST="postgres"
[[ -z "$CANCEL_TIMEOUT" ]] && export CANCEL_TIMEOUT=10
[[ -z "$RETRY_ON_FAIL" ]] && export RETRY_ON_FAIL=10
[[ -z "$FINALIZED" ]] && export FINALIZED="finalized"
[[ -z "$START_SLOT" ]] && export START_SLOT="LATEST"
[[ -z "$CONFIRM_TIMEOUT" ]] && export CONFIRM_TIMEOUT=10
[[ -z "$PERM_ACCOUNT_LIMIT" ]] && export PERM_ACCOUNT_LIMIT=2
elif [ "$CONFIG" == "local" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="http://localhost:8899"
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=0
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="0.9"
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE=0
[[ -z "$POSTGRES_HOST" ]] && export POSTGRES_HOST="localhost"
[[ -z "$CANCEL_TIMEOUT" ]] && export CANCEL_TIMEOUT=10
[[ -z "$RETRY_ON_FAIL" ]] && export RETRY_ON_FAIL=10
[[ -z "$FINALIZED" ]] && export FINALIZED="finalized"
[[ -z "$START_SLOT" ]] && export START_SLOT=0
[[ -z "$CONFIRM_TIMEOUT" ]] && export CONFIRM_TIMEOUT=10
[[ -z "$PERM_ACCOUNT_LIMIT" ]] && export PERM_ACCOUNT_LIMIT=2
elif [ "$CONFIG" == "devnet" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="https://api.devnet.solana.com"
[[ -z "$EVM_LOADER" ]] && export EVM_LOADER=eeLSJgWzzxrqKv1UxtRVVH8FX3qCQWUs9QuAjJpETGU
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=90000
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="10"
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE=1
[[ -z "$POSTGRES_HOST" ]] && export POSTGRES_HOST="localhost"
[[ -z "$CANCEL_TIMEOUT" ]] && export CANCEL_TIMEOUT=60
[[ -z "$RETRY_ON_FAIL" ]] && export RETRY_ON_FAIL=10
[[ -z "$FINALIZED" ]] && export FINALIZED="finalized"
[[ -z "$START_SLOT" ]] && export START_SLOT="LATEST"
[[ -z "$CONFIRM_TIMEOUT" ]] && export CONFIRM_TIMEOUT=30
[[ -z "$PERM_ACCOUNT_LIMIT" ]] && export PERM_ACCOUNT_LIMIT=16
elif [ "$CONFIG" == "testnet" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="https://api.testnet.solana.com"
[[ -z "$EVM_LOADER" ]] && export EVM_LOADER=eeLSJgWzzxrqKv1UxtRVVH8FX3qCQWUs9QuAjJpETGU
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=90000
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="15"
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE="1"
[[ -z "$POSTGRES_HOST" ]] && export POSTGRES_HOST="localhost"
[[ -z "$CANCEL_TIMEOUT" ]] && export CANCEL_TIMEOUT=60
[[ -z "$RETRY_ON_FAIL" ]] && export RETRY_ON_FAIL=10
[[ -z "$FINALIZED" ]] && export FINALIZED="finalized"
[[ -z "$START_SLOT" ]] && export START_SLOT="LATEST"
[[ -z "$CONFIRM_TIMEOUT" ]] && export CONFIRM_TIMEOUT=30
[[ -z "$PERM_ACCOUNT_LIMIT" ]] && export PERM_ACCOUNT_LIMIT=16
elif [ "$CONFIG" != "custom" ]; then
exit 1
fi

[[ -z "$SOLANA_URL" ]] && echo "SOLANA_URL is not set" && exit 1
[[ -z "$EVM_LOADER" ]] && echo "EVM_LOADER is not set" && exit 1

solana config set -u $SOLANA_URL

isArg() { case "$1" in "$2"|"$2="*) true;; *) false;; esac }
EXTRA_ARGS_TIMEOUT=' --timeout 300'
for val in $EXTRA_ARGS; do
isArg $val '--timeout' && EXTRA_ARGS_TIMEOUT=''
done
EXTRA_ARGS+=$EXTRA_ARGS_TIMEOUT