Skip to content

Commit

Permalink
fix: cashu send --lock (cashubtc#570)
Browse files Browse the repository at this point in the history
  • Loading branch information
callebtc authored Jul 8, 2024
1 parent 6a0a370 commit 51ae82b
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 10 deletions.
29 changes: 19 additions & 10 deletions cashu/wallet/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,24 +135,33 @@ async def send(
sig_all=True,
n_sigs=1,
)
print(f"Secret lock: {secret_lock}")
logger.debug(f"Secret lock: {secret_lock}")

await wallet.load_proofs()

await wallet.load_mint()
# get a proof with specific amount
send_proofs, fees = await wallet.select_to_send(
wallet.proofs,
amount,
set_reserved=False,
offline=offline,
include_fees=include_fees,
)
if secret_lock:
_, send_proofs = await wallet.split_to_send(
wallet.proofs,
amount,
set_reserved=False, # we set reserved later
secret_lock=secret_lock,
include_fees=include_fees,
)
else:
send_proofs, fees = await wallet.select_to_send(
wallet.proofs,
amount,
set_reserved=False, # we set reserved later
offline=offline,
include_fees=include_fees,
)

token = await wallet.serialize_proofs(
send_proofs, include_dleq=include_dleq, legacy=legacy, memo=memo
)

print(token)
await wallet.set_reserved(send_proofs, reserved=True)

await wallet.set_reserved(send_proofs, reserved=True)
return wallet.available_balance, token
34 changes: 34 additions & 0 deletions tests/test_wallet_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -483,3 +483,37 @@ def test_selfpay(cli_prefix):
assert result.exception is None
print(result.output)
assert result.exit_code == 0


def test_send_with_lock(mint, cli_prefix):
# call "cashu locks" first and get the lock
runner = CliRunner()
result = runner.invoke(
cli,
[*cli_prefix, "locks"],
)
assert result.exception is None
print("test_send_with_lock", result.output)
# iterate through all words and get the word that starts with "P2PK:"
lock = None
for word in result.output.split(" "):
# strip the word
word = word.strip()
if word.startswith("P2PK:"):
lock = word
break
assert lock is not None, "no lock found"
pubkey = lock.split(":")[1]

# now lock the token
runner = CliRunner()
result = runner.invoke(
cli,
[*cli_prefix, "send", "10", "--lock", lock],
)
assert result.exception is None
print("test_send_with_lock", result.output)
token_str = result.output.split("\n")[0]
assert "cashuB" in token_str, "output does not have a token"
token = TokenV4.deserialize(token_str).to_tokenv3()
assert pubkey in token.token[0].proofs[0].secret

0 comments on commit 51ae82b

Please sign in to comment.