Skip to content

Commit 5cb42d5

Browse files
authored
Merge pull request #264 from neonlabsorg/347_add_chain_id_symbol_to_elf_binary
extract NEON_CHAIN_ID from elf symbols
2 parents 1e4954b + 74c9745 commit 5cb42d5

File tree

6 files changed

+70
-24
lines changed

6 files changed

+70
-24
lines changed

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/plugin/solana_rest_api.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
modelInstanceLock = threading.Lock()
4343
modelInstance = None
4444

45-
chainId = os.environ.get("NEON_CHAIN_ID", "0x6e") # default value 110
4645
EXTRA_GAS = int(os.environ.get("EXTRA_GAS", "0"))
4746

4847
class PermanentAccounts:
@@ -107,10 +106,14 @@ def web3_clientVersion(self):
107106
return self.neon_config_dict['web3_clientVersion']
108107

109108
def eth_chainId(self):
110-
return chainId
109+
neon_config_load(self)
110+
# NEON_CHAIN_ID is a string in decimal form
111+
return hex(int(self.neon_config_dict['NEON_CHAIN_ID']))
111112

112113
def net_version(self):
113-
return str(int(chainId,base=16))
114+
neon_config_load(self)
115+
# NEON_CHAIN_ID is a string in decimal form
116+
return self.neon_config_dict['NEON_CHAIN_ID']
114117

115118
def eth_gasPrice(self):
116119
return hex(MINIMAL_GAS_PRICE)

proxy/plugin/solana_rest_api_tools.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,20 @@ def ether2seed(ether, program_id, base):
318318
logger.debug('ether2program: {} {} => {} (seed {})'.format(ether, 255, acc, seed))
319319
return (acc, 255, seed)
320320

321+
def read_elf_params(out_dict):
322+
logger.debug('load for solana_url={} and evm_loader_id={}'.format(solana_url, evm_loader_id))
323+
res = solana_cli().call('program', 'dump', evm_loader_id, './evm_loader.dump')
324+
substr = "Wrote program to "
325+
path = ""
326+
for line in res.splitlines():
327+
if line.startswith(substr):
328+
path = line[len(substr):].strip()
329+
if path == "":
330+
raise Exception("cannot program dump for ", evm_loader_id)
331+
for param in neon_cli().call("neon-elf-params", path).splitlines():
332+
if param.startswith('NEON_') and '=' in param:
333+
v = param.split('=')
334+
out_dict[v[0]] = v[1]
321335

322336
def neon_config_load(ethereum_model):
323337
try:
@@ -331,19 +345,7 @@ def neon_config_load(ethereum_model):
331345
if elapsed_time < TIMEOUT_TO_RELOAD_NEON_CONFIG:
332346
return
333347

334-
logger.debug('load for solana_url={} and evm_loader_id={}'.format(solana_url, evm_loader_id))
335-
res = solana_cli().call('program', 'dump', evm_loader_id, './evm_loader.dump')
336-
substr = "Wrote program to "
337-
path = ""
338-
for line in res.splitlines():
339-
if line.startswith(substr):
340-
path = line[len(substr):].strip()
341-
if path == "":
342-
raise Exception("cannot program dump for ", evm_loader_id)
343-
for param in neon_cli().call("neon-elf-params", path).splitlines():
344-
if param.startswith('NEON_') and '=' in param:
345-
v = param.split('=')
346-
ethereum_model.neon_config_dict[v[0]] = v[1]
348+
read_elf_params(ethereum_model.neon_config_dict)
347349
ethereum_model.neon_config_dict['load_time'] = datetime.now().timestamp()
348350
# 'Neon/v0.3.0-rc0-d1e4ff618457ea9cbc82b38d2d927e8a62168bec
349351
ethereum_model.neon_config_dict['web3_clientVersion'] = 'Neon/v' + \

proxy/run-proxy.sh

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ if [ "$CONFIG" == "ci" ]; then
1010
[[ -z "$ETH_TOKEN_MINT" ]] && export ETH_TOKEN_MINT=deploy
1111
[[ -z "$COLLATERAL_POOL_BASE" ]] && export COLLATERAL_POOL_BASE=deploy
1212
[[ -z "$NEW_USER_AIRDROP_AMOUNT" ]] && export NEW_USER_AIRDROP_AMOUNT=100
13-
[[ -z "$NEON_CHAIN_ID" ]] && export NEON_CHAIN_ID=0x6f
1413
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=100000
1514
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="0.5"
1615
[[ -z "$USE_COMBINED_START_CONTINUE" ]] && export USE_COMBINED_START_CONTINUE="YES"
@@ -22,7 +21,6 @@ elif [ "$CONFIG" == "local" ]; then
2221
[[ -z "$ETH_TOKEN_MINT" ]] && export ETH_TOKEN_MINT=deploy
2322
[[ -z "$COLLATERAL_POOL_BASE" ]] && export COLLATERAL_POOL_BASE=deploy
2423
[[ -z "$NEW_USER_AIRDROP_AMOUNT" ]] && export NEW_USER_AIRDROP_AMOUNT=10
25-
[[ -z "$NEON_CHAIN_ID" ]] && export NEON_CHAIN_ID=0x6f
2624
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=0
2725
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="0.9"
2826
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE=0
@@ -32,7 +30,6 @@ elif [ "$CONFIG" == "devnet" ]; then
3230
[[ -z "$ETH_TOKEN_MINT" ]] && export ETH_TOKEN_MINT=89dre8rZjLNft7HoupGiyxu3MNftR577ZYu8bHe2kK7g
3331
[[ -z "$COLLATERAL_POOL_BASE" ]] && export COLLATERAL_POOL_BASE=7SBdHNeF9FFYySEoszpjZXXQsAiwa5Lzpsz6nUJWusEx
3432
[[ -z "$NEW_USER_AIRDROP_AMOUNT" ]] && export NEW_USER_AIRDROP_AMOUNT=0
35-
[[ -z "$NEON_CHAIN_ID" ]] && export NEON_CHAIN_ID=0x6e
3633
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=90000
3734
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="10"
3835
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE=1
@@ -42,7 +39,6 @@ elif [ "$CONFIG" == "testnet" ]; then
4239
[[ -z "$ETH_TOKEN_MINT" ]] && export ETH_TOKEN_MINT=89dre8rZjLNft7HoupGiyxu3MNftR577ZYu8bHe2kK7g
4340
[[ -z "$COLLATERAL_POOL_BASE" ]] && export COLLATERAL_POOL_BASE=7SBdHNeF9FFYySEoszpjZXXQsAiwa5Lzpsz6nUJWusEx
4441
[[ -z "$NEW_USER_AIRDROP_AMOUNT" ]] && export NEW_USER_AIRDROP_AMOUNT=0
45-
[[ -z "$NEON_CHAIN_ID" ]] && export NEON_CHAIN_ID=0x6f
4642
[[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=90000
4743
[[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="15"
4844
[[ -z "$MINIMAL_GAS_PRICE" ]] && export MINIMAL_GAS_PRICE="1"
@@ -54,15 +50,14 @@ fi
5450
[[ -z "$EVM_LOADER" ]] && echo "EVM_LOADER is not set" && exit 1
5551
[[ -z "$ETH_TOKEN_MINT" ]] && echo "ETH_TOKEN_MINT is not set" && exit 1
5652
[[ -z "$COLLATERAL_POOL_BASE" ]] && echo "COLLATERAL_POOL_BASE is not set" && exit 1
57-
[[ -z "$NEON_CHAIN_ID" ]] && echo "NEON_CHAIN_ID is not set" && exit 1
5853

5954
echo SOLANA_URL=$SOLANA_URL
6055

6156
solana config set -u $SOLANA_URL
6257

6358
solana config get
6459

65-
for i in {1..10}; do
60+
for i in {1..30}; do
6661
if solana cluster-version; then break; fi
6762
sleep 2
6863
done

proxy/test_cancel_hanged.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
os.environ['EVM_LOADER'] = "53DfF883gyixYNXnM7s5xhdeyV8mVk9T4i2hGV9vG9io"
99
os.environ['ETH_TOKEN_MINT'] = "HPsV9Deocecw3GeZv1FkAPNCBRfuVyfw9MMwjwRe1xaU"
1010
os.environ['COLLATERAL_POOL_BASE'] = "4sW3SZDJB7qXUyCYKA7pFL8eCTfm3REr8oSiKkww7MaT"
11-
os.environ['NEON_CHAIN_ID'] = "0x6f"
1211

1312
import base64
1413
import unittest

proxy/test_environment.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import unittest
2+
import os
3+
from web3 import Web3
4+
from proxy.plugin.solana_rest_api_tools import read_elf_params
5+
6+
proxy_url = os.environ.get('PROXY_URL', 'http://127.0.0.1:9090/solana')
7+
proxy = Web3(Web3.HTTPProvider(proxy_url))
8+
9+
class Test_Environment(unittest.TestCase):
10+
@classmethod
11+
def setUpClass(cls):
12+
cls.elf_params = {}
13+
read_elf_params(cls.elf_params)
14+
15+
def test_read_elf_params(self):
16+
print("\n\nhttps://github.com/neonlabsorg/neon-evm/issues/347")
17+
elf_params = {}
18+
read_elf_params(elf_params)
19+
20+
neon_chain_id = elf_params.get('NEON_CHAIN_ID', None)
21+
self.assertTrue(neon_chain_id is not None)
22+
self.assertEqual(neon_chain_id, os.environ.get('NEON_CHAIN_ID', None))
23+
24+
neon_token_mint = elf_params.get('NEON_TOKEN_MINT', None)
25+
self.assertTrue(neon_token_mint is not None)
26+
self.assertEqual(neon_token_mint, os.environ.get('NEON_TOKEN_MINT', None))
27+
28+
neon_pool_base = elf_params.get('NEON_POOL_BASE', None)
29+
self.assertTrue(neon_pool_base is not None)
30+
self.assertEqual(neon_pool_base, os.environ.get('NEON_POOL_BASE', None))
31+
32+
def test_neon_chain_id(self):
33+
print("\n\nhttps://github.com/neonlabsorg/neon-evm/issues/347")
34+
neon_chain_id = os.environ.get('NEON_CHAIN_ID', None)
35+
print(f"NEON_CHAIN_ID = {neon_chain_id}")
36+
self.assertTrue(neon_chain_id is not None)
37+
38+
eth_chainId: int = proxy.eth.chain_id
39+
print(f"eth_chainId = {eth_chainId}")
40+
self.assertEqual(eth_chainId, int(neon_chain_id))
41+
42+
net_version: str = proxy.net.version
43+
print(f"net_version = {net_version}")
44+
self.assertEqual(net_version, neon_chain_id)
45+

0 commit comments

Comments
 (0)