Skip to content

Commit 4ff2e4e

Browse files
Added provide_token_metadata to client
1 parent 77f5c93 commit 4ff2e4e

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

client/src/ledger_app_clients/ethereum/client.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,25 @@ def personal_sign(self, path: str, msg: bytes):
231231
with self._send(chunk):
232232
pass
233233
return self._send(chunks[-1])
234+
235+
def provide_token_metadata(self,
236+
ticker: str,
237+
addr: bytes,
238+
decimals: int,
239+
chain_id: int,
240+
sig: Optional[bytes] = None):
241+
if sig is None:
242+
# Temporarily get a command with an empty signature to extract the payload and
243+
# compute the signature on it
244+
tmp = self._cmd_builder.provide_erc20_token_information(ticker,
245+
addr,
246+
decimals,
247+
chain_id,
248+
bytes())
249+
# skip APDU header & empty sig
250+
sig = sign_data(Key.CAL, tmp[6:])
251+
return self._send(self._cmd_builder.provide_erc20_token_information(ticker,
252+
addr,
253+
decimals,
254+
chain_id,
255+
sig))

client/src/ledger_app_clients/ethereum/command_builder.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class InsType(IntEnum):
1313
GET_PUBLIC_ADDR = 0x02
1414
SIGN = 0x04
1515
PERSONAL_SIGN = 0x08
16+
PROVIDE_ERC20_TOKEN_INFORMATION = 0x0a
1617
PROVIDE_NFT_INFORMATION = 0x14
1718
SET_PLUGIN = 0x16
1819
EIP712_SEND_STRUCT_DEF = 0x1a
@@ -310,3 +311,21 @@ def personal_sign(self, path: str, msg: bytes):
310311
payload = payload[chunk_size:]
311312
p1 = P1Type.SIGN_SUBSQT_CHUNK
312313
return chunks
314+
315+
def provide_erc20_token_information(self,
316+
ticker: str,
317+
addr: bytes,
318+
decimals: int,
319+
chain_id: int,
320+
sig: bytes) -> bytes:
321+
payload = bytearray()
322+
payload.append(len(ticker))
323+
payload += ticker.encode()
324+
payload += addr
325+
payload += struct.pack(">I", decimals)
326+
payload += struct.pack(">I", chain_id)
327+
payload += sig
328+
return self._serialize(InsType.PROVIDE_ERC20_TOKEN_INFORMATION,
329+
0x00,
330+
0x00,
331+
payload)

0 commit comments

Comments
 (0)