mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-20 10:34:20 +01:00
With the recent update to NUT-08, we can ensure that the amount of blank outputs is always enough to cover any overpaid lightning fees. This change implements this functionality for both the wallet and the mint. The mint updateis backwards-compatible with respect to old wallets.
51 lines
2.8 KiB
Python
51 lines
2.8 KiB
Python
import pytest
|
|
|
|
from cashu.core.base import TokenV3
|
|
from cashu.core.helpers import calculate_number_of_blank_outputs
|
|
from cashu.core.split import amount_split
|
|
|
|
|
|
def test_get_output_split():
|
|
assert amount_split(13) == [1, 4, 8]
|
|
|
|
|
|
def test_tokenv3_get_amount():
|
|
token_str = "cashuAeyJ0b2tlbiI6IFt7InByb29mcyI6IFt7ImlkIjogIkplaFpMVTZuQ3BSZCIsICJhbW91bnQiOiAyLCAic2VjcmV0IjogIjBFN2lDazRkVmxSZjVQRjFnNFpWMnciLCAiQyI6ICIwM2FiNTgwYWQ5NTc3OGVkNTI5NmY4YmVlNjU1ZGJkN2Q2NDJmNWQzMmRlOGUyNDg0NzdlMGI0ZDZhYTg2M2ZjZDUifSwgeyJpZCI6ICJKZWhaTFU2bkNwUmQiLCAiYW1vdW50IjogOCwgInNlY3JldCI6ICJzNklwZXh3SGNxcXVLZDZYbW9qTDJnIiwgIkMiOiAiMDIyZDAwNGY5ZWMxNmE1OGFkOTAxNGMyNTliNmQ2MTRlZDM2ODgyOWYwMmMzODc3M2M0NzIyMWY0OTYxY2UzZjIzIn1dLCAibWludCI6ICJodHRwOi8vbG9jYWxob3N0OjMzMzgifV19"
|
|
token = TokenV3.deserialize(token_str)
|
|
assert token.get_amount() == 10
|
|
|
|
|
|
def test_tokenv3_get_proofs():
|
|
token_str = "cashuAeyJ0b2tlbiI6IFt7InByb29mcyI6IFt7ImlkIjogIkplaFpMVTZuQ3BSZCIsICJhbW91bnQiOiAyLCAic2VjcmV0IjogIjBFN2lDazRkVmxSZjVQRjFnNFpWMnciLCAiQyI6ICIwM2FiNTgwYWQ5NTc3OGVkNTI5NmY4YmVlNjU1ZGJkN2Q2NDJmNWQzMmRlOGUyNDg0NzdlMGI0ZDZhYTg2M2ZjZDUifSwgeyJpZCI6ICJKZWhaTFU2bkNwUmQiLCAiYW1vdW50IjogOCwgInNlY3JldCI6ICJzNklwZXh3SGNxcXVLZDZYbW9qTDJnIiwgIkMiOiAiMDIyZDAwNGY5ZWMxNmE1OGFkOTAxNGMyNTliNmQ2MTRlZDM2ODgyOWYwMmMzODc3M2M0NzIyMWY0OTYxY2UzZjIzIn1dLCAibWludCI6ICJodHRwOi8vbG9jYWxob3N0OjMzMzgifV19"
|
|
token = TokenV3.deserialize(token_str)
|
|
assert len(token.get_proofs()) == 2
|
|
|
|
|
|
def test_tokenv3_deserialize_serialize():
|
|
token_str = "cashuAeyJ0b2tlbiI6IFt7InByb29mcyI6IFt7ImlkIjogIkplaFpMVTZuQ3BSZCIsICJhbW91bnQiOiAyLCAic2VjcmV0IjogIjBFN2lDazRkVmxSZjVQRjFnNFpWMnciLCAiQyI6ICIwM2FiNTgwYWQ5NTc3OGVkNTI5NmY4YmVlNjU1ZGJkN2Q2NDJmNWQzMmRlOGUyNDg0NzdlMGI0ZDZhYTg2M2ZjZDUifSwgeyJpZCI6ICJKZWhaTFU2bkNwUmQiLCAiYW1vdW50IjogOCwgInNlY3JldCI6ICJzNklwZXh3SGNxcXVLZDZYbW9qTDJnIiwgIkMiOiAiMDIyZDAwNGY5ZWMxNmE1OGFkOTAxNGMyNTliNmQ2MTRlZDM2ODgyOWYwMmMzODc3M2M0NzIyMWY0OTYxY2UzZjIzIn1dLCAibWludCI6ICJodHRwOi8vbG9jYWxob3N0OjMzMzgifV19"
|
|
token = TokenV3.deserialize(token_str)
|
|
assert token.serialize() == token_str
|
|
|
|
|
|
def test_calculate_number_of_blank_outputs():
|
|
# Example from NUT-08 specification.
|
|
fee_reserve_sat = 1000
|
|
expected_n_blank_outputs = 10
|
|
n_blank_outputs = calculate_number_of_blank_outputs(fee_reserve_sat)
|
|
assert n_blank_outputs == expected_n_blank_outputs
|
|
|
|
|
|
def test_calculate_number_of_blank_outputs_for_small_fee_reserve():
|
|
# There should always be at least one blank output.
|
|
fee_reserve_sat = 1
|
|
expected_n_blank_outputs = 1
|
|
n_blank_outputs = calculate_number_of_blank_outputs(fee_reserve_sat)
|
|
assert n_blank_outputs == expected_n_blank_outputs
|
|
|
|
|
|
def test_calculate_number_of_blank_outputs_fails_for_negative_fee_reserve():
|
|
# Negative fee reserve is not supported.
|
|
fee_reserve_sat = 0
|
|
with pytest.raises(AssertionError):
|
|
_ = calculate_number_of_blank_outputs(fee_reserve_sat)
|