diff --git a/proxy/deploy-test.sh b/proxy/deploy-test.sh index 4d6e29732..a0df058f2 100755 --- a/proxy/deploy-test.sh +++ b/proxy/deploy-test.sh @@ -3,8 +3,10 @@ set -xeuo pipefail echo "Deploy test..." +solana config set -u $SOLANA_URL solana address || solana-keygen new --no-passphrase -export $(/spl/bin/neon-cli --evm_loader JxujFZpNBPADbfw2MnPPgnnFGruzp2ELSFWPQgrjz5D neon-elf-params /spl/bin/evm_loader.so | grep NEON_REVISION | xargs) +solana program dump "$EVM_LOADER" ./evm_loader.dump +export $(/spl/bin/neon-cli --evm_loader "$EVM_LOADER" neon-elf-params ./evm_loader.dump) curl -v --header "Content-Type: application/json" --data '{"method":"eth_blockNumber","id":1,"jsonrpc":"2.0","params":[]}' $PROXY_URL diff --git a/proxy/plugin/solana_rest_api.py b/proxy/plugin/solana_rest_api.py index 5bd1d0b13..1d85409b0 100644 --- a/proxy/plugin/solana_rest_api.py +++ b/proxy/plugin/solana_rest_api.py @@ -42,7 +42,6 @@ modelInstanceLock = threading.Lock() modelInstance = None -chainId = os.environ.get("NEON_CHAIN_ID", "0x6e") # default value 110 EXTRA_GAS = int(os.environ.get("EXTRA_GAS", "0")) class PermanentAccounts: @@ -107,10 +106,14 @@ def web3_clientVersion(self): return self.neon_config_dict['web3_clientVersion'] def eth_chainId(self): - return chainId + neon_config_load(self) + # NEON_CHAIN_ID is a string in decimal form + return hex(int(self.neon_config_dict['NEON_CHAIN_ID'])) def net_version(self): - return str(int(chainId,base=16)) + neon_config_load(self) + # NEON_CHAIN_ID is a string in decimal form + return self.neon_config_dict['NEON_CHAIN_ID'] def eth_gasPrice(self): return hex(MINIMAL_GAS_PRICE) diff --git a/proxy/plugin/solana_rest_api_tools.py b/proxy/plugin/solana_rest_api_tools.py index 647df4231..c861e15e9 100644 --- a/proxy/plugin/solana_rest_api_tools.py +++ b/proxy/plugin/solana_rest_api_tools.py @@ -318,6 +318,20 @@ def ether2seed(ether, program_id, base): logger.debug('ether2program: {} {} => {} (seed {})'.format(ether, 255, acc, seed)) return (acc, 255, seed) +def read_elf_params(out_dict): + logger.debug('load for solana_url={} and evm_loader_id={}'.format(solana_url, evm_loader_id)) + res = solana_cli().call('program', 'dump', evm_loader_id, './evm_loader.dump') + substr = "Wrote program to " + path = "" + for line in res.splitlines(): + if line.startswith(substr): + path = line[len(substr):].strip() + if path == "": + raise Exception("cannot program dump for ", evm_loader_id) + for param in neon_cli().call("neon-elf-params", path).splitlines(): + if param.startswith('NEON_') and '=' in param: + v = param.split('=') + out_dict[v[0]] = v[1] def neon_config_load(ethereum_model): try: @@ -331,19 +345,7 @@ def neon_config_load(ethereum_model): if elapsed_time < TIMEOUT_TO_RELOAD_NEON_CONFIG: return - logger.debug('load for solana_url={} and evm_loader_id={}'.format(solana_url, evm_loader_id)) - res = solana_cli().call('program', 'dump', evm_loader_id, './evm_loader.dump') - substr = "Wrote program to " - path = "" - for line in res.splitlines(): - if line.startswith(substr): - path = line[len(substr):].strip() - if path == "": - raise Exception("cannot program dump for ", evm_loader_id) - for param in neon_cli().call("neon-elf-params", path).splitlines(): - if param.startswith('NEON_') and '=' in param: - v = param.split('=') - ethereum_model.neon_config_dict[v[0]] = v[1] + read_elf_params(ethereum_model.neon_config_dict) ethereum_model.neon_config_dict['load_time'] = datetime.now().timestamp() # 'Neon/v0.3.0-rc0-d1e4ff618457ea9cbc82b38d2d927e8a62168bec ethereum_model.neon_config_dict['web3_clientVersion'] = 'Neon/v' + \ diff --git a/proxy/run-proxy.sh b/proxy/run-proxy.sh index f1723d498..f356cd3ee 100755 --- a/proxy/run-proxy.sh +++ b/proxy/run-proxy.sh @@ -10,7 +10,6 @@ if [ "$CONFIG" == "ci" ]; then [[ -z "$ETH_TOKEN_MINT" ]] && export ETH_TOKEN_MINT=deploy [[ -z "$COLLATERAL_POOL_BASE" ]] && export COLLATERAL_POOL_BASE=deploy [[ -z "$NEW_USER_AIRDROP_AMOUNT" ]] && export NEW_USER_AIRDROP_AMOUNT=100 - [[ -z "$NEON_CHAIN_ID" ]] && export NEON_CHAIN_ID=0x6f [[ -z "$EXTRA_GAS" ]] && export EXTRA_GAS=100000 [[ -z "$NEON_CLI_TIMEOUT" ]] && export NEON_CLI_TIMEOUT="0.5" [[ -z "$USE_COMBINED_START_CONTINUE" ]] && export USE_COMBINED_START_CONTINUE="YES" @@ -22,7 +21,6 @@ elif [ "$CONFIG" == "local" ]; then [[ -z "$ETH_TOKEN_MINT" ]] && export ETH_TOKEN_MINT=deploy [[ -z "$COLLATERAL_POOL_BASE" ]] && export COLLATERAL_POOL_BASE=deploy [[ -z "$NEW_USER_AIRDROP_AMOUNT" ]] && export NEW_USER_AIRDROP_AMOUNT=10 - [[ -z "$NEON_CHAIN_ID" ]] && export NEON_CHAIN_ID=0x6f [[ -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 @@ -32,7 +30,6 @@ elif [ "$CONFIG" == "devnet" ]; then [[ -z "$ETH_TOKEN_MINT" ]] && export ETH_TOKEN_MINT=89dre8rZjLNft7HoupGiyxu3MNftR577ZYu8bHe2kK7g [[ -z "$COLLATERAL_POOL_BASE" ]] && export COLLATERAL_POOL_BASE=7SBdHNeF9FFYySEoszpjZXXQsAiwa5Lzpsz6nUJWusEx [[ -z "$NEW_USER_AIRDROP_AMOUNT" ]] && export NEW_USER_AIRDROP_AMOUNT=0 - [[ -z "$NEON_CHAIN_ID" ]] && export NEON_CHAIN_ID=0x6e [[ -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 @@ -42,7 +39,6 @@ elif [ "$CONFIG" == "testnet" ]; then [[ -z "$ETH_TOKEN_MINT" ]] && export ETH_TOKEN_MINT=89dre8rZjLNft7HoupGiyxu3MNftR577ZYu8bHe2kK7g [[ -z "$COLLATERAL_POOL_BASE" ]] && export COLLATERAL_POOL_BASE=7SBdHNeF9FFYySEoszpjZXXQsAiwa5Lzpsz6nUJWusEx [[ -z "$NEW_USER_AIRDROP_AMOUNT" ]] && export NEW_USER_AIRDROP_AMOUNT=0 - [[ -z "$NEON_CHAIN_ID" ]] && export NEON_CHAIN_ID=0x6f [[ -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" @@ -54,7 +50,6 @@ fi [[ -z "$EVM_LOADER" ]] && echo "EVM_LOADER is not set" && exit 1 [[ -z "$ETH_TOKEN_MINT" ]] && echo "ETH_TOKEN_MINT is not set" && exit 1 [[ -z "$COLLATERAL_POOL_BASE" ]] && echo "COLLATERAL_POOL_BASE is not set" && exit 1 -[[ -z "$NEON_CHAIN_ID" ]] && echo "NEON_CHAIN_ID is not set" && exit 1 echo SOLANA_URL=$SOLANA_URL @@ -62,7 +57,7 @@ solana config set -u $SOLANA_URL solana config get -for i in {1..10}; do +for i in {1..30}; do if solana cluster-version; then break; fi sleep 2 done diff --git a/proxy/test_cancel_hanged.py b/proxy/test_cancel_hanged.py index 7b3b0152d..241f15728 100644 --- a/proxy/test_cancel_hanged.py +++ b/proxy/test_cancel_hanged.py @@ -8,7 +8,6 @@ os.environ['EVM_LOADER'] = "53DfF883gyixYNXnM7s5xhdeyV8mVk9T4i2hGV9vG9io" os.environ['ETH_TOKEN_MINT'] = "HPsV9Deocecw3GeZv1FkAPNCBRfuVyfw9MMwjwRe1xaU" os.environ['COLLATERAL_POOL_BASE'] = "4sW3SZDJB7qXUyCYKA7pFL8eCTfm3REr8oSiKkww7MaT" -os.environ['NEON_CHAIN_ID'] = "0x6f" import base64 import unittest diff --git a/proxy/test_environment.py b/proxy/test_environment.py new file mode 100644 index 000000000..36000be41 --- /dev/null +++ b/proxy/test_environment.py @@ -0,0 +1,45 @@ +import unittest +import os +from web3 import Web3 +from proxy.plugin.solana_rest_api_tools import read_elf_params + +proxy_url = os.environ.get('PROXY_URL', 'http://127.0.0.1:9090/solana') +proxy = Web3(Web3.HTTPProvider(proxy_url)) + +class Test_Environment(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.elf_params = {} + read_elf_params(cls.elf_params) + + def test_read_elf_params(self): + print("\n\nhttps://github.com/neonlabsorg/neon-evm/issues/347") + elf_params = {} + read_elf_params(elf_params) + + neon_chain_id = elf_params.get('NEON_CHAIN_ID', None) + self.assertTrue(neon_chain_id is not None) + self.assertEqual(neon_chain_id, os.environ.get('NEON_CHAIN_ID', None)) + + neon_token_mint = elf_params.get('NEON_TOKEN_MINT', None) + self.assertTrue(neon_token_mint is not None) + self.assertEqual(neon_token_mint, os.environ.get('NEON_TOKEN_MINT', None)) + + neon_pool_base = elf_params.get('NEON_POOL_BASE', None) + self.assertTrue(neon_pool_base is not None) + self.assertEqual(neon_pool_base, os.environ.get('NEON_POOL_BASE', None)) + + def test_neon_chain_id(self): + print("\n\nhttps://github.com/neonlabsorg/neon-evm/issues/347") + neon_chain_id = os.environ.get('NEON_CHAIN_ID', None) + print(f"NEON_CHAIN_ID = {neon_chain_id}") + self.assertTrue(neon_chain_id is not None) + + eth_chainId: int = proxy.eth.chain_id + print(f"eth_chainId = {eth_chainId}") + self.assertEqual(eth_chainId, int(neon_chain_id)) + + net_version: str = proxy.net.version + print(f"net_version = {net_version}") + self.assertEqual(net_version, neon_chain_id) +