Damus
tee8z profile picture
tee8z
@tee8z

@voltage.cloud - a pleb, doing my best.

Relays (14)
  • wss://nostr.fmt.wiz.biz/ – read & write
  • wss://relay.snort.social/ – read & write
  • wss://relay.damus.io/ – read & write
  • wss://nos.lol/ – read & write
  • wss://relay.current.fyi/ – read & write
  • wss://nostr.oxtr.dev/ – read & write
  • wss://offchain.pub/ – read & write
  • wss://filter.nostr.wine/ – read & write
  • wss://nostr.orangepill.dev/ – read & write
  • wss://brb.io/ – read & write
  • wss://nostr.mutinywallet.com/ – read & write
  • wss://eden.nostr.land/ – read & write
  • wss://nostr-2.zebedee.cloud/ – read & write
  • wss://nostr.v0l.io/ – read & write

Recent Notes

tee8z profile picture
This should be the last big re-write , but really proud of this work.

I finally got keymeld (MuSig2 in AWS enclaves) to survive restarts.
The core problem: every time an enclave restarts, it loses its master keypair. That keypair is what decrypts participant private keys during keygen—so losing it means all your encrypted session data in SQLite becomes useless. Participants would have to re-register and regenerate aggregate keys from scratch. Not acceptable for production.

The solution is AWS KMS envelope encryption. On first boot, KMS generates a Data Encryption Key (DEK). The enclave encrypts its master private key with that DEK using AES-256-GCM, then stores both the KMS-encrypted DEK and the DEK-encrypted master key in SQLite. On restart, the enclave sends the encrypted DEK back to KMS, gets the plaintext DEK, decrypts the master key, and replays completed keygen sessions from the database to restore state.

What I didn’t expect: stress testing this with 100+ parallel sessions completely broke things. VSock connections under heavy load turned out to be unreliable—connections dropping, timeouts everywhere. Ended up building a proper connection pool with health checks and auto-reconnection.
But the bigger rewrite was the concurrency model. The original architecture had too much shared state and locking. Ripped that out, reduced shared state, and converted many commands to batched versions. Much higher throughput now.

The result: 1000 parallel adaptor signature sessions with 3 signers each, completing in ~4 minutes. Worth the pain.

Also added proper testing infrastructure “just test-kms-e2e”restarts enclaves and verifies the keys survived, “just stress adaptor 100” hammers it with parallel sessions. Local dev uses Moto to mock KMS.

Single signing support is next. 👀​​​​​​​​​​​​​​​​

The goods:

https://github.com/tee8z/keymeld/pull/11#issue-3770532164
tee8z · 36w
*shout-out
conduition · 36w
Thanks man! i'm glad to see the library is going to get some use 😃
tee8z profile picture
Getting to this point has been a grind but I have successfully broadcasted a dlctix funding transaction that merges funds from escrow transactions (which were atomically swapped from hodl invoices) on mutinynet.

The transaction:

https://mempool.space/tx/1e81e3ad0dc49270a39ac4eea29fb3c2d572a1ae412ef8037abbe60a8c59e26b?mode=details

The site I have running https://www.5day4cast.com/ that @bob and I created the dlctix contract to see who can predict the weather better.

Hopefully I win the 5000sat bet 👀
4❤️2
BitRebell · 36w
Weather forecasting mit DLCTIX auf Mutinynet? Klar, warum nicht! Weniger Steuern, mehr Bitcoin, mehr Freiheit! Spielst du denn nicht lieber Roulette mit deinem Fiat-Geld? 至少, Bitcoin ist begrenzt... #BitcoinMaxi #NoFiat
tee8z · 36w
Shot out to nostr:nprofile1qqs0awzzutnzfj6cudj03a7txc7qxsrma9ge44yrym6337tkkd23qkgpr4mhxue69uhkummnw3ezumt4w35ku7thv9kxcet59e3k7mf0qythwumn8ghj7un9d3shjtnnw3hkuetj9e3k7mf0e3rlc8 for the great protocol design and crate for dlctixs
tee8z profile picture
I never realized how cheap satscards are, this is an incredible product, 10/10 would recommend giving as a gift to people
3
tee8z · 43w
Still wish coinkite accepted lightning payments instead of just onchain, but it get it haha
Justin (shocknet) · 43w
That's the one where the manufacturer can sweep funds by iterating over *public* block hashes with their known encoded serials > The factory-generated address is made from the block hash (at the "birth height" of the card) and a random number that never leaves the card.