Skip to content

Commit 4e03e73

Browse files
author
Semen Medvedev
committed
Merge remote-tracking branch 'origin/develop'
2 parents 21d20a1 + 2e25759 commit 4e03e73

22 files changed

+1549
-704
lines changed

.buildkite/pipeline.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ steps:
1313
- "proxy.log"
1414
- "solana.log"
1515
- "measurements.log"
16+
- "evm_loader.log"
1617

1718
- wait
1819

1920
- label: ":floppy_disk: publish image"
2021
command: ".buildkite/steps/publish-image.sh"
2122
if: |
22-
build.branch =~ /^(master|develop|^ci-.+|v[0-9]+\.[0-9]+.[0-9]+.*)$$/ &&
23+
build.branch =~ /^(master|develop|^ci-.+|v[0-9]+\.[0-9]+\..+)$$/ &&
2324
(build.env("EVM_LOADER_BRANCH") == "develop" || build.env("EVM_LOADER_BRANCH") == null)

.buildkite/steps/deploy-test.sh

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,38 @@ UNISWAP_V2_CORE_IMAGE=neonlabsorg/uniswap-v2-core:stable
3535
# Refreshing uniswap-v2-core image is required to run .buildkite/steps/deploy-test.sh locally
3636
docker pull $UNISWAP_V2_CORE_IMAGE
3737

38-
docker-compose -f proxy/docker-compose-test.yml up -d
39-
4038
function cleanup_docker {
41-
docker logs proxy >proxy.log 2>&1
42-
docker logs solana >solana.log 2>&1
43-
grep 'get_measurements' <proxy.log >measurements.log
44-
echo "Cleanup docker-compose..."
39+
if docker logs proxy >proxy.log 2>&1; then
40+
echo "proxy logs saved";
41+
grep 'get_measurements' <proxy.log >measurements.log
42+
fi
43+
44+
if docker logs solana >solana.log 2>&1; then echo "solana logs saved"; fi
45+
if docker logs evm_loader >evm_loader.log 2>&1; then echo "evm_loader logs saved"; fi
46+
47+
echo "\nCleanup docker-compose..."
4548
docker-compose -f proxy/docker-compose-test.yml down --rmi 'all'
4649
echo "Cleanup docker-compose done."
50+
echo "\nRemoving temporary data volumes..."
51+
docker volume prune -f
4752

4853
if grep '\[E\] get_measurements' <measurements.log; then
4954
echo 'Failed to get measurements'
5055
exit 1
5156
fi
5257
}
5358
trap cleanup_docker EXIT
54-
sleep 10
59+
60+
if ! docker-compose -f proxy/docker-compose-test.yml up -d; then
61+
echo "docker-compose failed to start"
62+
exit 1;
63+
fi
5564

5665
export PROXY_URL=http://127.0.0.1:9090/solana
5766

5867
echo "Wait proxy..." && wait-for-proxy "$PROXY_URL"
5968

60-
export EVM_LOADER=$(docker exec proxy bash -c "cat evm_loader_id" | sed '/Program Id: \([0-9A-Za-z]\+\)/,${s//\1/;b};s/^.*$//;$q1')
69+
export EVM_LOADER=$(docker exec proxy bash -c "solana address -k /spl/bin/evm_loader-keypair.json")
6170
export SOLANA_URL=$(docker exec solana bash -c 'echo "$SOLANA_URL"')
6271

6372
echo "EVM_LOADER" $EVM_LOADER

Dockerfile

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ COPY --from=cli /opt/solana/bin/solana \
3131
/cli/bin/
3232

3333
COPY --from=spl /opt/solana/bin/solana /cli/bin/
34-
COPY --from=spl /opt/evm_loader.so /opt/evm_loader-keypair.json \
35-
/opt/neon-cli /spl/bin/
36-
COPY --from=spl /opt/spl-token /opt/test_token_keypair /opt/test_token_owner /spl/bin/
37-
COPY --from=spl /opt/collateral_pool_generator.py \
38-
/opt/solana_utils.py \
34+
COPY --from=spl /opt/spl-token \
35+
/opt/create-test-accounts.sh \
36+
/opt/evm_loader-keypair.json /spl/bin/
37+
COPY --from=spl /opt/neon-cli /opt/faucet /spl/bin/
38+
COPY --from=spl /opt/solana_utils.py \
3939
/opt/eth_tx_utils.py \
40-
/opt/collateral-pool-keypair.json \
4140
/spl/bin/
4241
COPY --from=spl /opt/neon-cli /spl/bin/emulator
4342

proxy/core/acceptor/pool.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
LOCK = multiprocessing.Lock()
2828

2929
proxy_id_glob = multiprocessing.Value('i', 0)
30+
new_acc_id_glob = multiprocessing.Value('i', 0)
31+
manager = multiprocessing.Manager()
32+
acc_list_glob = manager.list()
3033

3134

3235
class AcceptorPool:

proxy/deploy-test.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ set -xeuo pipefail
33

44
echo "Deploy test..."
55

6+
solana config set -u $SOLANA_URL
67
solana address || solana-keygen new --no-passphrase
7-
export $(/spl/bin/neon-cli --evm_loader JxujFZpNBPADbfw2MnPPgnnFGruzp2ELSFWPQgrjz5D neon-elf-params /spl/bin/evm_loader.so | grep NEON_REVISION | xargs)
8+
solana program dump "$EVM_LOADER" ./evm_loader.dump
9+
export $(/spl/bin/neon-cli --evm_loader "$EVM_LOADER" neon-elf-params ./evm_loader.dump)
810

911
curl -v --header "Content-Type: application/json" --data '{"method":"eth_blockNumber","id":1,"jsonrpc":"2.0","params":[]}' $PROXY_URL
1012

proxy/docker-compose-test.yml

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
version: "2.1"
1+
version: "3"
22

33
services:
44
solana:
55
container_name: solana
66
image: neonlabsorg/solana:${SOLANA_REVISION:-v1.7.9-resources}
77
environment:
8-
- SOLANA_URL=http://solana:8899
9-
- RUST_LOG=solana_runtime::system_instruction_processor=trace,solana_runtime::message_processor=debug,solana_bpf_loader=debug,solana_rbpf=debug
8+
SOLANA_URL: http://solana:8899
9+
RUST_LOG: solana_runtime::system_instruction_processor=trace,solana_runtime::message_processor=debug,solana_bpf_loader=debug,solana_rbpf=debug
1010
hostname: solana
1111
expose:
1212
- "8899"
@@ -16,19 +16,70 @@ services:
1616
- "8001-8009/udp"
1717
networks:
1818
- net
19+
healthcheck:
20+
# Must be available from outside (calling without -u causes premature result)
21+
test: [ CMD-SHELL, "solana cluster-version -u http://solana:8899" ]
22+
interval: 5s
23+
timeout: 10s
24+
retries: 10
25+
start_period: 10s
26+
27+
evm_loader:
28+
container_name: evm_loader
29+
image: neonlabsorg/evm_loader:${EVM_LOADER_REVISION:-latest}
30+
environment:
31+
- SOLANA_URL=http://solana:8899
32+
networks:
33+
- net
34+
depends_on:
35+
solana:
36+
condition: service_healthy
37+
command: bash -c "create-test-accounts.sh 1 && deploy-evm.sh"
38+
39+
postgres:
40+
container_name: postgres
41+
image: postgres:14.0
42+
command: postgres -c 'max_connections=1000'
43+
environment:
44+
POSTGRES_DB: neon-db
45+
POSTGRES_USER: neon-proxy
46+
POSTGRES_PASSWORD: neon-proxy-pass
47+
hostname: postgres
48+
healthcheck:
49+
test: [ CMD-SHELL, "pg_isready" ]
50+
interval: 5s
51+
timeout: 10s
52+
retries: 10
53+
start_period: 5s
54+
expose:
55+
- "5432"
56+
networks:
57+
- net
1958

2059
proxy:
2160
container_name: proxy
2261
image: neonlabsorg/proxy:${REVISION}
2362
environment:
24-
- CONFIG=ci
63+
SOLANA_URL: http://solana:8899
64+
POSTGRES_DB: neon-db
65+
POSTGRES_USER: neon-proxy
66+
POSTGRES_PASSWORD: neon-proxy-pass
67+
NEW_USER_AIRDROP_AMOUNT: 100
68+
CONFIG: ci
2569
hostname: proxy
70+
depends_on:
71+
postgres:
72+
condition: service_healthy
73+
evm_loader:
74+
condition: service_completed_successfully
2675
ports:
2776
- 127.0.0.1:9090:9090
2877
expose:
2978
- "9090"
3079
networks:
3180
- net
81+
entrypoint: proxy/run-test-proxy.sh
3282

3383
networks:
3484
net:
85+

proxy/environment.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import os
2+
import subprocess
3+
import logging
4+
from solana.publickey import PublicKey
5+
6+
logger = logging.getLogger(__name__)
7+
logger.setLevel(logging.DEBUG)
8+
9+
solana_url = os.environ.get("SOLANA_URL", "http://localhost:8899")
10+
evm_loader_id = os.environ.get("EVM_LOADER")
11+
neon_cli_timeout = float(os.environ.get("NEON_CLI_TIMEOUT", "0.1"))
12+
13+
class solana_cli:
14+
def call(self, *args):
15+
try:
16+
cmd = ["solana",
17+
"--url", solana_url,
18+
] + list(args)
19+
print(cmd)
20+
return subprocess.check_output(cmd, universal_newlines=True)
21+
except subprocess.CalledProcessError as err:
22+
import sys
23+
logger.debug("ERR: solana error {}".format(err))
24+
raise
25+
26+
27+
class neon_cli:
28+
def call(self, *args):
29+
try:
30+
cmd = ["neon-cli",
31+
"--commitment=recent",
32+
"--url", solana_url,
33+
"--evm_loader={}".format(evm_loader_id),
34+
] + list(args)
35+
print(cmd)
36+
return subprocess.check_output(cmd, timeout=neon_cli_timeout, universal_newlines=True)
37+
except subprocess.CalledProcessError as err:
38+
import sys
39+
logger.debug("ERR: neon-cli error {}".format(err))
40+
raise
41+
42+
def read_elf_params(out_dict):
43+
logger.debug('load for solana_url={} and evm_loader_id={}'.format(solana_url, evm_loader_id))
44+
res = solana_cli().call('program', 'dump', evm_loader_id, './evm_loader.dump')
45+
substr = "Wrote program to "
46+
path = ""
47+
for line in res.splitlines():
48+
if line.startswith(substr):
49+
path = line[len(substr):].strip()
50+
if path == "":
51+
raise Exception("cannot program dump for ", evm_loader_id)
52+
for param in neon_cli().call("neon-elf-params", path).splitlines():
53+
if param.startswith('NEON_') and '=' in param:
54+
v = param.split('=')
55+
out_dict[v[0]] = v[1]
56+
57+
ELF_PARAMS = {}
58+
read_elf_params(ELF_PARAMS)
59+
COLLATERAL_POOL_BASE = ELF_PARAMS.get("NEON_POOL_BASE")
60+
ETH_TOKEN_MINT_ID: PublicKey = PublicKey(ELF_PARAMS.get("NEON_TOKEN_MINT"))

0 commit comments

Comments
 (0)