70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
import string
|
|
from typing import Union
|
|
|
|
from ethereum_client.utils import apdu_as_string, write_varint
|
|
|
|
class ERC20_Information:
|
|
def __init__(self, erc20_ticker: string , addr: Union[str, bytes], nb_decimals: int, chainID: int, sign: str) -> None:
|
|
self.erc20_ticker: bytes = apdu_as_string(erc20_ticker)
|
|
self.addr: bytes = bytes.fromhex(addr[2:]) if isinstance(addr, str) else addr
|
|
self.nb_decimals: int = nb_decimals
|
|
self.chainID: int = chainID
|
|
self.sign: bytes = apdu_as_string(sign)
|
|
|
|
def serialize(self) -> bytes:
|
|
return b"".join([
|
|
write_varint(len(self.erc20_ticker)),
|
|
self.erc20_ticker,
|
|
|
|
self.addr,
|
|
|
|
self.nb_decimals.to_bytes(4, byteorder="big"),
|
|
|
|
self.chainID.to_bytes(4, byteorder="big"),
|
|
|
|
self.sign,
|
|
])
|
|
|
|
class Plugin:
|
|
"""Plugin class
|
|
Allows to generate an apdu of the SET_PLUGIN command or PROVIDE_NFT_INFORMATION
|
|
|
|
PROVIDE_NFT_INFORMATION
|
|
----
|
|
do not define a selector
|
|
|
|
"""
|
|
def __init__(self, type: int, version: int, name: str, addr: Union[str, bytes], selector: int = -1, chainID: int = 1, keyID: int = 0, algorithm: int = 1, sign: str = "") -> None:
|
|
self.type: int = type
|
|
self.version: int = version
|
|
self.name: bytes = bytes(name, 'UTF-8')
|
|
self.addr: bytes = bytes.fromhex(addr[2:]) if isinstance(addr, str) else addr
|
|
self.selector: int = selector
|
|
self.chainID: int = chainID
|
|
self.keyID: int = keyID
|
|
self.algorithm: int = algorithm
|
|
self.sign: bytes = apdu_as_string(sign)
|
|
|
|
def serialize(self) -> bytes:
|
|
return b"".join([
|
|
self.type.to_bytes(1, byteorder="big"),
|
|
|
|
self.version.to_bytes(1, byteorder="big"),
|
|
|
|
write_varint(len(self.name)),
|
|
self.name,
|
|
|
|
self.addr,
|
|
|
|
b'' if self.selector == -1 else self.selector.to_bytes(4, byteorder="big"),
|
|
|
|
self.chainID.to_bytes(8, byteorder="big"),
|
|
|
|
self.keyID.to_bytes(1, byteorder="big"),
|
|
|
|
self.algorithm.to_bytes(1, byteorder="big"),
|
|
|
|
write_varint(len(self.sign)),
|
|
self.sign,
|
|
|
|
]) |