Skip to content

Commit dfa8ab4

Browse files
authored
refactor is_accumulator_update (#41)
* refactor is_accumulator_update * bump * add return type
1 parent 514dfab commit dfa8ab4

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

pythclient/price_feeds.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -390,9 +390,25 @@ def parse_price_attestation(bytes_):
390390
}
391391

392392

393+
def is_accumulator_update(vaa, encoding=DEFAULT_VAA_ENCODING) -> bool:
394+
"""
395+
This function checks if a given VAA is an accumulator update.
396+
397+
Parameters:
398+
vaa (str): The VAA to check.
399+
encoding (str, optional): The encoding of the VAA. Defaults to hex.
400+
401+
Returns:
402+
bool: True if the VAA is an accumulator update, False otherwise.
403+
"""
404+
if encode_vaa_for_chain(vaa, encoding, buffer=True)[:4].hex() == ACCUMULATOR_MAGIC:
405+
return True
406+
return False
407+
408+
393409
# Referenced from https://github.com/pyth-network/pyth-crosschain/blob/110caed6be3be7885773d2f6070b143cc13fb0ee/price_service/server/src/rest.ts#L139
394410
def vaa_to_price_infos(vaa, encoding=DEFAULT_VAA_ENCODING) -> List[PriceInfo]:
395-
if encode_vaa_for_chain(vaa, encoding, buffer=True)[:4].hex() == ACCUMULATOR_MAGIC:
411+
if is_accumulator_update(vaa, encoding):
396412
return extract_price_info_from_accumulator_update(vaa, encoding)
397413
parsed_vaa = parse_vaa(vaa, encoding)
398414
batch_attestation = parse_batch_price_attestation(parsed_vaa["payload"])

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
setup(
99
name='pythclient',
10-
version='0.1.13',
10+
version='0.1.14',
1111
packages=['pythclient'],
1212
author='Pyth Developers',
1313
author_email='[email protected]',

tests/test_price_feeds.py

+8
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
MerkleUpdate,
77
compress_accumulator_update,
88
encode_vaa_for_chain,
9+
is_accumulator_update,
910
parse_accumulator_update,
1011
serialize_accumulator_update,
1112
vaa_to_price_info,
@@ -36,6 +37,13 @@
3637
ACCUMULATOR_UPDATE_DATA_SOL_DIFFERENT_VAA = "UE5BVQEAAAADuAEAAAADDQBKFAm5gZxQZ89PDktXvCHe7kD0oYCU0YfEEeMsHJ4IQW8A5g0qe0wESIGKcEcA6OPic12DE1tdp6YARgviIpFGAQH+1Lm+9Kd/9rKx0ExQ8Attr2+clx4Inv5fCUSAmLSoeX85Ozs8YsACeenITjLX5luKSNWgm21Wu9AajvgUSKyDAAJ76AwXmW2pJ2ga2ZpiQERAr6v66VM5Mrvjp5UiewmSbVv/7kf3yM2ARr6WppbBvnwVdpnN/JdQFRomAl9mZS/SAANPCkWipzos+ioWE5Zzk+xO10kmR7sLPWvalGOjqPMjJld8dxfN66QVqYvVIKNdQgyfcKKLEnfw1PKY1lyjPuYjAQSK25cVWNC8akycRKhjawoP0baF9xtbLWnYSAFBgiJjnlHdlXBEHYrJW7mB1b6ALjglMkEXcrCZsRULpWgQtMbyAQs13nvw502cMVFYXB6L82R5NcYyH4Xq4wW1Ra+x86B+ZCRgyvuH+ALP3j1/iA8ObB43eki55h83JINUyPiySTsbAQw1r4gtKmnAmKtK4Ge8e+iJyExww5huK48nqlWQZBBMcxIu0aQZDZO37Ysaa6jbHy6YgvMn1iHzh8reH2vfS/lyAQ1HVCPSzrTtOjF3ZF8BJqGWedNhdnffyvRI0g9EWqQRvXoPwy7w/41jnfKUrxcrhGpRzcNutlbPNN9kPtmUEq5gAA4QwFhqNPqzWy/hY2qp3RGHjV8i9zx4I0aJyOi7NB+1ewmm3yOZk4nvBqizGBtxdFKITNag0OHh4IbO8zON/6vnAA/qBsZEltyzDy/OJnqsX8gyOUm53/pFieXa23lSODPi9mYbwSCTjb03X3bLVjKqrHi71F5+qlbCqer7wfXNzSrgARDIhOeEsgcWUmfKfes/ln9OV4i8XAKQzlDaC4BRUnAO0yIPJZATE3rOq/UcXdHfQUJiI/BBzh+KNZTi7QsvDP1mABFZLX4GkPz92o6eLQro8y1RFNiP1w1yDf0Td7PBtE86ujHwQY3QqCHp2Q9hiVox7go1wDWEG6H0rzOKQfKTC9oyABLd6Fb+2ThyhiFtreyc/0lLmSfi3ZClZiC7eVOvg32ybmNtZWunfYuxojVdM6e3ETeHoZ8Xzsetab3iBKzOInmEAWTxKYEAAAAAABrhAfrtrFhR4yubI7X5QRqMK6xKrj7U3XuBHdGnLqSqcQAAAAAAijllAUFVV1YAAAAAAAWKvXUAACcQ3HvATwZJhOMXUOpsxl3js3cJ2UoBAFUA7w2Lb9os66QdoV1AldHaOSoNL47Qxse8D0z6yMKAtW0AAAAAdZyz4QAAAAAAGzQd////+AAAAABk8SmBAAAAAGTxKYAAAAAAdajBegAAAAAAGDQdCX7POyhhbRE0fZPLbyONUAJ+6eS8CUz89ZmOaX9iCON0AzYTqrcpKZe189sKyhdvV8wZPkdHj8K7sNCWVP77y4K8q0eIHSbEbiAZv3GQxptsAP/yBqn4QmvmKA8tqiNp2ZwyMvTreSVyWhDVPo+acVFaI5WQHw45KwMm3/L7zcEKr8+pzQl8FKfnH1wy3Tjw2hj8sPfq1NHeVttsBEK5SIPSXMgExPoP1vmy7SymxxR8JIM3ug=="
3738

3839

40+
def test_is_accumulator_update():
41+
# Test that a price service VAA is not an accumulator update
42+
assert is_accumulator_update(HEX_VAA, "hex") == False
43+
# Test that an accumulator update VAA is an accumulator update
44+
assert is_accumulator_update(ACCUMULATOR_UPDATE_DATA_BTC_SAME_VAA, "base64") == True
45+
46+
3947
def test_valid_hex_vaa_to_price_info():
4048
price_info = vaa_to_price_info(BTC_ID, HEX_VAA)
4149
assert price_info.seq_num == 558149954

0 commit comments

Comments
 (0)