frostfs-testlib/src/frostfs_testlib/utils/converting_utils.py
2023-02-27 11:44:04 +01:00

62 lines
1.7 KiB
Python

import base64
import binascii
import json
import base58
def str_to_ascii_hex(input: str) -> str:
b = binascii.hexlify(input.encode())
return str(b)[2:-1]
def ascii_hex_to_str(input: str) -> bytes:
return bytes.fromhex(input)
# Two functions below do parsing of Base64-encoded byte arrays which
# tests receive from Neo node RPC calls.
def process_b64_bytearray_reverse(data: str) -> bytes:
"""
This function decodes input data from base64, reverses the byte
array and returns its string representation.
"""
arr = bytearray(base64.standard_b64decode(data))
arr.reverse()
return binascii.b2a_hex(arr)
def process_b64_bytearray(data: str) -> bytes:
"""
This function decodes input data from base64 and returns the
bytearray string representation.
"""
arr = bytearray(base64.standard_b64decode(data))
return binascii.b2a_hex(arr)
def contract_hash_to_address(chash: str) -> str:
"""
This function accepts contract hash in BE, then translates in to LE,
prepends NEO wallet prefix and encodes to base58. It is equal to
`UInt160ToString` method in NEO implementations.
"""
be = bytearray(bytes.fromhex(chash))
be.reverse()
return base58.b58encode_check(b"\x35" + bytes(be)).decode()
def get_contract_hash_from_manifest(manifest_path: str) -> str:
with open(manifest_path) as m:
data = json.load(m)
# cut off '0x' and return the hash
return data["abi"]["hash"][2:]
def get_wif_from_private_key(priv_key: bytes) -> str:
wif_version = b"\x80"
compressed_flag = b"\x01"
wif = base58.b58encode_check(wif_version + priv_key + compressed_flag)
return wif.decode("utf-8")