Skip to content
Merged
Show file tree
Hide file tree
Changes from 47 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
5a3e9a6
Use neonlabsorg/evm_loader:stable image for build
Oct 12, 2021
e59efe2
Merge remote-tracking branch 'origin/develop'
Oct 19, 2021
44dd154
Merge remote-tracking branch 'origin/develop'
Oct 21, 2021
21d20a1
Launch all uniswap tests for master branch
vasiliy-zaznobin Nov 16, 2021
4e03e73
Merge remote-tracking branch 'origin/develop'
Nov 16, 2021
e496b27
VERSION = (0, 4, 0)
vasiliy-zaznobin Nov 16, 2021
fe41d64
EVM_LOADER_REVISION:=v0.4.0
vasiliy-zaznobin Nov 16, 2021
5467c50
EVM_LOADER_REVISION:=stable
vasiliy-zaznobin Nov 16, 2021
e15d847
Merge remote-tracking branch 'origin/develop'
vasiliy-zaznobin Dec 7, 2021
2416591
NEON_PROXY_PKG_VERSION = '0.5.0'
vasiliy-zaznobin Dec 7, 2021
168e428
VERSION = (0, 4, 0)
vasiliy-zaznobin Nov 16, 2021
3125645
EVM_LOADER_REVISION:=v0.4.0
vasiliy-zaznobin Nov 16, 2021
07f175d
EVM_LOADER_REVISION:=stable
vasiliy-zaznobin Nov 16, 2021
0bbb26b
289 implement eth get storage at (#298)
ivandzen Nov 18, 2021
7841b07
#256 create and airdrop eth account (#259)
rozhkovdmitrii Nov 18, 2021
ce05c81
#305 Remove extra args from ether2program (#309)
rozhkovdmitrii Nov 19, 2021
6ca860a
Change default logDB postgress pass (#317)
rozhkovdmitrii Nov 23, 2021
b3b322f
#311 Create account and airdrop on gas estimation if it's preset
rozhkovdmitrii Nov 24, 2021
c860ed0
neonbals/neon-evm#371 Update STORAGE_ACCOUNT_INFO_LAYOUT (#315)
sinev-valentine Nov 24, 2021
9bb3f89
319 add neon cli version handler (#325)
vasiliy-zaznobin Nov 24, 2021
081bc75
fix storage account check (#327)
sinev-valentine Nov 24, 2021
7845ca9
#320 add neon proxy version handler (#323)
vasiliy-zaznobin Nov 25, 2021
f299c57
313 concurrent execution of solana program dump (#314)
ivandzen Nov 25, 2021
0a5dc2d
fix scripts (#329)
ivandzen Nov 25, 2021
7964cad
#318 JSON_RPC "params" field may be omitted (#322)
mich-master Nov 26, 2021
01df8a4
#336 indexer refactoring (#340)
ivandzen Dec 2, 2021
d9a8e51
#333 fix indexer errors (#334)
otselnik Dec 2, 2021
f4b178c
#291 Proxy refactoring (#324)
otselnik Dec 2, 2021
5ced809
#337 сreate base airdropper service (#343)
ivandzen Dec 3, 2021
ae7b392
#337 fix running airdropper (#347)
ivandzen Dec 6, 2021
9feca6a
#351 fix canceller droping running transactions (#352)
otselnik Dec 6, 2021
2f0a0df
349 improve neon proxy logging to filter a request and the correspond…
vasiliy-zaznobin Dec 6, 2021
3b36864
#349 Fix using log sending solana transaction (#353)
vasiliy-zaznobin Dec 6, 2021
6bb8509
#295 iterative execution (#332)
otselnik Dec 6, 2021
56044ea
#354 Check result for errors (#355)
otselnik Dec 7, 2021
0bad34c
#360 pass transaction too large upper (#361)
otselnik Dec 7, 2021
9e8344c
NEON_PROXY_PKG_VERSION = '0.5.0'
vasiliy-zaznobin Dec 7, 2021
981c178
Merge remote-tracking branch 'origin/develop->master_0.5.0' into deve…
vasiliy-zaznobin Dec 7, 2021
4c87c95
Merge pull request #362 from neonlabsorg/develop->master_0.5.0
vasiliy-zaznobin Dec 7, 2021
2ccfcce
Merge remote-tracking branch 'origin/develop' into develop->master_0.…
vasiliy-zaznobin Dec 8, 2021
28881d2
Merge pull request #363 from neonlabsorg/develop->master_0.5.0-rc2
vasiliy-zaznobin Dec 8, 2021
3771577
Merge remote-tracking branch 'origin/develop' into develop->master_0.…
vasiliy-zaznobin Dec 13, 2021
1e4c4ab
Merge pull request #372 from neonlabsorg/develop->master_0.5.0_rc3
vasiliy-zaznobin Dec 13, 2021
cacf6f8
Master 0.5.0 rc4 (#380)
vasiliy-zaznobin Dec 16, 2021
5ce4d3d
0.5.0-rc4 (#386)
vasiliy-zaznobin Dec 16, 2021
6a3dbd9
Neon-proxy/v0.5.0 (#388)
vasiliy-zaznobin Dec 17, 2021
424cf24
Merge remote-tracking branch 'origin/master' into master_v0.5.0->develop
vasiliy-zaznobin Dec 17, 2021
5aef94b
Neon-proxy/v0.5.1-dev
vasiliy-zaznobin Dec 17, 2021
03c051b
stable->latest
vasiliy-zaznobin Dec 17, 2021
3e43911
VERSION = (0, 5, 1)
vasiliy-zaznobin Dec 17, 2021
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
2 changes: 1 addition & 1 deletion .buildkite/steps/build-image.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set -euo pipefail
REVISION=$(git rev-parse HEAD)

set ${SOLANA_REVISION:=v1.7.9-testnet}
set ${EVM_LOADER_REVISION:=latest}
set ${EVM_LOADER_REVISION:=stable}

# Refreshing neonlabsorg/solana:latest image is required to run .buildkite/steps/build-image.sh locally
docker pull neonlabsorg/solana:${SOLANA_REVISION}
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG SOLANA_REVISION=v1.7.9-testnet
ARG EVM_LOADER_REVISION=latest
ARG EVM_LOADER_REVISION=stable

FROM neonlabsorg/solana:${SOLANA_REVISION} AS cli

Expand Down
44 changes: 36 additions & 8 deletions proxy/common_neon/solana_interactor.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@
import re
import time

from solana.blockhash import Blockhash
from solana.rpc.api import Client as SolanaClient
from solana.rpc.api import SendTransactionError
from solana.rpc.commitment import Confirmed
from solana.rpc.types import TxOpts
from solana.transaction import Transaction

from .costs import update_transaction_cost
from .utils import get_from_dict
from ..environment import EVM_LOADER_ID, CONFIRMATION_CHECK_DELAY, LOG_SENDING_SOLANA_TRANSACTION
from ..environment import EVM_LOADER_ID, CONFIRMATION_CHECK_DELAY, LOG_SENDING_SOLANA_TRANSACTION, RETRY_ON_FAIL

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
Expand Down Expand Up @@ -74,21 +77,46 @@ def _getAccountData(self, account, expected_length, owner=None):


def send_transaction(self, trx, eth_trx, reason=None):
reciept = self.send_transaction_unconfirmed(trx)
result = self.collect_result(reciept, eth_trx, reason)
return result

for _i in range(RETRY_ON_FAIL):
reciept = self.send_transaction_unconfirmed(trx)
try:
return self.collect_result(reciept, eth_trx, reason)
except RuntimeError as err:
if str(err).find("could not confirm transaction") > 0:
time.sleep(0.1)
continue
raise
RuntimeError("Failed {} times to send transaction or get confirmnation {}".format(RETRY_ON_FAIL, trx.__dict__))


def send_transaction_unconfirmed(self, txn: Transaction):
for _i in range(RETRY_ON_FAIL):
# TODO: Cache recent blockhash
blockhash_resp = self.client.get_recent_blockhash() # commitment=Confirmed
if not blockhash_resp["result"]:
raise RuntimeError("failed to get recent blockhash")
blockhash = blockhash_resp["result"]["value"]["blockhash"]
txn.recent_blockhash = Blockhash(blockhash)
txn.sign(self.signer)
try:
return self.client.send_raw_transaction(txn.serialize(), opts=TxOpts(preflight_commitment=Confirmed))["result"]
except SendTransactionError as err:
err_type = get_from_dict(err.result, "data", "err")
if err_type is not None and isinstance(err_type, str) and err_type == "BlockhashNotFound":
logger.debug("BlockhashNotFound {}".format(blockhash))
time.sleep(0.1)
continue
raise
raise RuntimeError("Failed trying {} times to get Blockhash for transaction {}".format(RETRY_ON_FAIL, txn.__dict__))

def send_transaction_unconfirmed(self, trx):
result = self.client.send_transaction(trx, self.signer, opts=TxOpts(preflight_commitment=Confirmed))["result"]
return result

def collect_result(self, reciept, eth_trx, reason=None):
self.confirm_transaction(reciept)
result = self.client.get_confirmed_transaction(reciept)
update_transaction_cost(result, eth_trx, reason)
return result


def send_measured_transaction(self, trx, eth_trx, reason):
if LOG_SENDING_SOLANA_TRANSACTION:
logger.debug("send_measured_transaction for reason %s: %s ", reason, trx.__dict__)
Expand Down
19 changes: 15 additions & 4 deletions proxy/common_neon/transaction_sender.py
Original file line number Diff line number Diff line change
Expand Up @@ -372,16 +372,27 @@ def write_trx_to_holder_account(self):
msg = self.eth_trx.signature() + len(self.eth_trx.unsigned_msg()).to_bytes(8, byteorder="little") + self.eth_trx.unsigned_msg()

offset = 0
receipts = []
rest = msg
trxs = []
while len(rest):
(part, rest) = (rest[:1000], rest[1000:])
trx = self.instruction.make_write_transaction(offset, part)
receipts.append(self.sender.send_transaction_unconfirmed(trx))
trxs.append(trx)
offset += len(part)

logger.debug("receipts %s", receipts)
self.sender.collect_results(receipts, eth_trx=self.eth_trx, reason='WriteHolder')
while len(trxs) > 0:
receipts = {}
for trx in trxs:
receipts[self.sender.send_transaction_unconfirmed(trx)] = trx

logger.debug("receipts %s", receipts)
for rcpt, trx in receipts.items():
try:
self.sender.collect_result(rcpt, eth_trx=self.eth_trx, reason='WriteHolder')
except Exception as err:
logger.debug("collect_result exception: {}".format(str(err)))
else:
trxs.remove(trx)


def call_continue(self):
Expand Down
1 change: 1 addition & 0 deletions proxy/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
LOG_SENDING_SOLANA_TRANSACTION = os.environ.get("LOG_SENDING_SOLANA_TRANSACTION", "NO") == "YES"
LOG_NEON_CLI_DEBUG = os.environ.get("LOG_NEON_CLI_DEBUG", "NO") == "YES"
WRITE_TRANSACTION_COST_IN_DB = os.environ.get("WRITE_TRANSACTION_COST_IN_DB", "NO") == "YES"
RETRY_ON_FAIL = int(os.environ.get("RETRY_ON_FAIL", "2"))

class solana_cli:
def call(self, *args):
Expand Down
2 changes: 1 addition & 1 deletion proxy/plugin/solana_rest_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
modelInstanceLock = threading.Lock()
modelInstance = None

NEON_PROXY_PKG_VERSION = '0.4.1-rc0'
NEON_PROXY_PKG_VERSION = '0.5.0'
NEON_PROXY_REVISION = 'NEON_PROXY_REVISION_TO_BE_REPLACED'

class EthereumModel:
Expand Down
4 changes: 4 additions & 0 deletions proxy/run-proxy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ if [ "$CONFIG" == "ci" ]; then
[[ -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
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
elif [ "$CONFIG" == "devnet" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="https://api.devnet.solana.com"
[[ -z "$EVM_LOADER" ]] && export EVM_LOADER=eeLSJgWzzxrqKv1UxtRVVH8FX3qCQWUs9QuAjJpETGU
Expand All @@ -27,6 +29,7 @@ elif [ "$CONFIG" == "devnet" ]; then
[[ -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
elif [ "$CONFIG" == "testnet" ]; then
[[ -z "$SOLANA_URL" ]] && export SOLANA_URL="https://api.testnet.solana.com"
[[ -z "$EVM_LOADER" ]] && export EVM_LOADER=eeLSJgWzzxrqKv1UxtRVVH8FX3qCQWUs9QuAjJpETGU
Expand All @@ -35,6 +38,7 @@ elif [ "$CONFIG" == "testnet" ]; then
[[ -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
elif [ "$CONFIG" != "custom" ]; then
exit 1
fi
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"""
from setuptools import setup, find_packages

VERSION = (2, 2, 0)
VERSION = (0, 4, 0)
__version__ = '.'.join(map(str, VERSION[0:3]))
__description__ = '''⚡⚡⚡Fast, Lightweight, Pluggable, TLS interception capable proxy server
focused on Network monitoring, controls & Application development, testing, debugging.'''
Expand Down