This was a long time ago so I don’t remember exactly, but it looks like 50 was just the number of precomputed transactions that was stored initially by the miner (and presumably it would run the computation again and store more transactions when it was restarted). In fact the spacechain was precomputed to last 100 years (BMM.scala
, line 11).
So I wasn’t really expecting to get to the last block of this, I was probably planning on expanding the maximum period to 1000 years in a “production” scenario, but it didn’t make sense to calculate so much given that this was just a demo.
I ran the demo miners and spacechain nodes for months and tried to get people to use it, but didn’t get much attention, maybe ~10 people played with it at the time. Then I got disillusioned and decided to shut it down, I thought about keeping a record of the blockchain data, but it was too depressing and the blockchain didn’t really have any value, it probably makes more sense to start a new spacechain now and test again if anyone is interested.
All the blockchain did was to generate NFTs (without any metadata whatsoever except for a serial number) and transferred them between bip340 pubkey accounts. It had two types of transactions, mint
and transfer
.
The mining process was interesting: to publish a transaction on the spacechain a user would contact any of the (or all) miners and send them the transaction, the miner would make a Lightning invoice and the user would pay. Miners would hold the Lightning payment in-flight while they gathered more transactions from other spacechain users and then try to use the funds they got via Lightning to pay for an onchain BMM transaction, always performing an RBF when a new user tx arrived – once they succeeded they would resolve the Lightning payments and release the spacechain block to other spacechain nodes. If they didn’t succeed in 10 blocks or if they saw one of the transactions they were holding mined in another spacechain block then they would cancel that transaction specifically and fail the Lightning payment. The user “wallet” was a web interface for keeping track of user assets, pending transactions and it also contacted miners directly via the CLN websocket “commando” interface. It’s weird, I should at least have recorded a screencast of the process, but I can’t find any.
For the BMM covenant I should have used a provably invalid key (is that what a NUMS mean?), but I think I got too distracted while coding the script path and all the APO stuff (I didn’t have any prior experience with programming Bitcoin script and much less with Taproot and APO and PSBT) and didn’t pay attention to that obvious key path flaw.