Avatar
Rob Woodgate
cec0f44d0d64d6d9d7a1c84c330f5467e752cc8b065f720e874a0bed1c5416d2
Entrepreneur, software developer and marketer. Working on #nostr #cashu 🫑 My better half: https://www.heidiwoodgate.com ⚑️Nostrly: https://www.nostrly.com ⚑️Github: https://github.com/robwoodgate ⚑️AWtomator: https://www.awtomator.com ⚑️ListLockr: https://www.listlockr.com

nostr:npub1xv8mzscll8vvy5rsdw7dcqtd2j268a6yupr6gzqh86f2ulhy9kkqmclk3x As you guys are leading the way on supporting Schnorr signing outside of the structure of Nostr events, I’d appreciate your thoughts on a β€œstandard” method signature that is future proof which all signers could adopt… if we can convince fiatjaf to include as optional in NIP07/46… or adopt informally if not. As above, it might be better renamed to avoid issues with your established method.

The current iteration is mostly aligned with Alby existing except expects a raw message string.

https://github.com/nostr-protocol/nips/pull/1842

If I was drafting the method from scratch for NIP07/46, it would return all the data needed to do checks and verification on what was signed and who by eg:

async function signString(message: string) : {hash, sig, pubkey} // sha256 hash of message, Schnorr sig of hash, pubkey of signer

Nostr events are always presented in raw form for signing, and I believe it is probably safer to present the raw string for signing too so user can be sure they are not signing something unintended or malicious that might lose them money (eg a bitcoin transaction)

eg, for a Cashu P2PK token, the raw string would be something like:

[\"P2PK\",{\"nonce\":\"859d4935c4907062a6297cf4e663e2835d90d97ecdd510745d32f6816323a41f\",\"data\":\"0249098aa8b9d2fbec49ff8598feb17b592b986e62319a4fa488a3dc36387157a7\",\"tags\":[[\"sigflag\",\"SIG_INPUTS\"]]}]

Sometimes comedy writes itself

Replying to Avatar Rob Woodgate

Nostly Cashu Redeem now supports the nostr:nprofile1qyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcppemhxue69uhkummn9ekx7mp0qqsyv47lazt9h6ycp2fsw270khje5egjgsrdkrupjg27u796g7f5k0s0pfy4z Extension for signing P2PK locked tokens. So you can use it instead of entering your nsec.

https://www.nostrly.com/cashu-redeem/

It's the ONLY Nostr extension I'm aware of that currently supports Schnorr signing.

Hopefully more will in time.... FREE THE SCHNORR!

https://github.com/nostr-protocol/nips/pull/1842

#nostr #cashu #bitcoin #schnorr #p2pk #nut11

Question nostr:nprofile1qyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcppemhxue69uhkummn9ekx7mp0qqsyv47lazt9h6ycp2fsw270khje5egjgsrdkrupjg27u796g7f5k0s0pfy4z - why does your signer take the sha256 hash as the input (sigHash), rather than the raw string to sign?

It would be better for people to SEE what they are signing for, instead of just a random hash string... the method could then hash for signing.

Nostly Cashu Redeem now supports the nostr:nprofile1qyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcppemhxue69uhkummn9ekx7mp0qqsyv47lazt9h6ycp2fsw270khje5egjgsrdkrupjg27u796g7f5k0s0pfy4z Extension for signing P2PK locked tokens. So you can use it instead of entering your nsec.

https://www.nostrly.com/cashu-redeem/

It's the ONLY Nostr extension I'm aware of that currently supports Schnorr signing.

Hopefully more will in time.... FREE THE SCHNORR!

https://github.com/nostr-protocol/nips/pull/1842

#nostr #cashu #bitcoin #schnorr #p2pk #nut11

Sorry, not sorry πŸ˜‚σ …“σ …‘σ …£σ …˜σ …₯σ „²σ …Ÿσ „’σ „Άσ …€σ …•σ „³σ „Ίσ …Ÿσ …”σ „Έσ …‚σ …§σ …“σ …ͺσ …Ÿσ …¦σ „Όσ „’σ „‘σ … σ …’σ …žσ …σ …₯σ …’σ …‡σ …œσ …₯σ …‘σ …‡σ „Ίσ … σ …”σ „Έσ „½σ …₯σ …‰σ „’σ „Άσ …ͺσ …‘σ „³σ „©σ „³σ …‘σ …ˆσ …‚σ …šσ …’σ „’σ …œσ …₯σ …‰σ …ˆσ …†σ …šσ …“σ „’σ „Άσ „ σ …‰σ …ˆσ …ƒσ „²σ …Ÿσ …σ „Άσ … σ …ƒσ „±σ „²σ …σ „²σ …†σ „΄σ …§σ …ƒσ ……σ „Άσ „·σ …‰σ …ˆσ „³σ „΄σ … σ „·σ „Άσ …˜σ „΅σ „·σ „Άσ …ͺσ …•σ „΅σ „±σ „₯σ „Ώσ …„σ …†σ …œσ „Ύσ „·σ …†σ …œσ …‰σ …„σ …”σ …™σ „½σ …ͺσ „½σ „₯σ „½σ …ͺσ …‰σ …¨σ …‰σ „’σ …‰σ …¨σ „Ώσ …„σ …‰σ …¨σ …Šσ „΄σ „Ήσ …¨σ „Ύσ …ͺσ …“σ „€σ „Ύσ „΄σ ……σ „€σ „Ύσ …šσ …›σ …§σ …Šσ …„σ „Ίσ …œσ …Šσ …„σ „Άσ …σ „½σ „΄σ „±σ „₯󠄿󠄴󠅉󠅧󠄿󠅄󠅓󠅩󠅉󠅄󠅔󠅝󠄽󠄴󠅁σ „₯σ „Ύσ „·σ …σ …¨σ „Ώσ „΄σ …œσ …šσ „Ύσ „΄σ „²σ …˜σ …‰σ …‡σ „Ύσ …‰σ „Ήσ …σ „Ίσ „’σ „₯σ …‘σ „Όσ …—σ …‰σ …σ …£σ „’σ „·σ „²σ …›σ …•σ „±σ „£σ …’σ …›σ … σ …§σ „Ύσ „Άσ …‘σ „§σ „‘σ „£σ …‚σ „σ „·σ …„σ „΅σ „¦σ …‚σ …σ …£σ „’σ …‡σ „Όσ …§σ „§σ …”σ „Ίσ …žσ …‡σ „Άσ …›σ …Ÿσ „’σ „Άσ …œσ …‡σ „³σ „±σ … σ „½σ …‰σ …™σ … σ …’σ …’σ …σ „Έσ …©σ „©σ „²σ …’σ „¨σ …¨σ …†σ …‚σ „Ύσ …‰σ …‰σ …œσ …§σ …šσ …Ÿσ „Έσ „©σ „Ήσ …šσ „Ίσ …›σ „±σ …—σ …—σ …£σ …žσ …¦σ …€σ „‘σ „³σ …€σ …©σ …“σ …σ „Άσ …ͺσ …‡σ „³σ „²σ …˜σ „¨σ „Όσ …£σ … σ …σ …Ÿσ …©σ …’σ …Ÿσ „§σ …σ …˜σ …•σ …™σ …„σ …‡σ „£σ …©σ „¦σ …€σ „Ώσ …ˆσ …£σ „Όσ …šσ …©σ …ˆσ …Ÿσ „σ …•σ „’σ …Šσ „΄σ „½σ …—σ „±σ …©σ …Ÿσ …‡σ …ƒσ „€σ „·σ „Άσ …©σ …‡σ „³σ „²σ …σ „Ίσ „Ώσ „±σ …•σ …‚σ …”σ …‘σ „ σ „»σ „¨σ „’σ …’σ „Ίσ „σ „¦σ „»σ „ σ ……σ …˜σ …©σ …†σ „»σ …₯σ „‘σ „Άσ …žσ …‰σ …¦σ …₯σ …„σ …˜σ …₯σ …“σ …†σ …žσ …”σ „’σ „±σ …£σ …„σ …‡σ …‘σ …‚σ …˜σ …‰σ …σ …‚σ …˜σ …“σ „£σ …˜σ „±σ …Šσ „΄σ „²σ …›σ „Ώσ …‡σ …Šσ …œσ „Ύσ „’σ …†σ …σ …‰σ …σ „Ίσ …σ „Ύσ …ͺσ …˜σ …šσ „½σ …ͺσ …“σ „‘σ …Šσ …„σ „½σ „₯σ „½σ „’σ „Άσ …›σ …Šσ „·σ …Šσ …σ „Ύσ …‡σ …‚σ …›σ „½σ …‡σ „Ίσ …›σ „Ύσ …ͺσ ……σ …ͺσ „Ύσ …šσ …‚σ …›σ „½σ „΄σ ……σ …¨σ „½σ „΄σ „΅σ …§σ …‰σ …ͺσ „Ήσ „€σ „Ύσ …‡σ ……σ „€σ „Ύσ …ͺσ „Ύσ …˜σ „Ώσ …„σ „Ύσ …σ „Ύσ …ͺσ „΅σ „€σ „½σ …„σ …—σ „’σ …Šσ …σ „Άσ …šσ …‡σ „³σ „΅σ „³σ …‘σ …€σ „₯σ „²σ „σ „Ύσ …€σ „ σ …‘σ „·σ „σ „»σ …’σ „£σ „΅σ …—σ …‚σ …σ …£σ …ƒσ „Ώσ …σ „»σ „Ήσ …Ÿσ …†σ „²σ „΄σ „Όσ …σ „ σ …šσ „§σ „Ίσ …σ „©σ … σ …’σ …–σ …˜σ … σ „±σ …˜σ …˜σ …Šσ „»σ „Ύσ …˜σ …Šσ …†σ …—σ …—σ „£σ …€σ …”σ …σ …‘σ …€σ …–σ „σ „σ …‡σ …‡σ „Έσ „½σ …σ „₯σ …‘σ …‡σ „Όσ …’σ …•σ „Άσ …–σ „€σ …“σ „½σ „±σ „Άσ …“σ …œσ „¨σ …€σ …›σ …’σ „²σ „σ „Ύσ …€σ … σ …Ÿσ …šσ „¦σ …ƒσ …¨σ …˜σ …“σ „‘σ …—σ …—σ …£σ „Ίσ …£σ „§σ …˜σ „·σ „»σ „»σ …šσ „Άσ …‡σ …‘σ …“σ …‡σ „§σ …€σ …†σ ……σ „σ …™σ „Ίσ …©σ „Ώσ „Ώσ …’σ …œσ …†σ …€σ …–σ …‘σ …Šσ …₯σ …¦σ „»σ …”σ …§σ …‘σ „Ώσ …‘σ …—σ „Έσ „₯σ „₯σ …˜σ …“σ …œσ …—σ …—σ …ˆσ „€σ …•σ „Ύσ „¨σ …Ÿσ …§σ „¨σ „Ήσ …σ „’σ „³σ „Ήσ …σ „₯σ „’σ …©σ ……σ …—σ …©σ „³σ …™σ …¦σ …œσ …›σ …€σ „₯σ „»σ „€σ …žσ …¨σ …šσ …©σ …¦σ „Ύσ „·σ …£σ …˜σ „³σ ……σ …—σ ……σ „·σ …›σ …‰σ …‡σ „΅σ „²σ …‰σ …ˆσ „Ύσ „€σ …σ „΄σ …‰σ …©σ „½σ …„σ …“σ …§σ „Ύσ „·σ …‰σ „ σ …‰σ …‡σ ……σ …ͺσ „Ύσ …σ …†σ …œσ „Ύσ …„σ „±σ „₯σ „Ύσ „’σ „΅σ „€σ …Šσ …šσ …œσ …›σ …‰σ …ͺσ …†σ …˜σ „Ύσ …„σ …›σ „₯σ „Ύσ …ͺσ ……σ …©σ „½σ …šσ „΅σ „£σ „Ύσ …ͺσ …σ „£σ …Šσ „·σ „Ήσ „ σ …Šσ …„σ „΅σ …ͺσ …Šσ …‡σ ……σ …©σ …‰σ …„σ „²σ …™σ …Šσ „΄σ …‚σ …œσ „Ύσ …„σ …“σ „’σ „Ύσ „·σ ……σ „€σ „½σ „΄σ …—σ „₯σ …‰σ …ͺσ „²σ …˜σ …‰σ „‘σ …—σ …˜σ „±σ …σ …’σ …„σ „Ίσ …žσ „§σ …¨σ …“σ „¨σ „Άσ …‰σ „Έσ „Ύσ …šσ …₯σ „΄σ …”σ …₯σ …’σ „Ήσ ……σ …‘σ „’σ … σ …€σ …Šσ …ͺσ „»σ „΅σ „³σ …₯σ „ σ „£σ …‡σ …—σ …ˆσ „Ίσ …£σ „‘σ „₯σ …§σ …•σ …—σ …‰σ …‡σ …ƒσ …šσ …‰σ …‡σ …†σ …‰σ „Ήσ „½σ …–σ „³σ …ƒσ „£σ „Όσ „Ύσ „΅σ …₯σ … σ „©σ …”σ „Ίσ „Όσ …Šσ „£σ …€σ …’σ …£σ „»σ „€σ …–σ …€σ …₯σ „€σ …‚σ …‰σ …‚σ „Όσ …€σ „±σ …’σ …‚σ …€σ …’σ „©σ „Έσ „Όσ …σ …—σ …”σ …σ …™σ …‰σ …ˆσ „Ύσ …‰σ „Ήσ „΅σ …€σ …›σ „±σ …€σ …˜σ ……σ …Ÿσ …€σ „Όσ …Šσ …‚σ „ σ …œσ „Ώσ „Όσ …©σ …ͺσ „»σ „±σ …’σ …›σ …£σ …ƒσ …„σ …’σ „Άσ „΅σ „Έσ „΄σ …’σ …₯σ …Šσ „€σ …“σ „‘σ „³σ …‡σ …ƒσ …–σ …‘σ „³σ …‘σ …‰σ …ˆσ „Ίσ …‰σ „Ήσ „Ύσ „Έσ …•σ …©σ …žσ „½σ „³σ „§σ …¦σ …„σ „·σ „±σ „΅σ …—σ „¨σ …‘σ …£σ „½σ „Ώσ …•σ …“σ …–σ „΄σ …‘σ …‚σ „½σ …•σ …‘σ …‘σ … σ …œσ „’σ …‡σ „Άσ …–σ …€σ …’σ „Ήσ „¦σ „²σ „Όσ …‰σ „Ή !!!

Yes, cashu mints want a Schnorr signature on a structured string… signers create signatures on a event, changing the structure that gets signed.

Understandable. There is a standalone opensource version you can download, inspect and run from your computer.

https://github.com/robwoodgate/cashu-redeem

It's a bit bleeding edge... and you need to use your nsec to decode them as Nostr doesn't specify signers can create schnorr signatures outside of events.

Paste into Nostrly Cashu Redeem (either online or the standalone version) to check you copied emoji out ok - sometimes Primal can break them at the see more... so generally best to copy the entire note.

If the token reads ok, you can enter your nsec and a lightning address to redeem it to.

Cashu.me wallet will shortly allow redemption straight to Cashu wallet.

You have to login to 0x using your nsec.