forked from TrueCloudLab/frostfs-testlib
62 lines
1.7 KiB
Python
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")
|