Skip to content
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
22b10f9
307 implement withdraw instruction (#591)
ivandzen Mar 11, 2022
0ec3c9e
intro
Mar 11, 2022
9fb9fa7
upd creds
Mar 11, 2022
7ef74d6
fix
Mar 11, 2022
60124c2
wip
Mar 11, 2022
ebf8ea0
typo
Mar 11, 2022
432bac7
fix
Mar 11, 2022
dbe118d
wip
Mar 11, 2022
600d6ca
wip
Mar 11, 2022
cb18d20
wip
Mar 11, 2022
e9fd64c
wip
Mar 11, 2022
b37c3cb
wip
Mar 11, 2022
2f443c7
wip
Mar 11, 2022
885a0ad
upd SG
Mar 11, 2022
d35af72
enable tests
Mar 11, 2022
ba6750e
wip
Mar 11, 2022
332c031
wip
Mar 11, 2022
805e4ae
Merge branch '583-introduce-full-test-suite' into 583-introduce-full-…
Mar 12, 2022
9c9447b
wip
Mar 12, 2022
991cc46
wip
Mar 12, 2022
fde5590
wip
Mar 12, 2022
331a33e
#368 move sql schema to distinct file (#586)
vasiliy-zaznobin Mar 12, 2022
5cbce09
#631 extract Airdropper class (#632)
rozhkovdmitrii Mar 12, 2022
76b68aa
debug
Mar 14, 2022
db98d44
merge
Mar 14, 2022
69798e9
merge
Mar 14, 2022
ecb4831
remove unused port
Mar 14, 2022
92d207b
wip
Mar 14, 2022
38edd9a
wip
Mar 14, 2022
c677de9
wip
Mar 14, 2022
9e6af06
wip
Mar 14, 2022
509d49b
wip
Mar 14, 2022
c59129b
wip
Mar 14, 2022
b2144cc
change instance type
Mar 14, 2022
f8a6c03
Fix eth_estimageGas for Metamask transfer (#634)
anton-lisanin Mar 14, 2022
f959e82
wip
Mar 14, 2022
c11abaa
fix path
Mar 14, 2022
9b0b676
wip
Mar 14, 2022
5dd2ec9
wip
Mar 14, 2022
3dba0fd
wip
Mar 14, 2022
6a68eae
artifacts
Mar 15, 2022
6bd5b62
enable required step
Mar 15, 2022
8809fde
wip
Mar 15, 2022
cc853d1
wip
Mar 15, 2022
0045faa
proxy artefacts
Mar 15, 2022
82847a3
redirect stderr
Mar 15, 2022
77429f5
enable test step
Mar 15, 2022
3938e6a
typo
Mar 15, 2022
ea7b59f
typo
Mar 15, 2022
e8c9696
faucet
Mar 15, 2022
3d30b36
wip
Mar 15, 2022
a76732a
debug
Mar 15, 2022
d61c342
Add implementation of neon_getSolanaTransactionByNeonTransaction. #639
afalaleev Mar 15, 2022
0488307
wip
Mar 15, 2022
5f4f39e
Add SOLANA_COMMITMENT
Mar 15, 2022
9b45c08
Merge pull request #643 from neonlabsorg/639-neon-api
afalaleev Mar 15, 2022
cff0952
Enable cleaning step
Mar 16, 2022
86cecc7
wip
Mar 16, 2022
e7ddf25
wip
Mar 16, 2022
bda6d60
debug
Mar 16, 2022
cf72092
debug
Mar 16, 2022
9fa4281
testdrive
Mar 16, 2022
cf05a0f
Last changes from v0.7.x to develop (#660)
afalaleev Mar 16, 2022
ab84e08
solana tune
Mar 16, 2022
94af2b5
debug
Mar 16, 2022
6f0322c
wip
Mar 16, 2022
fd0cb99
wip
Mar 16, 2022
fa3d60d
confirmed
Mar 16, 2022
9b950fc
test
Mar 17, 2022
a15be09
Revert "test"
Mar 17, 2022
831b378
Comment extra steps
rozhkovdmitrii Mar 18, 2022
2f7f154
Comment extra steps
rozhkovdmitrii Mar 18, 2022
03ffaea
refactoring
Mar 18, 2022
20b0c54
typo
Mar 18, 2022
7d90442
Merge branch 'develop' into 583-introduce-full-test-suite-tf
Mar 18, 2022
b43719e
enable basic logic
Mar 18, 2022
f118b79
add dependences
Mar 18, 2022
d9c5aa5
playground for if
Mar 18, 2022
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
9 changes: 9 additions & 0 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ steps:
FTS_IMAGE: neonlabsorg/full_test_suite:develop
agents:
queue: "testing"
artifact_paths:
- "proxy.log"
- "solana.log"
- "measurements.log"
- "evm_loader.log"
- "dbcreation.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 @@ -44,6 +44,7 @@ function cleanup_docker {

if docker logs solana >solana.log 2>&1; then echo "solana logs saved"; fi
if docker logs evm_loader >evm_loader.log 2>&1; then echo "evm_loader logs saved"; fi
if docker logs dbcreation >dbcreation.log 2>&1; then echo "dbcreation 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
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ WORKDIR /opt

RUN apt update && \
DEBIAN_FRONTEND=noninteractive apt install -y git software-properties-common openssl curl parallel \
ca-certificates python3-pip python3-venv && \
ca-certificates python3-pip python3-venv postgresql-client && \
python3 -m venv venv && \
pip3 install --upgrade pip && \
/bin/bash -c "source venv/bin/activate" && \
Expand Down
31 changes: 5 additions & 26 deletions proxy/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,40 +9,19 @@
:license: BSD, see LICENSE for more details.
"""

from solana.publickey import PublicKey
from .proxy import entry_point
import os
from .indexer.airdropper import run_airdropper
from .indexer.indexer import run_indexer

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']
pyth_mapping_account = PublicKey(os.environ['PYTH_MAPPING_ACCOUNT'])
faucet_url = os.environ['FAUCET_URL']
wrapper_whitelist = os.environ['INDEXER_ERC20_WRAPPER_WHITELIST']
if wrapper_whitelist != 'ANY':
wrapper_whitelist = wrapper_whitelist.split(',')
neon_decimals = int(os.environ.get('NEON_DECIMALS', '9'))
solana_url = os.environ['SOLANA_URL']
evm_loader_id = os.environ['EVM_LOADER']
print(f"Will run with SOLANA_URL={solana_url}; EVM_LOADER={evm_loader_id}")

pp_solana_url = os.environ.get('PP_SOLANA_URL', None)
max_conf = float(os.environ.get('MAX_CONFIDENCE_INTERVAL', 0.02))
indexer_mode = os.environ.get('INDEXER_MODE', 'False').lower() in [1, 'true', 'True']

run_airdropper(solana_url,
pyth_mapping_account,
faucet_url,
wrapper_whitelist,
neon_decimals,
pp_solana_url,
max_conf)
elif indexer_mode:
if indexer_mode:
print("Will run in indexer mode")

solana_url = os.environ['SOLANA_URL']

run_indexer(solana_url)
else:
entry_point()
2 changes: 2 additions & 0 deletions proxy/airdropper/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from .airdropper import Airdropper, AIRDROP_AMOUNT_SOL, NEON_PRICE_USD
from .airdropper_app import AirdropperApp
6 changes: 6 additions & 0 deletions proxy/airdropper/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from . import AirdropperApp

if __name__ == '__main__':
airdropper_app = AirdropperApp()
exit_code = airdropper_app.run()
exit(exit_code)
69 changes: 8 additions & 61 deletions proxy/indexer/airdropper.py → proxy/airdropper/airdropper.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
from solana.publickey import PublicKey
from proxy.indexer.indexer_base import IndexerBase
from proxy.indexer.pythnetwork import PythNetworkClient
from proxy.indexer.base_db import BaseDB
from proxy.indexer.utils import check_error
from proxy.indexer.sql_dict import SQLDict
import requests
import base58
import traceback
from datetime import datetime
from decimal import Decimal
from logged_groups import logged_group

from ..environment import NEON_PRICE_USD, EVM_LOADER_ID
from ..common_neon.solana_interactor import SolanaInteractor
from ..indexer.indexer_base import IndexerBase
from ..indexer.pythnetwork import PythNetworkClient
from ..indexer.base_db import BaseDB
from ..indexer.utils import check_error
from ..indexer.sql_dict import SQLDict


ACCOUNT_CREATION_PRICE_SOL = Decimal('0.00472692')
Expand All @@ -20,18 +21,7 @@

class FailedAttempts(BaseDB):
def __init__(self) -> None:
BaseDB.__init__(self)

def _create_table_sql(self) -> str:
self._table_name = 'failed_airdrop_attempts'
return f'''
CREATE TABLE IF NOT EXISTS {self._table_name} (
attempt_time BIGINT,
eth_address TEXT,
reason TEXT
);
CREATE INDEX IF NOT EXISTS failed_attempt_time_idx ON {self._table_name} (attempt_time);
'''
BaseDB.__init__(self, 'failed_airdrop_attempts')

def airdrop_failed(self, eth_address, reason):
with self._conn.cursor() as cur:
Expand All @@ -43,19 +33,7 @@ def airdrop_failed(self, eth_address, reason):

class AirdropReadySet(BaseDB):
def __init__(self):
BaseDB.__init__(self)

def _create_table_sql(self) -> str:
self._table_name = 'airdrop_ready'
return f'''
CREATE TABLE IF NOT EXISTS {self._table_name} (
eth_address TEXT UNIQUE,
scheduled_ts BIGINT,
finished_ts BIGINT,
duration INTEGER,
amount_galans INTEGER
)
'''
BaseDB.__init__(self, 'airdrop_ready')

def register_airdrop(self, eth_address: str, airdrop_info: dict):
finished = int(datetime.now().timestamp())
Expand Down Expand Up @@ -293,34 +271,3 @@ def process_receipts(self):
self.process_trx_airdropper_mode(trx)
self.latest_processed_slot = max(self.latest_processed_slot, max_slot)
self._constants['latest_processed_slot'] = self.latest_processed_slot


@logged_group("neon.Airdropper")
def run_airdropper(solana_url,
pyth_mapping_account: PublicKey,
faucet_url,
wrapper_whitelist = 'ANY',
neon_decimals = 9,
pp_solana_url = None,
max_conf = 0.1, *, logger):
logger.info(f"""Running indexer with params:
solana_url: {solana_url},
evm_loader_id: {EVM_LOADER_ID},
pyth.network mapping account: {pyth_mapping_account},
faucet_url: {faucet_url},
wrapper_whitelist: {wrapper_whitelist},
NEON decimals: {neon_decimals},
Price provider solana: {pp_solana_url},
Max confidence interval: {max_conf}""")

try:
airdropper = Airdropper(solana_url,
pyth_mapping_account,
faucet_url,
wrapper_whitelist,
neon_decimals,
pp_solana_url,
max_conf)
airdropper.run()
except Exception as err:
logger.error(f'Failed to start Airdropper: {err}')
45 changes: 45 additions & 0 deletions proxy/airdropper/airdropper_app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import os
from logged_groups import logged_group
from solana.publickey import PublicKey

from ..environment import EVM_LOADER_ID

from .airdropper import Airdropper


@logged_group("neon.Airdropper")
class AirdropperApp:

def __init__(self):
self.info("Airdropper application is starting ...")
pyth_mapping_account = PublicKey(os.environ['PYTH_MAPPING_ACCOUNT'])
faucet_url = os.environ['FAUCET_URL']
wrapper_whitelist = os.environ['INDEXER_ERC20_WRAPPER_WHITELIST']
if wrapper_whitelist != 'ANY':
wrapper_whitelist = wrapper_whitelist.split(',')
neon_decimals = int(os.environ.get('NEON_DECIMALS', '9'))

pp_solana_url = os.environ.get('PP_SOLANA_URL', None)
max_conf = float(os.environ.get('MAX_CONFIDENCE_INTERVAL', 0.02))
solana_url = os.environ['SOLANA_URL']

self.info(f"""Construct Airdropper with params:
solana_url: {solana_url},
evm_loader_id: {EVM_LOADER_ID},
pyth.network mapping account: {pyth_mapping_account},
faucet_url: {faucet_url},
wrapper_whitelist: {wrapper_whitelist},
NEON decimals: {neon_decimals},
Price provider solana: {pp_solana_url},
Max confidence interval: {max_conf}""")

self._airdropper = Airdropper(solana_url, pyth_mapping_account, faucet_url, wrapper_whitelist, neon_decimals,
pp_solana_url, max_conf)

def run(self) -> int:
try:
self._airdropper.run()
except Exception as err:
self.error(f'Failed to start Airdropper: {err}')
return 1
return 0
18 changes: 1 addition & 17 deletions proxy/common_neon/costs.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,7 @@

class SQLCost(BaseDB):
def __init__(self):
BaseDB.__init__(self)

def _create_table_sql(self) -> str:
self._table_name = 'OPERATOR_COST'
return f"""
CREATE TABLE IF NOT EXISTS {self._table_name} (
id SERIAL PRIMARY KEY,
hash char(64),
cost bigint,
used_gas bigint,
sender char(40),
to_address char(40) ,
sig char(100),
status varchar(100),
reason varchar(100)
);
"""
BaseDB.__init__(self, 'OPERATOR_COST')

def insert(self, hash, cost, used_gas, sender, to_address, sig, status, reason):
with self._conn.cursor() as cur:
Expand Down
Loading