Problem: Bitcoin could be fixing the world a lot faster

We have all the tools we need to create a golden age for humanity, but we aren't using them in the most intelligent possible way.

Bitcoin has created a new territory of freedom by providing a form of Money that operates in parallel to legacy civilisation, but Number Go Up technology has created a tenacious complacency: get in the lifeboat or put the oxygen mask on, and Satoshi (MHEP) will do all the work. It's careless to assume that a universal Bitcoin standard is inevitable.

We are likely approaching two challenges on the path towards a universal Bitcoin standard:

* The Fiat Dominion is slowly overcoming its arrogance and waking up to the existential threat that Bitcoin poses. We can hope for the best, but it's naive to believe the Fiat Dominion will not use every class of weapon at its disposal as it fights for survival.

* Civilisations tend to collapse exponentially in a cascade failure. The loss of trust in key institutions is a clear signal that this process is underway, and we are likely to be much closer to chaos than it appears to our linear-thinking minds. If Bitcoin doesn't fix things before this happens, we will need to do things the old fashioned way, which sounds romantic but it isn't fun for anyone.

### Solution: a self-organising civilisation centered upon Bitcoin

The simplest solution is not to fix the current structures and system(s), but to instead build something new, in parallel and as an opt-in alternative. If successful, it will become a fallback position for the masses as legacy civilisation continues its collapse.

The flow of humanity into a Bitcoin standard is dependent upon the community around Bitcoin making Bitcoin more useful - the larger the economy *around* Bitcoin becomes, the more useful Bitcoin itself is and the faster humanity transitions to a Bitcoin standard.

A civilisation that's centered on Bitcoin will naturally accelerate the usefulness of Bitcoin (to the degree that the civilisation itself is useful). In this regard, our parallel civilisation is just another tool in Bitcoin's toolbox. Instead of trying to modify Bitcoin to become a sharper instrument, we create resilient and powerful parallel systems that integrate Bitcoin.

Nostrocket, or any similar attempt, would not be possible without Bitcoin, as anyone who's ever uttered **fix the money fix the world** will understand. Here are some examples:

* A free and open civilisation requires honest price discovery, which can only happen with sound money.

* A civilisation based on a Money that can be created at no cost is ultimately a worthless civilisation.

* Nostrocket needs a source of undeniable and objective **Newtonian** truth that everyone can agree on:

* A shared clock to know when things happened in the past, what's happening right now, and roughly how long till things should happen in the future.

* Objective certainty that some information existed at a specific time in the past.

* Objective certainty over the current financial state of a system/organisation/person/transaction/etc.

* A constant of economics such that we have the ability to objectively reason about our civilisation's economy.

* Nostrocket requires economic value to be transacted between parties even when powerful interests want to censor these transactions.

* Nostrocket requires some mechanism by which state can be considered immutable.

* We need to know (in a way that leaves no doubt) when something doesn't work and let our new civilisation's ideas die instead of the civilisation itself. Bitcoin is a source of Darwinian truth, and can act as guard rails against Darwinian mistakes - does x produce surplus or not?

Aside from a Bitcoin standard being the only viable mechanism to keep any civilisation sane, the corollary to the dependency on Bitcoin described above is that Nostrocket needs Bitcoin to live up to its full potential, so Nostrocket should naturally:

* support the ongoing development and adoption of Bitcoin, maximising the degree to which Bitcoin benefits humanity,

* ensure that Bitcoin benefits the bottom of the Cantillion pyramid more than the top

* ensure that the bottom of the Cantillion pyramid has the greatest trust in Bitcoin

* ensure that the bottom of the Cantillion pyramid is the most Bitcoin-literate

* ensure that those at the bottom of the Cantillion Pyramid have the most frictionless and lossless access to store their economic power in Bitcoin

* prevent any changes to Bitcoin that reduce the degree to which Bitcoin is resistant to attack by the Fiat Dominion

* be capable of rapidly addressing any imminent threats to Bitcoin, for example if there's evidence of a capability to break any of the cryptographic primitives

* uphold and promote a view of Bitcoin not as a complacency-breeding NGI technology, but as an active guerrilla insurrection against fiat occupation

Reply to this note

Please Login to reply.

Discussion

2 sentence tldr; ?

Bitcoin don’t fix the world fast enough

An SOU can help

SOU?

Self organised unorganization.

Or a self-organising civilisation centered upon Bitcoin

It will make a “company” with minimal rules, least frictionless. But also, it’s not like a company as we defined now. There is no honey pot, while every small problems targeted on the final goal.

Isn’t everything ultimately anchored in regional laws and regulation? How does self organizing solve having to work within established boundaries?

Can you specify the meaning of “established boundary”?

Nostr development is probably a good example.

No organisation but every small problem developer solving is targeting to a better world. We just need some fair incentive method to it, to solve so called”open source burn out ” problem

The burnout problem is not limited to open source. Just grinding gears without anything to show for it will do that.

Problem: we don't have a good way to focus the action of multiple humans while remaining sovereign

When Bitcoiners organise around shared goals, they tend to rely on the State to anchor their organisational structures and serve as the mediator of last resort between all stakeholders. Coinkite and OpenSats, for example.

All human organisational structures are fundamentally composed of human action (and **inter** action) because human action is the **only** primitive by which humanity can influence how the present reality is brought forth from the infinite potential of the future.

Families, tribes, companies, governments, civilisations, etc are all examples of organisational structures composed of human action.

#### Composing human action through boundary conditions

The usefulness of a bucket is created by the limitations or restrictions imposed by its base and sides. A bucket is useful because it holds water by creating **boundary conditions** on what the water **cannot** do while **remaining in the bucket**.

Human organisational structures are useful because what they do with humans is analogous to what a bucket does with water. These structures are defined by their boundary conditions on human action - what type of action humans can take while remaining within the organisational structure.

**Centrally planned** organisations like companies or governments tend to create boundary conditions on human action through a combination of:

* internal rules about what types of human action is permissible,

* internal rulers with the power to decide when to change the rules, and when to break them, and

* excluding people who don't submit to the rules and rulers ("don't fit the culture" or aren't a "team player").

Human action within organisations is also restricted by the underlying security model. Investors tend to rely on the State to enforce contracts, and so any organisation that wants to raise money tends to be nested under the State. All humans within such an organisation are therefor ultimately responsible to the State for their actions. For example, the CFO is responsible to the State for all financial activity performed within the organisation, and all humans within the organisation are responsible to the CFO when their action involves money. The same is true for all aspects of the organisation. It's therefor impossible for an organisation to be nested under the State without being centrally planned.

Centrally planned organisations exist along a spectrum of just how centrally planned they are - from highly planned military organisations to the **Teal** organisations as described by Frederic Laloux (well worth skimming through his book).

So-called **Decentralised organisations** tend to restrict human action by:

* deciding ahead of time on all the possible types of human action that shall be permissible within the organisation, and

* encoding the rules about these actions into some form of state machine (usually a "smart" "contract").

These organisations are typically inflexible due to this architecture. Modifying the set of human action that is permissible within the organisation requires smart contracts to be republished, which is where the community generally falls back to trusting a central team.

#### Mutexless organisations

The more you need upfront consensus or agreement on what to do, the [less speedup you get](https://en.wikipedia.org/wiki/Amdahl%27s_law) by adding additional "workers".

The more sequential operations or mutexes you have, the less speedup you get by adding additional threads or workers because all of those threads need to pause execution and wait for the sequential parts of the process. It's a non-linear relationship: a tiny increase in wait-states drastically reduces the speedup gained when adding more threads. At some point, adding more threads does not result in any speedup.

In human organizations, we have the same thing. Individuals within the organization are workers or threads. Human organizations have a ratio of sequential to parallel operations, just like computer programs. The more a team needs to stop and synchronize, the less work they get done and the smaller the maximum team size, after which adding more people does not result in any additional productivity.

Requiring permission or agreement over what to do within an organisation is a sequential operation. Meetings are the mutexes of human organisations.

Thus, the most efficient organisational structure is one where participants can do productive work without requiring any permission or agreement with others over what work to do.

#### Sovereign organisations

Sovereign human action is human action taken by a **sovereign individual**.

Sovereign human action does not **require** permission from others. It does not **require** upfront consensus or agreement. The sovereign individual MAY seek agreement or permission before taking some action, but this is not **required**, it's entirely their own decision.

A sovereign organisation is one where individuals may participate while remaining sovereign. A better term for this is a sovereign unorganisation.

The organisational structure of a sovereign unorganisation MUST be composed of sovereign human action.

A sovereign civilisation is probably some form of meta sovereign unorganisation composed not only of sovereign human action but also many sovereign unorganisations, and inhabited by sovereign individuals.

#### How do we focus sovereign human action?

If an organisation is sovereign, it's also mutexless because participants can do productive work without requiring any permission or agreement with others over what work to do.

The implication is that participants within such an organisation can do work without anyone knowing what they are working on, because work can be done without any upfront agreement on what is being built.

How do we create an organisational structure which allows individuals to remain sovereign and work towards building something without requiring any agreement on what we are building?

What are the boundary conditions on sovereign human action that create the conditions for such an organisational paradigm?

The metric we use to judge if Nostrocket has optimal boundary conditions on human action within it is the community size - are humans being attracted to it faster than any alternative?

* Humans with something to contribute must be better off by acting **within** the structure of Nostrocket than they are by acting within any other structure.

* Nostrocket must result in more value for Participants than any other opportunity available to them.

* Nostrocket must become, and actively remain, the most efficient organisational paradigm possible with the current technology

* The mechanism by which work gets done within Nostrocket cannot require upfront agreement on what that work should involve or what the end result should look like

* Nostrocket cannot require any upfront funding and cannot retain any capital

* To remove any internal friction, Nostrocket must be radically fair to all Participants, more fair than any other organisational structure

* Nostrocket's rules and ideology must be as pristine and *credibly neutral* as possible

* It's not possible to be as pristine and neutral as Bitcoin because Nostrocket is an organisational structure while Bitcoin is property, but Bitcoin is the standard to judge against.

* The boundary conditions or limitations should be simple, explicit, clear, and graduated such that there's no overhead required to onboard new Participants, and Participants may advance at their own speed along their own zone of proximal development.

---

### Possible Solution: an unprotocol for a universally applicable hill-climbing algorithm, executed by sovereign human action.

The core of the solution is a hill-climbing algorithm which optimises for increasing the number of Participants.

Software can be used to make things more efficient and to provide continuity of the current state of Nostrocket, but the algorithm itself is executed by self-interested sovereign human action and not machine.

Human action within Nostrocket must be executed for purely self-interested reasons in order for it to be optimally efficient, accurate, scalable, and to minimise any social attack surface. When people solve problems for their own reasons, the solutions are more accurate than when they are doing it because someone is coercing them with money. A case in point: organic contributions to wikipedia vs. paid contributions.

The life-force (or fuel) of an organisational structure is human action that yields **surplus** - that means production of surplus is in the critical path to more Participants, and so our algorithm must optimise for this.

Amdahl's law can be restated as "the more you need consensus about what to build, the less efficient you will be at building it". For Nostrocket to be the most efficient problem solver and builder, it must require the least amount of consensus on what to build and how to build it.

Projects like ZeroMQ have proven that it's possible for valuable products/services (i.e. powerful and effective solutions) to evolve from simple rules with **no upfront planning** or consensus. This is core to our approach to innovation and surplus without requiring any consensus on what to build or how to build it - no upfront planning and no leadership.

The set of boundary conditions for human action within Nostrocket is defined by the Nostrocket Unprotocol. It's rather long, so here's a summary:

0. Anyone who's not already a **Participant** MAY become a Participant by being validated by an existing Participant. This results in a **tree of Participants** called the Identity Tree.

1. Change follows the **Serbian method** - a continuous pattern of accurately identifying **Problems**, and applying the **simplest possible solution** to each Problem.

* This project is currently applicable only to a *very* tiny subset of humanity who are able to understand the concept and do something useful with it, but this subset should get *less tiny* with each problem solved.

* As these problems and minimal solutions pile on top of each other, novel and valuable products/services will evolve (read the protocol to get a more complete picture of how this works).

* There's nothing that inherently limits Nostrocket to producing software based solutions, it could also produce hardware, houses, food, etc.

2. Any Participant MAY log a **Problem** (an observed matter or situation regarded as unsatisfactory).

* There are no bug reports or feature requests, these are just problems (or they aren't).

* There are no priority levels for problems, there are just problems that are worth solving (or not).

* Problems should be reasoned about and broken down into smaller problems until they are objective or replicable, and actionable.

* Problems should be broken down until they are small enough that they can be solved very quickly - anything longer than 6 hours of working time is probably too big.

* Problems MUST be relevant to Nostrocket itself. Nostrocket is not a freelancing market or a problem-solver for hire.

* Problems MUST be nested under another Problem, creating a Problem Tree.

3. Any Participant MAY **Claim** (and solve, typically with a **Patch**) any unclaimed Problem. Any **Maintainer** can (and should) **Merge** any Patch that does **not** violate the Unprotocol.

* At this early stage most of the problems Nostrocket is likely to encounter will simply be with its own implementation, hence they will typically be solved with a Patch. However, if the experiment is a success this will start to involve the physical world, things like Nostrocket meetup or conference related problems might be some of the first examples.

4. A Participant who solves a Problem MAY indicate the value of their work by creating a **Dispendium**

* A Dispendium MUST be denominated in Satoshi

* A Dispendium is **not** an entitlement or guarantee to be paid

* An Dispendium is how a Participant SHOULD communicate the sacrifice they have made in solving the problem

* An Dispendium allows Participants to peer review the value being claimed by comparing individual solutions and their associated Dispendiums

5. Participants with **Votepower** MAY vote to **Ratify** (approve) or **Blackball** (reject) a Dispendium.

* The Dispendium SHOULD be rejected unless it's along the route (or **critical path**) to more Participants.

* Votepower is a measure of a Participant's **skin in the game**.

* `Votepower = Shares * Leadtime`

* Every Participant's `Leadtime` starts at `0`.

* A Participant's Shares **cannot** be spent/transferred if their `Leadtime > 0`.

* A Participant MAY increase or decrease their Leadtime by `1` every 2,016 blocks (but can't become negative)

* If more than 50% of Nostrocket's Votepower approves a Dispendium, and less than 5% reject it, its Approved.

* If Participants with Votepower reject Dispendiums that comply with the Unprotocol and are reasonable amounts, others will see this and stop working, and Nostrocket will die or be forked.

* If Participants with Votepower approve Dispendiums that should not be approved, they are diluting their own Shares for no good reason.

6. If a Dispendium is **Approved**, new **Shares** are created for the Participant who logged the Dispendium (1:1 per Satoshi claimed in the Dispendium).

* Shares MUST NOT be created **any other way** (that would mean the experiment has **failed**).

* Nostrocket has been instantiated with a **single** share as this is technically the only way to bootstrap the process.

7. Participants own **all** revenue produced by anything Nostrocket builds. Whenever anyone pays for a product/service created (or **discovered**) by Nostrocket, the Sats are streamed **directly** to Participants in proportion to the number of Shares they have and how long they've had them.

* Revenue distribution MUST be fair for everyone. Potential Participants who take more risk by making sacrifices before it's clear if the experiment will work or not need to agree that it's fair. Potential Participants who want to do work after the concept is well established and revenue is being generated must also agree that revenue distribution is fair.

* When there's a pot of money available, Mallory finds a way to corrupt whatever is guarding it.

* Nostrocket MUST NOT retain any capital or raise any funds (and doing so is an anti-pattern that fundamentally precludes decentralisation).

Problem: nostrocket is not currently applicable to more than a few people

The nostrocket implementation is currently lacking most of the features that are described in the unprotocol.

This means most people are not really able to use nostrocket for very much. It's only really applicable to a few people at this stage because it takes a lot of time and effort to understand what it is and even more to get involved.

Solution: start adding problems nested under this one when it relates to the implementation and UX of Spaceman, Engine, the Relay, etc.

Whenever logging a problem, think: does solving this problem make bring Nostrocket closer to another participant getting involved?

Problem: the Nostrocket problem tracker is clunky and annoying to use

Now that we are using the Nostrocket problem tracker to build nostrocket itself, the most pressing problem is that the problem tracker is annoying to use.

Solution: Log problems with the problem tracker, nest them under this problem to keep them all in one place.

Problem: can't send people a direct link to a problem

Sometimes I want to share a problem with someone, but I can't do this because problems do not have direct links.

Problem: can't take action in relation to problems

I changed the structure of the events to put opcodes in tags instead of in content, so now nothing works.

I'm claiming problem de562a586f1fd4792a90a8dfc1abe34a15307067b96a05736a4519379c191e5f on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing problem de562a586f1fd4792a90a8dfc1abe34a15307067b96a05736a4519379c191e5f on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: problem tracker event IDs are not very useful to humans

when viewed in regular clients, problem tracker events publish an event ID in the content. This is kind of helpful but not really

solution: use the title of the problem in content instead of publishing the event ID

I'm claiming [Problem: problem tracker event IDs are not very useful to humans] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: problem tracker event IDs are not very useful to humans] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: can't re-open a closed problem

I'm claiming [Problem: can't re-open a closed problem] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: can't re-open a closed problem] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: many unrelated comments are displayed on problems

There are a lot of unrelated comments displayed when opening a problem.

This is due to the tag structure.

Solution: parse the tags somehow to find comments that should be displayed and reject the ones that should not

I'm claiming [Problem: many unrelated comments are displayed on problems] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: many unrelated comments are displayed on problems] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: can't see how long a problem has been claimed for

People sometimes claim problems and disappear, leaving it in a locked state.

Maintainers can free these problems, but they shouldn't do this unless the time the problem has been locked for exceeds 432 blocks.

Solution:

Display how many blocks a problem has been claimed for

Problem: nostrocket is not aware of the current Bitcoin height

Solution: anyone with votepower can publish blocks, anyone without votepower can validate them.

I'm claiming [Problem: nostrocket is not aware of the current Bitcoin height] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

Happy 800k blocks

I'm closing [Problem: nostrocket is not aware of the current Bitcoin height] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: rocket indicator on problems reverts back to nostrocket when it shouldn't

At the top-right of a problem there is an indicator showing which rocket currently owns the problem.

This works for the root problem associated with each rocket, but sub-problems display "nostrocket" even when they are nested under a problem that is owned by a different rocket.

Problem: can't tag problems with a rocket ID

When a new rocket is created in response to a problem, the rocket embeds the problemID.

This does not allow problems to be aware of what rockets they are associated with.

Solution:

Allow problems to be tagged with RocketIDs.

This also solves the problem of not being able to group problems by the applicable code repository, skill level, language, etc.

I'm claiming [Problem: can't tag problems with a rocket ID] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I previously claimed [Problem: can't tag problems with a rocket ID] on the nostrocket problem tracker, but I'm not abandoning it and freeing it up for other people to claim.

Problem: problem tracker state machine can't query rocket state machine's state

The problem tracker state machine can't query the rocket state machine's current state because this would cause a recursive query loop.

Solution:

Create a shared object with the latest state of all state machines. Push current states from the event conductor to this new object.

Every state machine can then have read-only access to the current state of any other state machine.

I'm claiming [Problem: problem tracker state machine can't query rocket state machine's state] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: problem tracker state machine can't query rocket state machine's state] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm closing [Problem: can't tag problems with a rocket ID] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm closing [Problem: rocket indicator on problems reverts back to nostrocket when it shouldn't] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: can't view problems by context

I want to be able to view problems based on what context they are applicable to.

For example, I want to see which problems are related to the Engine repository, but not spaceman. If I could tag problems with the relevant repository and filter by this, that would be great.

Some other things I might want to filter by are langauge, difficulty level, etc.

Solution:

Implement a state machine that administers tags.

Tags should have types, e.g. `language`, `repository`, `difficulty`.

Problem: when viewing a single problem, its context in the tree is not clear

When you view a single problem, there's no indication of where it is in the tree and how it relates to other problems.

Solution:

Add parent problems in a similar way to how closed problems are currently displayed in the tree (title only, small size).

Also display children the same way.

Problem: can't change the Rocket taged on a problem once set

Sometimes problems need to move between different Rockets. For example, I just logged a problem about the Flame Bucket Rocket being unable to recieve payments, but this is a problem that should be fixed by Nostrocket even though it is nested under Flame Bucket.

This is currently not possible.

Solution: patch the Problem state machine event handler to allow this.

I'm claiming [Problem: can't change the Rocket taged on a problem once set] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: can't change the Rocket taged on a problem once set] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: can't link existing problems to each other

A "child" problem is a dependency of a parent problem. This is an explicit and direct relationship. A parent cannot be closed unless all children are closed.

But sometimes you go to log a problem, and find out that someone else has already logged it under a different parent. In this situation, the child problem is a dependency of both parents.

To avoid needing to log the same problem multiple times, we should be able to simply link any problem as a dependency of any other problem.

Caveat: need to prevent circular dependencies.

Problem: have to abandon problem in order to create sub-problems

When I claim a problem to work on it, I often find that the problem is not scoped narrowly enough and I want to add sub-problems.

Solution: allow the creation of sub-problems if you are the person who has currently claimed the problem to work on it.

When the sub-problem is created, the Engine should automatically remove the claim on the parent problem.

Problem: Comments on problems don't show attribution

I commented on "Problem: the Nostrocket problem tracker is clunky and annoying to use" and while I can see my comment, nobody else knows it was authored by me. At least I'm not seeing the attribution from Spaceman. This means bad behavior may persist longer than it would if attribution were clear. It also makes it hard to carry on a conversation using the usual @user convention that people are used to.

yeah its buggy. you are on identity tree now and you can comment

Problem: Comments on problems don't show attribution

I commented on "Problem: the Nostrocket problem tracker is clunky and annoying to use" and while I can see my comment, nobody else knows it was authored by me. At least I'm not seeing the attribution from Spaceman. This means bad behavior may persist longer than it would if attribution were clear. It also makes it hard to carry on a conversation using the usual @user convention that people are used to.

Problem: Comments are in newest-first order

Comments are currently in newest-first order, which may be good if you're familiar with the situation and want to just see what's new. I believe most viewers will be seeing for the first time and attempting to read the history in chronological order.

#### Solution: A PR is forthcoming to make the order chronological.

I'm claiming [Problem: Comments are in newest-first order] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

Problem: When there are many comments, the problem view opens with the view at the bottom

When clicking "read more..." on an individual problem with many comments, the view opens scrolled-down. This assumes the user is mainly interested in the comments, however it seems best to open at the top so the problem description can be read first. Same behavior seen in Chrome and Firefox.

#### Solution: Start with the view at the top of the page.

Problem: people can't use Nostrocket for their own projects

It's somewhat possible for people other than myself to begin working on nostrocket, but no one can use Nostrocket for their own projects.

Problem: can't see which rocket owns which problem

When viewing the problem tracker, I can't see which rocket owns each problem.

I'm closing problem efdb0962e72a02dc0ffd44e1d58b2427237120b5d4759f85d712ae64e976c211 on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm closing problem efdb0962e72a02dc0ffd44e1d58b2427237120b5d4759f85d712ae64e976c211 on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm tagging [Problem: people can't use Nostrocket for their own projects] with the Rocket rocketmaker

Problem: not sure if sub-problems get auto-tagged with mother rocket

Solution: creating this problem to test it.

I'm closing [Problem: not sure if sub-problems get auto-tagged with mother rocket] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm closing [Problem: people can't use Nostrocket for their own projects] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: the Nostrocket Unprotocol cannot be read by anyone

No one can actually read the nostrocket unprotocol because it has not been published anywhere.

Solution: implement primitives of the protocol, which allows the protocol to build itself according to the protocol.

Problem: spaceman site gets fully re-rendered every time state gets updated

This is pretty annoying. Especially when adding problems to the problem tracker.

Problem: segfault in eventcatcher

```

panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x2 addr=0x0 pc=0x1044c9564]

goroutine 20 [running]:

nostrocket/messaging/eventcatcher.SubscribeToTree(0x1400008c120, 0x1400006a300, 0x1400008c0c0)

/Users/g/nostrocket_repo/engine/messaging/eventcatcher/eventcatcher.go:63 +0x354

created by nostrocket/messaging/eventconductor.handleEvents

/Users/g/nostrocket_repo/engine/messaging/eventconductor/eventconductor.go:64 +0x170

exit status 2

make: *** [reset] Error 1

```

I'm closing problem c623d0daeb8ffb3675a606c7912ccf450e6034b161dc5aab099c0d58e927f629 on the nostrocket problem tracker, it's been resolved or become obsolete.

[Problem: segfault in eventcatcher] on the nostrocket problem tracker was previously closed but I'm re-opening it because it appears that it isn't resolved.

[Problem: segfault in eventcatcher] on the nostrocket problem tracker was previously closed but I'm re-opening it because it appears that it isn't resolved.

Problem: don't know when system is sleeping

The segfault described by c623d0daeb8ffb3675a606c7912ccf450e6034b161dc5aab099c0d58e927f629 happens when the system goes to sleep.

There's nothing we can really do about it unless we know when the system is going to sleep.

Solution: use a C library to detect system sleep.

I'm claiming [Problem: don't know when system is sleeping] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: don't know when system is sleeping] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm claiming [Problem: segfault in eventcatcher] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: segfault in eventcatcher] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: can't submit merit requests

Merit requests are how we indicate and communicate the value we believe our work has in comparison to that of others.

This is the basis by which merit cap tables enter nostrocket state in order to distribute revenue when someone pays for a product or service offered by a rocket.

The problem right now is that no one can actually log a merit request.

I'm claiming [Problem: can't submit merit requests] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I previously claimed [Problem: can't submit merit requests] on the nostrocket problem tracker, but I'm not abandoning it and freeing it up for other people to claim.

Problem: can't create initial merit cap table

Merit requests must be approved by existing merit holders, but when a rocket is first created there are no merit holders.

Solution: allow the creator of a new rocket to instantiate a new merit cap table for their rocket with 1 merit and locked for a lead time of 1 such that their votepower is 1.

This will give the creator of the new rocket 100% of the initial votepower and they can begin approving or rejecting new merit requests.

I'm claiming [Problem: can't create initial merit cap table] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I previously claimed [Problem: can't create initial merit cap table] on the nostrocket problem tracker, but I'm not abandoning it and freeing it up for other people to claim.

Problem: nostrocket rocket object does not have a rocket ID

The nostrocket rocket is the only one which is not created by publishing an event and so it does not have a rocket ID.

Solution: not sure yet

I'm closing [Problem: nostrocket rocket object does not have a rocket ID] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm claiming [Problem: can't create initial merit cap table] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I previously claimed [Problem: can't create initial merit cap table] on the nostrocket problem tracker, but I'm not abandoning it and freeing it up for other people to claim.

I'm claiming [Problem: can't create initial merit cap table] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: can't create initial merit cap table] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm claiming [Problem: can't submit merit requests] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: can't submit merit requests] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: difficult to see how merits relate to different participants

The page displaying merits is not very clear about who has what merits

soution: use some borders etc to show groupings of different rockets and merits

I'm claiming [Problem: difficult to see how merits relate to different participants] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: difficult to see how merits relate to different participants] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: can't test the Merits state machine

I have implemented Merits. But I can't test this without impacting the mainnet state.

Solution: create a new rocket for testing things

Problem: can't test creating a new request for merits

I cannot test the merit request process without affecting mainnet.

I'm logging this problem to claim it as a test case.

I'm claiming [Problem: can't test creating a new request for merits] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: can't test creating a new request for merits] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm closing [Problem: can't test the Merits state machine] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm tagging [Problem: can't test the Merits state machine] with the Rocket undefined

Problem: can't vote on merit requests

People can log merit requests in response to problems they have solved, but the existing merit holders cannot approve or reject these requests

Problem: can't view existing merit requests

Participants can log merit requests but no one can see them anywhere or interact with them in any way.

Solution:

Display open merit requests on the Merits page.

I'm claiming [Problem: can't view existing merit requests] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: can't view existing merit requests] on the nostrocket problem tracker, it's been resolved or become obsolete.

I'm claiming [Problem: can't vote on merit requests] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: can't vote on merit requests] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: people without any solved problems can't see merit request page

There's a bug preventing the merit request page from rendering if the person logged in does not have any closed/solved problems.

I'm claiming [Problem: people without any solved problems can't see merit request page] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: people without any solved problems can't see merit request page] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: invalid memory address or nil pointer dereference in eventcatcher.go:88

```

panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x2 addr=0x0 pc=0x102b89298]

goroutine 37 [running]:

nostrocket/messaging/eventcatcher.SubscribeToTree(0x1400023c120, 0x1400008e300, 0x1400023c0c0)

/Users/g/nostrocket_repo/engine/messaging/eventcatcher/eventcatcher.go:88 +0x3c8

created by nostrocket/messaging/eventconductor.handleEvents

/Users/g/nostrocket_repo/engine/messaging/eventconductor/eventconductor.go:64 +0x170

exit status 2

make: *** [reset] Error 1

```

Problem: no such file or directory when running engine

```

rm -rf ~/nostrocket/data

go mod tidy

go run cmd/engine/*.go

# github.com/prashantgupta24/mac-sleep-notifier/notifier

In file included from ../../go/pkg/mod/github.com/prashantgupta24/mac-sleep-notifier@v1.0.1/notifier/notifierMain.go:7:

./main.h:5:10: fatal error: mach/mach_port.h: No such file or directory

5 | #include

| ^~~~~~~~~~~~~~~~~~

compilation terminated.

make: *** [Makefile:8: reset] Error 1

```

I was running engine at Ubuntu 22.04.1 LTS and run into the problem above.

I can see it now

I'm claiming [Problem: no such file or directory when running engine ] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I think this is fixed, just sent a patch. Please pull the latest and check, and close the problem if it's solved

Yes it is fixed. Thank you 🙏

I'm closing [Problem: no such file or directory when running engine ] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: we sometimes create a new consensus tree when we shouldn't

Sometimes when reproducing the current state of nostrocket, it publishes a new consensus tree when one exists already.

It seems to be missing an event or something.

Solution:

A quick and dirty solution would be to check the timestamp when attempting to process a state change event out of consensus mode (the only time when we need to produce a new consensus tree is when seeing a valid state change event that is not currently included in the consensus tree).

If the timestamp of the event is not recent, then we are probably missing a consensus event somewhere and should try a bit harder to find it before creating a new consensus tree.

I'm claiming [Problem: we sometimes create a new consensus tree when we shouldn't] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

😯

Have a look at nostrocket.github.io/spaceman and go to the problem tracker 😎🫂

🤙

I'm closing [Problem: we sometimes create a new consensus tree when we shouldn't] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: there is no maintainer tree

Some actions require a maintainer - e.g. changing which rocket a problem is tagged with, closing a problem if the person who logged it disappears, merging pull requests, etc.

The maintainer tree is documented in the Nostrocket Unprotocol but it has not been implemented in the Engine or Spaceman.

I'm claiming [Problem: there is no maintainer tree] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: there is no maintainer tree] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: can't modify products

I want to be able to modify the description of a nostrocket product that I have created but this is currently not possible.

Solution: allow the product creator or a maintainer (of the parent rocket) to update product data (price, and the event ID of the product description)

Problem: sub-rockets can't have their own maintainers

The maintainer tree is currently global, and so there are only Nostrocket maintainers.

Sometimes it's going to be neccessary to have a maintainer tree that is specific to a particular rocket, e.g. for updating products.

I'm claiming [Problem: sub-rockets can't have their own maintainers] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: sub-rockets can't have their own maintainers] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: we sometimes publish consensus events when we shouldn't

Sometimes when consensus events are slow to come from relays we start building a new consensus leaf node when a better one already exists but we just don't know about it.

I think simplest way to deal with this is to classify consensus events into RAW (we haven't seen a consensus event for this event height yet and are creating a new lead node in the consensus tree) and ACK (we have seen a consensus event and agree with it).

We should only produce RAW events when we are at the current Bitcoin tip. In the case of a stalled network, we can manually set a flag to produce RAW events when we aren't at the Bitcoin tip so that we can catch up to it.

I'm closing [Problem: we sometimes publish consensus events when we shouldn't] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: deadlock in consensus handler

```

Previous place where the lock was grabbed

goroutine 22 lock 0xc0005259f0

engine/library/debug.go:9 library.ValidateSaneExecutionTime { mu.Lock() } <<<<<

~/go/pkg/mod/github.com/sasha-s/go-deadlock@v0.3.1/deadlock.go:84 go-deadlock.(*Mutex).Lock { func (m *Mutex) Lock() { }

messaging/eventconductor/eventconductor.go:180 eventconductor.processStateChangeEventOutOfConsensus { sane := library.ValidateSaneExecutionTime() }

engine/library/eventStack.go:40 library.(*Stack).Pop { func (q *Stack) Pop() (*nostr.Event, bool) { }

Have been trying to lock it again for more than 1m0s

goroutine 109670 lock 0xc0005259f0

engine/library/debug.go:11 library.ValidateSaneExecutionTime.func1 { mu.Lock() } <<<<<

~/go/pkg/mod/github.com/sasha-s/go-deadlock@v0.3.1/deadlock.go:84 go-deadlock.(*Mutex).Lock { func (m *Mutex) Lock() { }

Here is what goroutine 22 doing now

goroutine 22 [chan send (nil chan), 1 minutes]:

nostrocket/state/consensustree.HandleConsensusEvent({{0xc000ab0dc0, 0x40}, {0xc000ab0180, 0x40}, 0x64e1b412, 0x9c401, {0xc0015ef6b0, 0x2, 0x2}, {0xc0010c4b80, ...}, ...}, ...)

/Users/g/git/nostrocket/fresh/engine/state/consensustree/newHandler.go:48 +0x328

nostrocket/messaging/eventconductor.processStateChangeEventOutOfConsensus(0xc0015303f0)

/Users/g/git/nostrocket/fresh/engine/messaging/eventconductor/eventconductor.go:191 +0x285

nostrocket/messaging/eventconductor.handleEvents()

/Users/g/git/nostrocket/fresh/engine/messaging/eventconductor/eventconductor.go:142 +0xd14

created by nostrocket/messaging/eventconductor.Start in goroutine 1

/Users/g/git/nostrocket/fresh/engine/messaging/eventconductor/eventconductor.go:52 +0x471

exit status 2

make: *** [reset] Error 1

```

I'm closing [Problem: deadlock in consensus handler] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: merit requests can be submitted to the wrong rocket

Arkinox just submitted a merit request which SHOULD have been sent to the Flame Bucket rocket, but was instead sent to the master nostrocket rocket.

Solution:

Engine: validate problem rocket and merit rocket match

Client: don't let user choose the rocket, just automatically select the correct one.

Problem: Nostrocket depends on centralized platform GitHub for source code management

While the problems in Spaceman are assembled from Nostr notes, submission of patches is done through GitHub. The problem is that GitHub has the power to restrict users and projects from using its platform. Case in point, I created a Github account specifically to contribute to Nostrocket but it was shadowbanned. GitHub support responded to a support request with, "Your account has been hidden from view as it appears to have been one of many created in an account farming effort." even though it's only the second account I've created.

Proposed solution: Store source code in nostr notes and manage patches through Nostr. Available tools that may help are git-nostr and git-nostr-tools listed at https://github.com/aljazceru/awesome-nostr

Problem: No sovereign way exists for humanity to reason and communicate about real/imagined places

Humanity needs a permissionless, neutral, free and open way of representing real and imagined objects in a shared digital space so that we can efficiently communicate ideas through and about these objects and their relationships to people, other objects, and the real world.

Possible solution: a permissionless digital space protocol

Problem: There is no permissionless, decentralized digital space protocol

Humans have invented countless digital 3D spaces but none of them may be used in a permissionless, sovereign way. All 3D digital spaces are subject to centralized systems and utilize artificial power hierarchies (admin permissions) to regulate user capabilities.

Possible solution: utilize nostr and proof-of-work to create a permissionless decentralized digital space where thermodynamics regulates a user's capabilities rather than their permissions

Problem: There is no specification for a thermodynamic, permissionless digital space protocol

We need an open source explanation for how a digital space protocol should work so that it can be improved and adopted in a free and open way.

I'm claiming [Problem: There is no specification for a thermodynamic, permissionless digital space protocol] on the nostrocket problem tracker so that I can work on it and other people don't duplicate my efforts.

I'm closing [Problem: There is no specification for a thermodynamic, permissionless digital space protocol] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: unit bias compels people to buy shitcoins

One of the reason that people keep buying shitcoins is because they think Bitcoin is too expensive.

They see a shitcoin and think they can get a "whole" shitcoin but they can't afford a whole Bitcoin.

There are many reasons why this is flawed reasoning, but few which the average human can understand without dedicating time and effort.

The simplest way to address this, or the lowest hanging fruit, is to price Bitcoin in sats rather than wholecoins on the most popular sites that display the Bitcoin price (e.g. coinmarketcap).

This will change the mindset of Bitcoin costing $30,000 (currently) to it costing just $0.0003, allowing people to compare it to shitcoins with ridiculously high numbers of coins in circulation.

Solution: not sure, but maybe we could start by telling the world about https://www.change.org/chancellor-on-brink

I'm closing [Problem: unit bias compels people to buy shitcoins] on the nostrocket problem tracker, it's been resolved or become obsolete.

Problem: unit bias makes people buy shitcoins

One of the reasons people keep buying shitcoins is because they think Bitcoin is too expensive and that shitcoins are cheaper.

They see a shitcoin and think they can get a "whole" shitcoin but they can't afford a whole Bitcoin.

Newcomers think they are getting something discounted or cheap when they are really just buying something that is massively diluted.

### What is a wholecoin anyway?

The decimal place in Bitcoin was placed in the centre (of the maximum number of digits) in order to provide maximum flexibility - the same number of digits each side of the decimal. Visually, it looks like this: 00000000.00000000

Nothing in the Bitcoin implememtation uses decimal places when computing values, the decimal is purely thematic and added after-the-fact when displaying amounts to the user. It exists for psychological reasons, not technical reasons.

### The solution to unit bias:

The place where most people go to see the prices of Bitcoin and shitcoins is coinmarketcap. We need to get people to put pressure on them to change the unit from wholecoins to sats.

The simplest place to start is probably by spreading this petition around: https://www.change.org/chancellor-on-brink