Skip to content

Commit

Permalink
[AUD-774] Deprecate get_confirmed_signature_for_address2 in favor of …
Browse files Browse the repository at this point in the history
…get_signatures_for_address (#2100)

Consume updated python solana SDK and use new RPC functions. Unblocks RPC node upgrade to 1.8.x
  • Loading branch information
hareeshnagaraj committed Nov 24, 2021
1 parent 1b1c834 commit 1fc81cd
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 29 deletions.
2 changes: 1 addition & 1 deletion discovery-provider/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,6 @@ pycparser==2.20
PyNaCl==1.4.0
requests==2.25.1
six==1.15.0
solana==0.9.2
solana==0.10.0
typing-extensions==3.7.4.3
urllib3==1.26.3
20 changes: 10 additions & 10 deletions discovery-provider/src/solana/solana_client_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def handle_get_sol_tx_info(client, index):
f"solana_client_manager.py | get_sol_tx_info | All requests failed to fetch {tx_sig}"
)

def get_confirmed_signature_for_address2(
def get_signatures_for_address(
self,
account: Union[str, Account, PublicKey],
before: Optional[str] = None,
Expand All @@ -77,34 +77,34 @@ def get_confirmed_signature_for_address2(
):
"""Fetches confirmed signatures for transactions given an address."""

def handle_get_confirmed_signature_for_address2(client, index):
def handle_get_signatures_for_address(client, index):
endpoint = self.endpoints[index]
num_retries = retries
while num_retries > 0:
try:
logger.info(f"solana_client_manager.py | handle_get_confirmed_signature_for_address2 | Fetching {before} {endpoint}")
transactions: ConfirmedSignatureForAddressResponse = client.get_confirmed_signature_for_address2(account, before, limit)
logger.info(f"solana_client_manager.py | handle_get_confirmed_signature_for_address2 | Finished fetching {before} {endpoint}")
logger.info(f"solana_client_manager.py | handle_get_signatures_for_address | Fetching {before} {endpoint}")
transactions: ConfirmedSignatureForAddressResponse = client.get_signatures_for_address(account, before, limit)
logger.info(f"solana_client_manager.py | handle_get_signatures_for_address | Finished fetching {before} {endpoint}")
return transactions
except Exception as e:
logger.error(
f"solana_client_manager.py | get_confirmed_signature_for_address2 | \
f"solana_client_manager.py | handle_get_signatures_for_address | \
Error fetching account {account} from endpoint {endpoint}, {e}",
exc_info=True,
)
num_retries -= 1
time.sleep(DELAY_SECONDS)
logger.error(
f"solana_client_manager.py | get_confirmed_signature_for_address2 | Retrying account fetch: {account} with endpoint {endpoint}"
f"solana_client_manager.py | handle_get_signatures_for_address | Retrying account fetch: {account} with endpoint {endpoint}"
)
raise Exception(
f"solana_client_manager.py | get_confirmed_signature_for_address2 | Failed to fetch account {account} with endpoint {endpoint}"
f"solana_client_manager.py | handle_get_signatures_for_address | Failed to fetch account {account} with endpoint {endpoint}"
)

return _try_all_with_timeout(
self.clients,
handle_get_confirmed_signature_for_address2,
"solana_client_manager.py | get_confirmed_signature_for_address2 | All requests failed"
handle_get_signatures_for_address,
"solana_client_manager.py | get_signatures_for_address | All requests failed"
)

@contextmanager
Expand Down
22 changes: 11 additions & 11 deletions discovery-provider/src/solana/solana_client_manager_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def test_get_sol_tx_info(_):


@mock.patch("solana.rpc.api.Client")
def test_get_confirmed_signature_for_address2(_):
def test_get_signatures_for_address(_):
client_mocks = [
mock.Mock(name="first"),
mock.Mock(name="second"),
Expand All @@ -85,32 +85,32 @@ def test_get_confirmed_signature_for_address2(_):
# test that it returns the client call response
client_mocks[
0
].get_confirmed_signature_for_address2.return_value = expected_response
].get_signatures_for_address.return_value = expected_response
assert (
solana_client_manager.get_confirmed_signature_for_address2(
solana_client_manager.get_signatures_for_address(
"account", "before", "limit"
)
== expected_response
)

# test that it will try subsequent clients if first one fails
client_mocks[0].get_confirmed_signature_for_address2.side_effect = Exception()
client_mocks[1].get_confirmed_signature_for_address2.side_effect = Exception()
client_mocks[0].get_signatures_for_address.side_effect = Exception()
client_mocks[1].get_signatures_for_address.side_effect = Exception()
client_mocks[
2
].get_confirmed_signature_for_address2.return_value = expected_response
].get_signatures_for_address.return_value = expected_response
assert (
solana_client_manager.get_confirmed_signature_for_address2(
solana_client_manager.get_signatures_for_address(
"account", "before", "limit"
)
== expected_response
)

# test exception raised if all requests fail
client_mocks[0].get_confirmed_signature_for_address2.side_effect = Exception()
client_mocks[1].get_confirmed_signature_for_address2.side_effect = Exception()
client_mocks[2].get_confirmed_signature_for_address2.side_effect = Exception()
client_mocks[0].get_signatures_for_address.side_effect = Exception()
client_mocks[1].get_signatures_for_address.side_effect = Exception()
client_mocks[2].get_signatures_for_address.side_effect = Exception()
with pytest.raises(Exception):
solana_client_manager.get_confirmed_signature_for_address2(
solana_client_manager.get_signatures_for_address(
"account", "before", "limit"
)
2 changes: 1 addition & 1 deletion discovery-provider/src/tasks/index_rewards_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ def get_transaction_signatures(
latest_processed_slot = get_latest_slot(session)
while not intersection_found:
transactions_history = (
solana_client_manager.get_confirmed_signature_for_address2(
solana_client_manager.get_signatures_for_address(
program, before=last_tx_signature, limit=100
)
)
Expand Down
8 changes: 4 additions & 4 deletions discovery-provider/src/tasks/index_solana_plays.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ def get_tx_in_db(session, tx_sig):
Each transaction here is signed by a trusted ethereum address authorized within the audius
protocol.
Monitoring the address is performed by leveraging the `get_confirmed_signature_for_address2`
Monitoring the address is performed by leveraging the `get_signatures_for_address`
function, which accepts 'limit' and 'before' parameters which are key to the logic below.
This function returns tx signatures processed by the programId in confirmation order,
with the most recently confirmed returned first.
Expand All @@ -248,7 +248,7 @@ def get_tx_in_db(session, tx_sig):
last_tx_signature = None <- None by design, as we must start querying the most recent chain
transactions
transactions_history = get_confirmed_signature_for_address_2(before=None) =
transactions_history = get_signatures_for_address(before=None) =
[
sig300, slot=230,
sig299, slot=230
Expand All @@ -262,7 +262,7 @@ def get_tx_in_db(session, tx_sig):
tx_batches = [batch_300_to_250]
Now, last_tx_signature = sig250
transactions_history = get_confirmed_signature_for_address_2(before=None) =
transactions_history = get_signatures_for_address(before=None) =
[
sig250, slot=210
sig249, slot=209
Expand Down Expand Up @@ -448,7 +448,7 @@ def process_solana_plays(solana_client_manager: SolanaClientManager, redis):
f"index_solana_plays.py | About to make request to get transactions before {last_tx_signature}"
)
transactions_history = (
solana_client_manager.get_confirmed_signature_for_address2(
solana_client_manager.get_signatures_for_address(
TRACK_LISTEN_PROGRAM, before=last_tx_signature, limit=TX_SIGNATURES_BATCH_SIZE
)
)
Expand Down
2 changes: 1 addition & 1 deletion discovery-provider/src/tasks/index_user_bank.py
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ def process_user_bank_txs():
logger.info(f"index_user_bank.py | high tx = {latest_processed_slot}")
while not intersection_found:
transactions_history = (
solana_client_manager.get_confirmed_signature_for_address2(
solana_client_manager.get_signatures_for_address(
USER_BANK_ADDRESS, before=last_tx_signature, limit=100
)
)
Expand Down
2 changes: 1 addition & 1 deletion discovery-provider/src/utils/cache_solana_program.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def fetch_and_cache_latest_program_tx_redis(
cache_key: str
):
transactions_history = (
solana_client_manager.get_confirmed_signature_for_address2(
solana_client_manager.get_signatures_for_address(
program, before=None, limit=1
)
)
Expand Down

0 comments on commit 1fc81cd

Please sign in to comment.