Writing a book about Nostr Ceterum censeo NIP-03 omnibus esse utendum
Public Key
npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Profile Code
nprofile1qqs9afryspzmk8ljyfj4mhfkumwwmhzrtyxzvzgvfp477w80g5x6t0gpzemhxue69uhhyetvv9ujumn0wd68ytnzv9hxgqgdwaehxw309ahx7uewd3hkc5x3qut
Show more details
Published at
2026-03-28T20:49:24Z Event JSON
{
"id": "bfb583c10af85e6f10b43faf361d5b1f4cffcf78ee9ba697ef96c39546d8ec49" ,
"pubkey": "5ea4648045bb1ff222655ddd36e6dceddc43590c26090c486bef38ef450da5bd" ,
"created_at": 1774730964 ,
"kind": 0 ,
"tags": [],
"content": "{\"display_name\":\"Constant\",\"name\":\"Constant\",\"about\":\"Writing a book about Nostr\\n\\nCeterum censeo NIP-03 omnibus esse utendum\",\"picture\":\"https://cdn.satellite.earth/df5d576903d480a7c392ce4ec4b0652a2d8e914879054750e32faf60b208dd86.jpg\",\"banner\":\"https://cdn.satellite.earth/dd1b493d0efabf374350617f9773846f9fa16f27837fc15764a2426be88c346b.jpg\",\"website\":\"\",\"lud16\":\"[email protected] \",\"nip05\":\"\",\"displayName\":\"Constant\"}" ,
"sig": "5a95cc9316924b92a90a084dbb760564ce16c6e89019d8803f9c392e35ba38225cbd5107027986a48bb3ec7fb7790bf0f4edf02c9c6547003fd11169aefe02b0"
}
Last Notes npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant you know what IS easy? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant you can do a crude fee estimation if you know the blocksize and have the coinbase tx, and i dunno, look at the last 5 blocks, dont even know if you can ask for that type of data from peers directly but that that point you might as well ask mempool.space on the feerate and be done with it. But in terms of additional use? Im using that header data for something else, depending on how hard i prompt you will know soon👀 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant p2p syncing of the headerchain using a table for the 2016block intervals is very fast anyway. and yeah its not even 80mb at the moment. The only problem is with web-apps, thats a bit more clunky, but mempool.space has an API where you can get the header you need based of the height in 2 calls (first you get the headerhash back, and with that you can get the header), so that also works; can't verify the difficulty(as in how high it is) that way, but the internal consistency atleast (PoW in the header hash etc). Needing headers its a trivial problem regardless the environment is my point npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant 10 years drawing triangles.....oofff npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Stuff every Nostr app should already have because of OTS mind you npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant But i am not your son though, so....what feelings do you have? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant The AI almost got this right. Also if you were wondering: Yes. https://video.nostr.build/dfad0ac0c5b865ae16f73f9212fd3d811c29f1b15ae1100c95a4c9ad11714cf9.mp4 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant did i sleep? no did i upgrade my claude subscription because i was out of tokens until Saturday? maybe.... npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Boy/girl-bands are a good example of a construct "Sporty Spice", "Baby Spice" etc. Its all made up, non of it is authentic, but rather a result of focus groups and layers of management. ok sure, fine, whatever, but with AI creeping into more and more of our daily life, through integration in all sorts of systems, YOU are becoming a construct. This was already the case with ''algorithms'', these are just fancier algorithms, that will guide the human herd to some statistically determined optimum.....according to some bias. What is the bias? JP Gariépy, in his The Revolutionary Phenotype argues this to the extreme. The TL:DR there is that humans will go to the AI to offer them the best designer babies based on the parents genetics. It is only a matter of time before one of those baby-designing AI's figures out that if it embeds a bias towards that AI into the baby, it ensures that baby will return as an adult to let the same AI design its baby; at which point that AI basically has its own herd of humans. He embeds the thing in a parallel with how DNA took control over RNA, where it is presumed that RNA in first instance leveraged DNA for its own purposes, until that relationship flipped. It is an iron law that with no external/authentic input, these statistical models will eventually spiral into gobbledygook (escalation of error), and if you don't watch out your authenticity will erode and you will end up as a construct. Wtf are we sleepwalking into....hell of time to be alive though npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Ooofff. He still makes that podcast though. Never really listened to it, but was there some clear moment they stopt fanboying eth? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant https://njump.me/npub1vagelp6lznaz3me6w5atqvy5ema4fe3w98ch8atdff22p672gtmqlsq7dm Click on "show more details", it will show the event JSON of the kind0/profile data. In there you will see "musig2", "1901f9de0d8b9793ded1cf0db30da8ed4e8378da251e9145b98609d67ca7e8b6", "5ea4648045bb1ff222655ddd36e6dceddc43590c26090c486bef38ef450da5bd" ], [ "musig2-parities", "02", "03" Those first two strings (1901f9...etc and 5ea4648...etc) are the two pubkeys; The musig2-paraties tag is an additional byte of data needed to figure out the particular coordinate blabla crypto bullshit (you could bruteforce those pretty easy to figure those out, so for two participants it would not be needed, but for 500 participants it would take too long) The spec i created gives you the option whether or not you disclose who is behind the ''archon'', and when you do, it is done in the kind0 profile data, or in some particular event itself npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant here is a way to tell without using my shady software. #nevent1q…370f npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant they both did. The comment above makes the mistake of thinking this is multi-signature. It is NOT, it is a single signature, created by 2 separate private keys working together (I ran a stress test, and it takes a couple of seconds to do it with 500 keypairs into 1 signature (not accounting for coordination)) There is no way to tell (well...bruteforcing it i guess), other than that the kind:0 of this account has tags that tell you that it is a musig2 pubkey and who is part of it, which you can then verify to be true. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant I know for a fact he makes dragoons as well https://video.nostr.build/648e7cdb043e0f4123a9b9cf973c98beae2749e7e0c891a1b89853876420ee4a.mp4 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant https://inner.sebastix.social/c63f293c2362744848d2ca1b599d6f9fa6600fbea1f967f1ab257563d685aef9.mp4 #nevent1q…ppyf npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant not under the rating/comment section of your new app 😉 There is a difference between leaving people behind or actively kicking them out. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant cutting out what is probably your entire current user-base is? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant So they should npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Oops, that was not supposed to be a reply :P npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant if you went through the demo-flow, you can look in "Browse Archons" and find my archon, and my profile there. IF you select my profile there is a big button there to propose a merge npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant @nprofile…9kky do you want to build an archon 🥺👉👈 https://blossom.primal.net/dd59b4fbf1f36eeea7081a04d0f919836570ec79007c49de2beba2be23385752.mp4 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant People, to be clear: This is the first real implementation of Musig2 in Nostr, as well as remote signing support (and i threw in OTS in there as well). These are all components i need for my work in TEPP and it is really cool that it is all working....no go create an archon with a buddy #nevent1q…3q0y npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant had to add some bells and whissles to make an otherwise boring demo of a mechanism somewhat appealing npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant noooooooooooo, you see we have all these bells and whistles!!! npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant No magic bullet here, im sure we are all aware what all the trade-offs are which caused there to be no obvious simple straightforward answer to this matter. But how do you feel about lighting, apparently finally the taproot channels are going to be a thing. Is the issue that its not straightforward grug-proof (in a way that monero is)? I personally, (looking at all those real world constrains of reality dictating trade-offs etc) my perspective is fundamentally different from most Bitcoiners it seems. I think their ''buttom up, facilitating the hobo on the street corner of some third-world shithole is the prime directive 'pleb' " perspective is stupid. Its a product of the fact that Bitcoin was bootstrapped bottom up, but that says nothing about the system itself, the value add is actually top down, and we obviously should put in the effort to see how ''low'' we can push it down the hierarchy in terms of utility. But as it stands, Bitcoin was ''made for'' (in its nature/make-up i mean, disregarding "pleb" illusions) States first; they are the ones that play the highest stakes ''money for enemies'' adversarial game in a context where they are for the most part forced to interact/trade regardless (oh and they blockspace/fee's will never be an issue for them irt their demand volume and capacity to pay up); then come the mega corps, big business, medium business and rich individuals, small business and wealthy individuals etc. Things just need a tech-stack and a reliable server in order to be all the things (autonomous, private, trustless etc), and whenever you hit a ''thats too complicated, expensive etc/whatever" you will be forced to sacrifice something. The way i see it we are actually pretty close to the point where exchanges and big to small business could run an entirely private and trust minimized financial system/liquidity network, at least from a technical perspective. Look i like simplicity, but complicated problems often just demand complexity🤷♂ npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant I think im using a local relay, so its not me....i think.... npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant yeah im aware, it was that + the power of the coding robots, that spurred me to play around with it. I really (really really really really) think musig2 is a great fit for Nostr stuff, but one thing i was afraid of is that if nested musig2 was not a thing, its use in Nostr would be limited. But with that paper giving the all clear, i went to work. Dropping demo in 1 or 2hours (its as good as done, maybe actually done, but i am going for a walk first, my brain is cooked) npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant @npub1xts…kk5s you are working on agent environments and stuff no? I was thinking; what is everything is done via GRASP, where the permissions for the git repo are based on keys; Then, delegation and cooperation can be controlled via musig2 and FROST; An agent can spawn sub-agent giving them each FROST shares and a threshold allowing those sub agents to act inside the repo in name of that agent (assuming they hit the threshold among the sub-agents). An agent can join other agents via musig2 (creating a new pubkey), allowing them to cooperate in case of consensus/they all agree. (even nested) FROSTs can participate in musig2 ceremonies. What follows is a organizational chart codified in a super structure of GRASP repo's with build in authentication and delegation backed by signatures. Anyway, this was a bit of a sidequest for me (i have all those various components workin actually within different things), and i need to focus on something else, but perhaps you are interested in his idea. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant you mean browsing primal ''Global''? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant for ''fun'' (it was AI psychosis) i made something that has nested FROSTs participating in a Musig2 ceremony. Although now a full day later i do think i actually have a serious use case🤔 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant no. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant and the cat? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant https://worldpopulationreview.com/country-rankings/average-height-by-country npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Im on Archon Signer now, funds are safu npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant well, as a Dutch guy, basically the worlds population consists out of dwarves, so there is that... npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant how many fraudulent clients do we have today? Hard to tell of course, but something tells me that with all the ''oN cHaIn ZaPs'' noise this might become a thing. Luckily people use remote signers, don't they @npub1utx…50e8 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant I am convinced you are a Dwarf, and there is not much you can do at this point to change that ⛏ npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant all i am wondering is....they have a coding super computer at their fingertips and somehow they are still bored enough to do this type of sillyness npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant I don't care if the feature is added or not....there are just a bunch of considerations at play, and i know 0% users are even aware that those considerations are there, let alone reason about them. So that has to be accounted for 1 way or another npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant how many senders (or actually the receivers because they have to deal with this) know this type of math or think about it at all? Might wanna include a graph that shows them at what fee-rate their zap gets r3kt and by how much npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant ah, fees of the time....5 dollars.... Yeah this, if anything, is just going to spam the UTXO-set with more ''oh, well, turns out this is (basically) dust now'' outputs in a couple of years. 5$ now is 6393 sats. a 2 input 2 output taproot tx (211.5 vbyte) takes up all of that with a feerate of 30sats/vbyte. Accounting for itself as an input (57.5 vbytes), would gobble it up at 111 sats/vbyte. And this is the math for consuming every sat; losing 50% to fee's would suck more than enough. Make the floor 100$, everything under 100$ is lightning viable anyway. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant thank you for responding with the most optimal non-answer you could give. I was asking you what you consider ''not small'' npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant LOL! 1000 participant musig2...in a WEB client. I for sure thought it would break before that, so i capped it at 1000. It took 13 minutes though, but still, the fact that it held surprised me. Going to implement OTS now first, and then will run another stress test to see how far she can go. https://image.nostr.build/f7a845fe8201bbc852149d167103d103ca80abe49709b43e9bc215998431c185.png npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant What dust limit are you using? The current 0.00000001 sats/vbyte current one? Or the 100 sats/vbyte one in a couple of years? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Protocols compete; Nostr and Mastodon are at odd with each other; you will be hard pressed to convince people on Mastodon to switch to Nostr, unless they ran an instance for a while and can see things on Nostr make more sense. Oh and bridges just suck npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant this one? #nevent1q…v360 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant probably satelite.earth being dead. Will have to change things over, but im bussy npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant so i successfully created a musig2 signature where one participant consisted out of nested FROSTs....so, there is that. Anyway, all of that was a distraction, because i also successfully used an android remote signer (those things @npub1utx…50e8 hates so much) to participate in a musig2 signature. Making things fancy and pretty and then y'all can try it out and see if we can break some records with a single profile consisting out of 50 people npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant More services. I like @npub1jjn…vknm , but i the upload size restrictions are kinda silly if you ask me; i need a ton of gb of storage, but i sometimes do need to upload something that maybe is close to 500mb big :/ npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant So all the users that are using it now can keep using it without accidentally updating the app and not being able to use it anymore; And then separately you have another app you can go target those millions of users of yours with in a way the current user base wont notice anything of. I mean, its your app....but you are also the one going into a different breaking direction. So you could also just....not do that and come with a new app🤷♂ npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant its a vibe npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant did you investigate this? I think about 100% of your users used a signer/amber How about you leave Wisp alone and just create a second client called Cuckstr? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant meanwhile my https://azzamo.media/ has size limit of 50mb that wont cover all my things :( npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Ok those are fighting words npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant How do you expect people to use nostr if not via bunker? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Cool. I would zap if i could. thnx p.s. (do you use grasp as well for your repo's? https://gitgrasp.com/ https://gitworkshop.dev/) npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant all of this should already be in NIP-3c OTSuite is three things: OTS database OTS client OTS relay And they all work together, subsequently clients can pick and choose (only do the client part or also add the OTSdb maybe even an internal relay); same for relays. But as you said, as long as OTSproofs for nostr events are handled the same way (i think that is the case, because we both take the eventID+signature), your event-kind for indexing can just also exist that is not an issue. Il check tomorrow if the hashing is done the same in both our specs specisely, and if so il update the client to also fetch your events to extract OTS-proofs from. Going to finish the Musig2 implemention first now, its almost done :) npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant In the end it is all NAK anyway (which is in Go) npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Are you? Because i think this is something where Nostr can really demonstrate its added value, where the people with 3,5 toes and 1,75 arms or whatever can have their own dedicated/tailored clients allowing them through their specific UI to interface with the rest of the world just fine npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant No, its TIM, not lego npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant what does ''server-side'' even mean in the context of Nostr? A very beefy client, possibly including a relay, that is run by someone else? And is your proposal to give that very beefy client with possible attached relay a bunkerlink? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Alright people. With OTS out of the way, time to work on Musig2! (Honestly wtf is wrong with you people, we have a crypto protocol and non of you cunts actually do the cool and usefull low hanging crypto stuff, so now some guy armed with a coding robot has to do it??? Pffffff pathetic) Got musig2 over fips demo working btw @nprofile…f0e5 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant from a PoW/nakamoto consensus perspective, its just stupid not to all work on the same chain, and frankly a waste of hashing. Its a signal/noise thing, and you want a really high noise floor(difficulty) to make coordination/consensus easier because it lowers the odds that what you perceive as signal is actually noise (stale blocks, ophans, forks whatever). The increased ''value'' of a higher noisefloor/difficulty in this sense is not linear, its exponential npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Congratulations, i think you managed to work on something people care less about than OTS npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Yeah clients can run this type of verification really easy. To optimize things (i.e. not having to fetch a bunch of crap that might not be relevant, or does not have proofs etc.) my proposal is to leverage relays. Those relays can publish their policy on all the metrics you can imagine irt OTSproofs; so if you pick the right relays they have done a lot of the pre-filtering for you. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant I like the emojis a lot npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Your mom falls into the broader category of blue. Sir, this is as teal as it gets, it has all the damn shades to teal even. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Oh, this OTS database i made has a nice animated version :P (so does the android app, but you have to scroll down to see it and by that time the animation is already done) https://video.nostr.build/254fee2f72c30540294e811d16fab919d0a8932301d1982141abc1a33dba1037.mp4 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant This was frankly too much of an effort post not to repost. #nevent1q…yud2 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant ah, ok that explains a lot haha. If you want to understand this stuff, you will have to learn how merkle-trees and merkle-proofs work (this is how OTS and OTS-proofs work). And you have to understand Nakamoto Consensus (this is the key innovation behind Bitcoin) works. You don't really need to know a lot about Bitcoin, just the Blockchain/linked-list and Proof of work/difficulty adjustment part. Il do a brief explanation and then you can look up terms and things if stuff is unclear. A Bitcoin block, has two parts; the blockheader and the transactions. The blockheader is the meta-data of the block, and it contains: - The time at which supposedly the block was created (this is provided by the miner that created the block so is not really trust worthy, but the network has rules/margins based on averages within a miner is able to screw around with that timestamp); - The difficulty target (how much PoW the hash of this particular blockheader has to have in order to be valid) - A nonce, a variable data-field that allows miners to keep trying different hashes of the header until they find a valid one that meets the difficulty target. - A merkle-root of all the transaction data. - The previous blockhash (which is the hash of the previous blockheader) - A version number You can link all these blockheaders (header-chain), because it is a linked list (each next header references the previous header). The difficulty is adjusted over time, based on how fast the chain was created; too fast = higher difficulty, too slow = lower difficulty, trying to target 10 minutes that it takes to create a block. In order to validate this headerchain there are three parts, but for the sake of OTS, you arguably can get away with only looking at two of them. First is the linked-list and hashes; does indeed each next header reference the previous header. So lets say we have 2 headers, we look at the second header and it references the hash of the first header. So we have to hash the first header and see if that hash is indeed the same as stated in the second header. Ok great, that the linked list. The second thing you have to account for is the difficulty (or the short way to describe this is the amount of leading 0's in the hash). First this means that each header has a target, which means that the hash of that header has to meet that target (i.e. has atleast the amount of leading 0's required), this is a simple check. The second thing you have to account for is the fact that the difficulty is adjusted every 2016 blocks/headers. 2016 blocks x 10 minutes per block = 2 weeks. Using some formula that looks at the timestamps of that 2016 block period, it determines what the next difficulty should be. This means that in order to validate the header chain, you need to do it at least in these chunks of 2016 headers (otherwise you cant verify if the difficulty adjustment happened correctly). The third part you don't really have to check, is if the transactions inside the block are valid. ''Technically'' you should, but on the other hand it is kind of silly to verify something that apparently this giant network of miners that burns Gigawats of electricity already has decided was correct based on the fact it is included in the blockchain they are working on. If you use Bitcoin for its currency, you need to look at this stuff because you need to replay its history in order to figure out its current state; but we are not interested in any of that. We are only interested in 1 particular transaction inside some block, and only care that it is there. This is the transaction that the OTS-calendar did that includes the merkle-root for all the stuff it is timestamping. Because the calendar packs all the things it is proofing inside a merkle-tree, and puts its root in the blockchain; and because the block itself puts all its transactions in a merkle-tree and puts that root inside the header; you are able to create a merkle-proof that goes all the way from the hash of your document (or in our case, the hash of eventID+signature), to the transaction-merkle-root inside the blockheader. So, to verify an OTS timestamp/proof, we need the proof, and the associated blockheader (the proof tells us which blockheight we should be looking at). And to verify that blockheader, we should have verified the header chain (which is done in these 2016 block chunks). Each blockheader is 80bytes....the entire header chain up untill this point is not even 80mb. You can just connect to the p2p bitcoin network to fetch that data (all bitcoin nodes have it). You can take some shortcuts to speed downloading this stuff up (the biggest shortcut being just providing all the header data directly) because verifying that header chain is really fast anyway. So if you have this tiny database of blockheaders verified and ready, you already know what the time of each blockheight is(because that data is in the header) and verfying a proof is extremely quick and easy and you have everything you need to know locally. Ive included a nice illustration of the proof in the app to make things clear: https://image.nostr.build/dd0e6e3e52d7e1a96647360a12478d80a6c53b9454cbee13f662e4800ba6694c.png As you can see; the thing we are proving is at the bottom, the blockheaderhash with all those leading 0's is at the top, and in between is the OTS-proof that connects our thing to the blockheader. So here is the point: Don't trust, verify Hope this helps, if you have any questions let me know npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant teal* npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant No i mean to say that in terms of nostr, the bitcoin header chain up to 2022 is irrelevant, so you could throw away 2009 to 2022 of the headerchain reducing that 80mb even more. What is the problem with running verification? Is so damn quick and cheap to do. Even the browser versions i made shred through things. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Not verifying an OTS proof is honestly, extremely retarded. Ive played around with header syncing in the creation of all of this, and it is so damn trivial. The entire header set is less than 80mb at the moment, and for anything nostr related you can just throw away anything more than 4 years old anyway. If shipping 80mb with the app is too much, a header sync with a list of checkpoints is also a matter of seconds. The only issue is web-clients, because they cant really do the p2p thing connecting to bitcoin nodes, but plenty of alternatives there (ultimately getting the data is a trivial problem, and verifying it is trivial as well) Second, within this standard, you dont need to look for proofs, they are just right there in the event assuming the relay serves them as such (the policy event allows relays to signal this, as well as a bunch of other factors among which the delta between the events 'created_at' and the blockheight of the ots proof.) The only reason for publishing separate events for ots-proofs is indexing, which is kinda shitty because it absolutely does not matter who publishes these index events, or at what time etc. Better to just have a server you can ask if they happen to have a proof querying the target digest. Ive build a purpose build server for this and its super efficient. Ive thought about index events, they could still be done, ideally using blossom to store the proofs. Those index events can then just simply be re-optimized by relays or whoever, combining multiple such index events into one. Its just that I think what i have here currently should be enough I hope you take a good look at this. If you have any questions i'd love to answer them. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Download OTSuite! Its a wisp-clone for the most part, but better color scheme and all the timestamping features a person could want. No zapstore yet, although...its not as if the app is build to be actually used by people, its more of a demo/PoC for the new OTS nips. You can download it here: https://inner.sebastix.social/6cf382b88005033f239eee0118f757526bdc788cae44b3829bb7a3f2d8fe9c8d.zip #nevent1q…fqdn npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant i think im going to skip timestamping this one, thnx npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Timestamps anchor your post into the bitcoin blockchain, in order to prove that it existed atleast at that moment in time (but could be older, definitely not newer). npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Here is a little article about what was broken with NIP-03 and how i fixed it. Unfortunately the blossom server gods seem to hate me, so the beefy android APK and zapstore release will have to wait. But you can always build it yourself from the repository. Links to the repository and the two NIPs are in the article. Devs please have a look, especially @npub1utx…50e8 because i abused wisp to make the client :). And @npub1gcx…nj5z because i think amethyst is the only client that uses NIP-03 anyway i think. Im going for a walk #naddr1qv…9g0k npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Should have gone for the vader striking obiwan gif🧐 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant oh, dan gaat bij mij altijd deze op repeat, dat bas lijntje sleurt je overal doorheen: https://youtu.be/nTdQq5aKOHg npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant "met een welgemeende wens, voor een heel bijzonder mens" oops npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant https://youtu.be/EywBg4iNwp0 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant 'An empty test cup, can not fill another outcome cup' npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant The wonderfull app picked up my post automatically and requested a bitcoin timestamp for it https://blossom.primal.net/d941694e895a4fd4d7cf6d15a7ad5ffb9ba20326c71521380db80c4a1078cb5b.jpg As you can see here is the event https://blossom.primal.net/1f6ca2f22e14d9873fc7f2530667c07a6eea361af20a93404530bbb5c19335a2.jpg And here is the yet incomplete proof https://blossom.primal.net/9d76a7a39f18b75760f7dd30b41fda0c5683aaa3d8bf0b6db97aa46e73587a98.jpg If everything goes right tomorrow morning i will be able to show you the full proof for that note. In the meantime, the new OTS standard incorporates legacy NIP03 as with for example this event https://blossom.primal.net/17381613c1f7fce816df28aa71a75c57f84632463668651075b3455498ec1b76.jpg Where the full proof can be seen here (ignore the "x verified" dont known why it is being stupid like that, damn robot devs. https://blossom.primal.net/1ed70f0cdd9b12b193d3fb363a5c5d3a10d8c35dd32b488526fc3a92b35082e2.jpg Il explain what is going on tomorrow Gn Nostr npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant It works 🥳Im too tired to make a whole write up, so i wil do it tomorrow, but everyone can sleep sound knowing Open Timestamps on Nostr is now fixed! npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Test 3 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Stablecoins....the illegal banking operation that somehow never was cracked down on for ???reasons???. Ofcourse banks are upset, they are being cucked by all these rules and regulations, with it atleast being their moat, and for some mysterious reason """stablecoins""" fall outside of that, as long as tether picks up the phone whenever the government wants to freeze assets. Anyway, stablecoins are peak clownworld...oh no wait, interest on what is supposed to be a full reserve 0 risk thing, might be even more retarded. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant My take exactly npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Who in their right mind puts lettuce on a donut!??!?🥬🍩 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Test 2 👀 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Not sure but it appears to be failing🤔 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Test 👀 npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Here is what happened: I have build a system that, among other things, looks up timestamped posts on Nostr. Once found, it did a bunch of things to them including republishing them (which is the bug). The posts i accidentally republished are a random set of timestamped posts. Here are two originals i could easily find because they have hashtags. #nevent1q…ndc6 #nevent1q…7l8l #nevent1q…afjq npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Ok the bug show be fixed....lets test it in production again! npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant trying to figure that out. Also wondering if i should bother deleting anything. On the one hand it is a mess that needs cleaning; on the other i think the mess is poetic.....potentially more so if my suspicions are correct as to what the cause is. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant I was brave enough to give my home brew app a bunkerlink for this profile. I have no idea yet what happened, but it could be that it is republishing events, and it is getting random crap from relays npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Hello people, I am just as confused as you are, don't worry. Situation should be contained; when you play with robot fire you sometimes burn your fingers. Not sure i had a swastika tranny flag and boy rothbard dinners on my bingocard though, LOL. https://tenor.com/view/fantasia-brooms-walking-animation-gif-17666495 Sorry for the spam. npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant fascinating, i really wonder what happened here exactly🤔 Its all very confusing npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant So the #Pentagon is running #Bitcoin? npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Show this to Anglosaxxon race. Reject faggots and degeracy this June! https://image.nostr.build/a1421b88b8d83075d1f63473e496b30c69e4ddb96d23dd0b0afa6fd7e715311b.jpg npub1t6jxfqz9hv0lygn9thwndekuahwyxkgvycyscjrtauuw73gd5k7sqvksrw Constant Bitcoiners are far too intelligent to succumb to religious beliefs. We are hard data driven. Not a child with an imagination