mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-28 17:38:35 +00:00
fix(core): don't fail in case Solana rent cannot be calculated
This commit is contained in:
parent
6c34aa377f
commit
a56b2534d5
1
core/.changelog.d/5369.fixed
Normal file
1
core/.changelog.d/5369.fixed
Normal file
@ -0,0 +1 @@
|
||||
Fixed Solana signature failure.
|
@ -222,7 +222,7 @@ class Transaction:
|
||||
if not instruction.is_ui_hidden
|
||||
]
|
||||
|
||||
def calculate_fee(self) -> Fee:
|
||||
def calculate_fee(self) -> Fee | None:
|
||||
number_of_signers = 0
|
||||
for address in self.addresses:
|
||||
if address[1] == AddressType.AddressSig:
|
||||
@ -253,21 +253,26 @@ class Transaction:
|
||||
is_unit_price_set = True
|
||||
|
||||
priority_fee = unit_price * unit_limit # in microlamports
|
||||
rent = self.calculate_rent()
|
||||
if rent is None:
|
||||
return None
|
||||
return Fee(
|
||||
base=base_fee,
|
||||
priority=(priority_fee + MICROLAMPORTS_PER_LAMPORT - 1)
|
||||
// MICROLAMPORTS_PER_LAMPORT,
|
||||
rent=self.calculate_rent(),
|
||||
rent=rent,
|
||||
)
|
||||
|
||||
def get_account_address(self, account: Account) -> bytes:
|
||||
def get_account_address(self, account: Account) -> bytes | None:
|
||||
if len(account) == 2:
|
||||
return account[0]
|
||||
else:
|
||||
_, index, _ = account
|
||||
return self.addresses[index][0]
|
||||
# AddressReference points to an Address Lookup Table account, whose contents are unavailable here:
|
||||
# https://github.com/trezor/trezor-firmware/issues/5369#issuecomment-3083683085
|
||||
# https://docs.anza.xyz/proposals/versioned-transactions#limitations
|
||||
return None
|
||||
|
||||
def calculate_rent(self) -> int:
|
||||
def calculate_rent(self) -> int | None:
|
||||
"""
|
||||
Returns max rent exemption in lamports.
|
||||
|
||||
@ -321,6 +326,8 @@ class Transaction:
|
||||
allocation += (
|
||||
SOLANA_TOKEN22_MAX_ACCOUNT_SIZE + SOLANA_ACCOUNT_OVERHEAD_SIZE
|
||||
)
|
||||
else:
|
||||
return None
|
||||
|
||||
rent_exemption = (
|
||||
allocation
|
||||
|
Loading…
Reference in New Issue
Block a user