mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-16 19:38:09 +00:00
app.lisk: Add lisk_get_address and helpers
This commit is contained in:
parent
59e6e49111
commit
a2a861a688
11
src/apps/lisk/__init__.py
Normal file
11
src/apps/lisk/__init__.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from trezor.wire import register, protobuf_workflow
|
||||||
|
from trezor.messages.wire_types import \
|
||||||
|
LiskGetAddress
|
||||||
|
|
||||||
|
|
||||||
|
def dispatch_LiskGetAddress(*args, **kwargs):
|
||||||
|
from .get_address import layout_lisk_get_address
|
||||||
|
return layout_lisk_get_address(*args, **kwargs)
|
||||||
|
|
||||||
|
def boot():
|
||||||
|
register(LiskGetAddress, protobuf_workflow, dispatch_LiskGetAddress)
|
25
src/apps/lisk/get_address.py
Normal file
25
src/apps/lisk/get_address.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
from apps.wallet.get_address import _show_address, _show_qr
|
||||||
|
from .helpers import LISK_CURVE, get_address_from_public_key
|
||||||
|
|
||||||
|
|
||||||
|
async def layout_lisk_get_address(ctx, msg):
|
||||||
|
from trezor.messages.LiskAddress import LiskAddress
|
||||||
|
from trezor.crypto.curve import ed25519
|
||||||
|
from ..common import seed
|
||||||
|
|
||||||
|
address_n = msg.address_n or ()
|
||||||
|
|
||||||
|
node = await seed.derive_node(ctx, address_n, LISK_CURVE)
|
||||||
|
|
||||||
|
seckey = node.private_key()
|
||||||
|
public_key = ed25519.publickey(seckey)
|
||||||
|
address = get_address_from_public_key(public_key)
|
||||||
|
|
||||||
|
if msg.show_display:
|
||||||
|
while True:
|
||||||
|
if await _show_address(ctx, address):
|
||||||
|
break
|
||||||
|
if await _show_qr(ctx, address):
|
||||||
|
break
|
||||||
|
|
||||||
|
return LiskAddress(address=address)
|
33
src/apps/lisk/helpers.py
Normal file
33
src/apps/lisk/helpers.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
LISK_CURVE = 'ed25519'
|
||||||
|
|
||||||
|
def get_address_from_public_key(public_key):
|
||||||
|
from trezor.crypto.hashlib import sha256
|
||||||
|
|
||||||
|
# logic from lisk-js library
|
||||||
|
# https://github.com/LiskHQ/lisk-js/blob/115e0e771e8456dc6c1d4acaabba93d975655cfe/lib/transactions/crypto/convert.js#L30
|
||||||
|
publicKeyHash = list(sha256(public_key).digest())
|
||||||
|
addressData = []
|
||||||
|
for i in range(8):
|
||||||
|
addressData.append(publicKeyHash[7 - i])
|
||||||
|
|
||||||
|
address = int.from_bytes(bytes(addressData), 'big')
|
||||||
|
return str(address) + "L"
|
||||||
|
|
||||||
|
def get_votes_count(votes):
|
||||||
|
plus, minus = [], []
|
||||||
|
for vote in votes:
|
||||||
|
plus.append(vote) if vote.startswith('+') else minus.append(vote)
|
||||||
|
return len(plus), len(minus)
|
||||||
|
|
||||||
|
def get_vote_tx_text(votes):
|
||||||
|
plus, minus = get_votes_count(votes)
|
||||||
|
text = []
|
||||||
|
if plus > 0:
|
||||||
|
text.append(_text_with_plural('Add', plus))
|
||||||
|
if minus > 0:
|
||||||
|
text.append(_text_with_plural('Remove', minus))
|
||||||
|
return text
|
||||||
|
|
||||||
|
def _text_with_plural(txt, value):
|
||||||
|
return '%s %s %s' % (txt, value, ('votes' if value != 1 else 'vote'))
|
@ -11,6 +11,7 @@ import apps.homescreen
|
|||||||
import apps.management
|
import apps.management
|
||||||
import apps.wallet
|
import apps.wallet
|
||||||
import apps.ethereum
|
import apps.ethereum
|
||||||
|
import apps.lisk
|
||||||
if __debug__:
|
if __debug__:
|
||||||
import apps.debug
|
import apps.debug
|
||||||
else:
|
else:
|
||||||
@ -21,6 +22,7 @@ apps.homescreen.boot()
|
|||||||
apps.management.boot()
|
apps.management.boot()
|
||||||
apps.wallet.boot()
|
apps.wallet.boot()
|
||||||
apps.ethereum.boot()
|
apps.ethereum.boot()
|
||||||
|
apps.lisk.boot()
|
||||||
if __debug__:
|
if __debug__:
|
||||||
apps.debug.boot()
|
apps.debug.boot()
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user