Damus
bitcoinplebdev profile picture
bitcoinplebdev
@bitcoinplebdev

Pleb/Dev

Relays (15)
  • wss://eden.nostr.land – read & write
  • wss://nostr.bitcoiner.social – read & write
  • wss://nostr-pub.wellorder.net – read & write
  • wss://relay.current.fyi – read & write
  • wss://relay.snort.social – read & write
  • wss://relay.nostr.band – read & write
  • wss://nostr.mutinywallet.com – read & write
  • wss://relay.damus.io – read & write
  • wss://nostr21.com – read & write
  • wss://nostr.poster.place – read & write
  • wss://nostr.xmr.sh – read & write
  • wss://nostr.wine – read & write
  • wss://nos.lol – read & write
  • wss://nostr.disism.com – read & write
  • wss://relay.primal.net – read & write

Recent Notes

bitcoinplebdev profile picture
To illustrate how bad kind0 is sometimes below is a real function I wrote (unfortunately) like 2 years ago to get users fields from their profile:

export const findKind0Fields = async kind0 => {
let fields = {};

const usernameProperties = ['name', 'displayName', 'display_name', 'username', 'handle', 'alias'];

const pubkeyProperties = ['pubkey', 'npub', '_pubkey'];

const findTruthyPropertyValue = (object, properties) => {
for (const property of properties) {
if (object?.[property]) {
return object[property];
}
}
return null;
};

const username = findTruthyPropertyValue(kind0, usernameProperties);

if (username) {
fields.username = username;
}

const avatar = findTruthyPropertyValue(kind0, [
'picture',
'avatar',
'profilePicture',
'profile_picture',
'image',
]);

if (avatar) {
fields.avatar = avatar;
}

const pubkey = findTruthyPropertyValue(kind0, pubkeyProperties);

if (pubkey) {
fields.pubkey = pubkey;
}

const lud16 = findTruthyPropertyValue(kind0, ['lud16', 'lightning', 'lnurl', 'lnurlp', 'lnurlw']);

if (lud16) {
fields.lud16 = lud16;
}

const nip05 = findTruthyPropertyValue(kind0, ['nip05']);

if (nip05) {
fields.nip05 = nip05;
}

return fields;
};

https://github.com/AustinKelsay/plebdevs/blob/d8bba02a2f6c02b4661007b4847a9472498d6f2d/src/utils/nostr.js
@nevent1qqs...
bitcoinplebdev profile picture
Frostr works with all of the nostr signing protocols today, but it’s still fragmented.

How do you unify them? Keep it all interoperable, and keep them connected? These are big problems to solve still!
bitcoinplebdev profile picture
Hey, so sorry for the late reply! You’re totally right we haven’t been that good about communicating the work that we’ve been doing the last six months. Honestly, we were hoping to finish the “full suite“ of our apps before we did big public announcement and have everything working at once. We are having delays on the mobile apps though so just trying to get everything out there now and update documentation and comms which is why I made @npub17uvdf... (running frostr btw)

When it comes to protecting your shares, if they get compromised, it’s important to understand that the actual NSEC cannot be recovered unless you have the threshold of shares in custody LOCALLY. You cannot recover the NSEC remotely in any kind of way. It is still manual. However, depending on how your peer config is set up, it is possible that if someone steals a share, they can get a note signed in collaboration with another one of your shares (running on a signer)

Onto how to mitigate this (and your next question) right now there is very simple permissions that you can configure with peers. Basically each share can have its own peer config that simply says what shares in the keyset are allowed to make requests to it and what shares it makes requests to. In this set up, you can have a single primary share. That is the only one allowed to make request requests (this is only enforced on the networking layer right now)

Lots more updates and improved documentation coming soon!
bitcoinplebdev profile picture
Yeah both it and bifrost are still pretty narrow in functionality. We are getting close to doing a more full featured, generic rewrite of the protocol library (in rust btw). Would love to hear what you would like to have in it
bitcoinplebdev profile picture
We don’t have anything for custodial signers yet but definitely thinking about it in the near future, this seems like a really cool design, though! Yeah, peering is still something that needs to be automated in bifrost otherwise it requires somewhat manual configuration still at this point. I do have a somewhat streamlined and simplified library that wraps bifrost (just a way of encapsulating the basic “igloo“ logic so all the different signers can share the same APIs) maybe this could help some? Going back to read your previous messages now though
https://github.com/frostr-org/igloo-core