Merge remote-tracking branch 'origin/docs'
This commit is contained in:
commit
770b0bf715
83
docs/design/mixer.md
Normal file
83
docs/design/mixer.md
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
---
|
||||||
|
title: >-
|
||||||
|
Bitcoin mixer.
|
||||||
|
sidebar: false
|
||||||
|
notmine: false
|
||||||
|
abstract: >-
|
||||||
|
I want to get early adopters to use my planned privacy
|
||||||
|
social net, as a small step to replacing SWIFT.
|
||||||
|
all existing bitcoin mixers have been shut down because
|
||||||
|
they relied on a centralized social net,
|
||||||
|
which depended on domain names, which resulted
|
||||||
|
in the fbi arriving at address of the owner of the
|
||||||
|
domain name
|
||||||
|
---
|
||||||
|
|
||||||
|
Samourai wallet migrated to centralisation, which directly led to them getting
|
||||||
|
busted. That codebase is poisoned with communications that the FBI
|
||||||
|
has flagged as actionable. And integrating anything into current
|
||||||
|
Bitmessage is impossible except for the original developer. No
|
||||||
|
big Python program is truly open source.
|
||||||
|
|
||||||
|
The correct design for a mixer is as follows. One has a social net,
|
||||||
|
on which anyone can offer to coordinate a single mixing transaction.
|
||||||
|
for a mix that will produce mixed coins (utxos )of a particular
|
||||||
|
round number, 10mBTC, 20mBTC, 50mBTC, or 100mBTC,
|
||||||
|
plus unmixed changed coins.
|
||||||
|
|
||||||
|
All the mixed coins are of equal value, for example all 100mBTC.
|
||||||
|
|
||||||
|
Not some funny value highly identifiable value like 99.9872384mBTC
|
||||||
|
|
||||||
|
People offer to contribute utxos to this mix transaction - revealing
|
||||||
|
to the coordinater the public keys, the address, of the utxos,and
|
||||||
|
revealing to the coordinator that these utxos have a common owner.
|
||||||
|
|
||||||
|
They also give him the blinded addresses of coins they want to
|
||||||
|
receive. He blindsigns those addresses. They then reveal the unblinded
|
||||||
|
addresses, and his unblinded signature, which proves he signed those
|
||||||
|
addresses, but does not reveal to him which of the addresses he blindsigned it
|
||||||
|
is -- he does not learn the relation between the utxos that will be contributed
|
||||||
|
to the mix transaction, and the mixed or the change utxos that it will replace
|
||||||
|
them. (Though he and anyone doing blockchain analysis can trace the
|
||||||
|
change coins by the sudoko attack. But the sudoko attack is irrelevant to
|
||||||
|
coins that are all the same round number of bitcoin, such as 10mBTC)
|
||||||
|
|
||||||
|
He then creates the transaction, and everyone signs it. If not everyone
|
||||||
|
signs, everyone can see what the missing utxos were, the ones that
|
||||||
|
were promised, and not delivered, and blacklist them,
|
||||||
|
then try again.
|
||||||
|
|
||||||
|
People contributing already mixed utxos do not have to pay transaction fees
|
||||||
|
so get back exactly what they contributed.
|
||||||
|
|
||||||
|
People contributing as yet unmixed bitcoin have to pay a portion of the transaction
|
||||||
|
fee proportional to the number of utxos contributed and received. This is good for
|
||||||
|
them because the free of charge remixed utxos are enlarging their anonymity pool.
|
||||||
|
making each mixing transaction part of one enormous anonymity pool instead of many
|
||||||
|
tiny anonymity pools.
|
||||||
|
|
||||||
|
If mixing does not work like this, then someone has fucked it up in order to profit from
|
||||||
|
it, their users will be traced, and *they* will be traced, then arrested.
|
||||||
|
|
||||||
|
> > The core of my plan has always been Web 3.0, a privacy social net,
|
||||||
|
> > and everything else is just monetization, because software never
|
||||||
|
> > gets done properly or properly maintained without someone making
|
||||||
|
> > money off it.
|
||||||
|
|
||||||
|
> I got what you mean now. Once you reach a point that's indeed a good
|
||||||
|
> strategy to reinforce value of the network. You offer those
|
||||||
|
> integrate your service to beat metcalfe's law, your network becomes
|
||||||
|
> much more stronger. Facebook and some other social networks all
|
||||||
|
> followed this path via. 'applications' within them.
|
||||||
|
|
||||||
|
> > I have been trying to do that, but it is hard to get to the front of
|
||||||
|
> > the line of all the people who want to tell blockstream why
|
||||||
|
> > blockstream should fund them and their projects.
|
||||||
|
|
||||||
|
> Have you really tried? Adam must have had some fidelity to
|
||||||
|
> cypherpunks.
|
||||||
|
|
||||||
|
I have not tried, but I have been looking for entry points, and
|
||||||
|
have come up empty. One has to have an in, and one has
|
||||||
|
to listen before one speaks.s
|
@ -3,16 +3,13 @@ title:
|
|||||||
proof of share
|
proof of share
|
||||||
sidebar: true
|
sidebar: true
|
||||||
notmine: false
|
notmine: false
|
||||||
|
abstract: >-
|
||||||
|
Map a blockdag algorithm to the corporate form.
|
||||||
|
The proof of share crypto currency will work like
|
||||||
|
shares. Crypto wallets, or the humans controlling the wallets,
|
||||||
|
correspond to shareholders.
|
||||||
...
|
...
|
||||||
|
|
||||||
::: myabstract
|
|
||||||
[abstract:]{.bigbold}
|
|
||||||
Map a blockdag algorithm to the corporate form.
|
|
||||||
The proof of share crypto currency will work like
|
|
||||||
shares. Crypto wallets, or the humans controlling the wallets,
|
|
||||||
correspond to shareholders.
|
|
||||||
:::
|
|
||||||
|
|
||||||
# the problem to be solved
|
# the problem to be solved
|
||||||
|
|
||||||
We need proof of share because our state regulated system of notaries,
|
We need proof of share because our state regulated system of notaries,
|
||||||
|
27
docs/design/python_rant.md
Normal file
27
docs/design/python_rant.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
title:
|
||||||
|
Python rant
|
||||||
|
sidebar: false
|
||||||
|
notmine: false
|
||||||
|
abstract: >-
|
||||||
|
Python is the best language in the world for code you intend will only be used by yourself,
|
||||||
|
used only a few times, then thrown away. It also works great for small trivial programs.
|
||||||
|
For large programs intended to be used many times by many people on
|
||||||
|
many different machines, it is a disaster.
|
||||||
|
...
|
||||||
|
|
||||||
|
The bigger it gets, the more it traps you into code that is only going to run
|
||||||
|
correctly on your one particular development system and that no one else is
|
||||||
|
going to be able to modify and add to, so investing in python
|
||||||
|
in anything you intend to be widely used is a trap. Open source
|
||||||
|
python is also a trap, because no one else is going to be able
|
||||||
|
to modify and add to it.
|
||||||
|
|
||||||
|
If I try to start modifying Bitmessage, I will surely fail. It is a bigger python
|
||||||
|
program than anyone except the original developer can maintain and modify.
|
||||||
|
|
||||||
|
In this sense, no large open source python program is truly open source. PHP
|
||||||
|
has the same problem, though to lesser degree. Javascript likewise. Has
|
||||||
|
improved considerably, but still sucks. But typescript which is compiled to javascript is OK.
|
||||||
|
so all big projects with many developers use typescript rather than javascript.
|
||||||
|
Or they die before they get big.
|
@ -138,6 +138,10 @@ the verdict is that they are useless and unusable,
|
|||||||
|
|
||||||
And we should use fibres instead. Fibres?
|
And we should use fibres instead. Fibres?
|
||||||
|
|
||||||
|
On the other hand, lots of people report incomprehensible complexity in
|
||||||
|
the borrow checker when it and the programmer are struggling with
|
||||||
|
asynch.
|
||||||
|
|
||||||
Boost fibres provide multiple stacks on a single thread of execution. But
|
Boost fibres provide multiple stacks on a single thread of execution. But
|
||||||
the consensus is that [fibres just massively suck](https://devblogs.microsoft.com/oldnewthing/20191011-00/?p=102989).
|
the consensus is that [fibres just massively suck](https://devblogs.microsoft.com/oldnewthing/20191011-00/?p=102989).
|
||||||
|
|
||||||
@ -164,7 +168,7 @@ how to do it with Goroutines.
|
|||||||
|
|
||||||
## Massive concurrency in Rust
|
## Massive concurrency in Rust
|
||||||
|
|
||||||
Well supported, works, widely used.
|
Well supported, works, widely used. Hard to use.
|
||||||
|
|
||||||
The way Rust does things is that the input that you are waiting for is itself a
|
The way Rust does things is that the input that you are waiting for is itself a
|
||||||
future, and that is what drives the cooperative multi tasking engine.
|
future, and that is what drives the cooperative multi tasking engine.
|
||||||
|
@ -216,12 +216,8 @@ calling one constructor from another.
|
|||||||
|
|
||||||
```C++
|
```C++
|
||||||
example::example(... arguments ...):
|
example::example(... arguments ...):
|
||||||
example(...different arguments ...)
|
example(...different arguments ...){
|
||||||
{
|
};
|
||||||
...
|
|
||||||
code
|
|
||||||
...
|
|
||||||
};
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -335,20 +331,24 @@ std::is_same< std::string, decltype(declval<T>().toString()) >
|
|||||||
|
|
||||||
# Template specialization
|
# Template specialization
|
||||||
|
|
||||||
|
```C++
|
||||||
namespace N {
|
namespace N {
|
||||||
template<class T> class Y { /*...*/ }; // primary template
|
template<class T> class Y { /*...*/ }; // primary template
|
||||||
template<> class Y<double> ; // forward declare specialization for double
|
template<> class Y<double> ; // forward declare specialization for double
|
||||||
}
|
}
|
||||||
template<>
|
template<>
|
||||||
class N::Y<double> { /*...*/ }; // OK: specialization in same namespace
|
class N::Y<double> { /*...*/ }; // OK: specialization in same namespace
|
||||||
|
```
|
||||||
|
|
||||||
is used when you have sophisticated template code, because you have to
|
is used when you have sophisticated template code, because you have to
|
||||||
use recursion for looping as the Mpir system uses it to evaluate an
|
use recursion for looping as the Mpir system uses it to evaluate an
|
||||||
arbitrarily complex recursive expression – but I think my rather crude
|
arbitrarily complex recursive expression – but I think my rather crude
|
||||||
implementation will not be nearly so clever.
|
implementation will not be nearly so clever.
|
||||||
|
|
||||||
|
```C++
|
||||||
extern template int fun(int);
|
extern template int fun(int);
|
||||||
/*prevents redundant instantiation of fun in this compilation unit – and thus renders the code for fun unnecessary in this compilation unit.*/
|
/*prevents redundant instantiation of fun in this compilation unit – and thus renders the code for fun unnecessary in this compilation unit.*/
|
||||||
|
```
|
||||||
|
|
||||||
# Abstract and virtual
|
# Abstract and virtual
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
# katex
|
|
||||||
title: >-
|
title: >-
|
||||||
Lets eat SWIFT's lunch.
|
Let’s eat SWIFT's lunch.
|
||||||
sidebar: true
|
sidebar: true
|
||||||
notmine: false
|
notmine: false
|
||||||
abstract: >-
|
abstract: >-
|
||||||
@ -15,7 +14,7 @@ abstract: >-
|
|||||||
Double spends are resolved by databases of the entities receiving the messages.
|
Double spends are resolved by databases of the entities receiving the messages.
|
||||||
The grotesque profits are made by the banks that use it.
|
The grotesque profits are made by the banks that use it.
|
||||||
And the profits for its crypto currency replacement are going to be made
|
And the profits for its crypto currency replacement are going to be made
|
||||||
by the cexs, dexes daos and wallets that use it.
|
by the cexs, dexes, daos and wallets that use it.
|
||||||
With a lions share of the profits made by first dao of the first dex,
|
With a lions share of the profits made by first dao of the first dex,
|
||||||
because of first mover advantage.
|
because of first mover advantage.
|
||||||
|
|
||||||
@ -138,9 +137,9 @@ Liquid, to take over from SWIFT. Liquid can handle a lot of transactions per sec
|
|||||||
but to really take over from Swift, we are going to be taking Visa’s role in international transaction,
|
but to really take over from Swift, we are going to be taking Visa’s role in international transaction,
|
||||||
and that will need Liquid Lightning, a layer three.
|
and that will need Liquid Lightning, a layer three.
|
||||||
Which theoretically exists, but has no useful consumer wallet and has no useful Liquid lightning network,
|
Which theoretically exists, but has no useful consumer wallet and has no useful Liquid lightning network,
|
||||||
because its command line wallet is only barely usable by a linux guru
|
because its command line wallet is only barely usable by a Linux guru
|
||||||
who is running exactly the right version of linux.
|
who is running exactly the right version of Linux.
|
||||||
Which is OK, if you have half a dozen linux systems running on
|
Which is OK, if you have half a dozen Linux systems running on
|
||||||
your private network and several shelves full of computers
|
your private network and several shelves full of computers
|
||||||
with no keyboards or video screens running in your basement,
|
with no keyboards or video screens running in your basement,
|
||||||
which you interact with over ssh and xrdp.
|
which you interact with over ssh and xrdp.
|
||||||
@ -194,276 +193,88 @@ and liquid lightning tether,
|
|||||||
for SWIFT is a nexus of third parties and third parties are not going to build on a cex.
|
for SWIFT is a nexus of third parties and third parties are not going to build on a cex.
|
||||||
A major reason that Particl is not very satisfactory is that Bitmessage is not very satisfactory.
|
A major reason that Particl is not very satisfactory is that Bitmessage is not very satisfactory.
|
||||||
|
|
||||||
# misc unorganized fragments
|
# Plan
|
||||||
|
|
||||||
## consensus
|
For a dex, one needs a a social net that
|
||||||
|
allows end to end encrypted conversations and allows
|
||||||
|
pseudonymous identities to conceal their network address, since if
|
||||||
|
one is doing trades of blockchain currencies on
|
||||||
|
a dex, exchanging one crypto currency for another,
|
||||||
|
one has make public offers without revealing the network
|
||||||
|
address of a computer that could be stolen, or
|
||||||
|
a person who could be subjected to rubber hose cryptography, and
|
||||||
|
engage in securely private human to human conversations
|
||||||
|
about the resulting transactions, also without revealing one's
|
||||||
|
network address.
|
||||||
|
|
||||||
> why do you hate POW? Because of resource waste? I thought it was the
|
For liquid lightning to work, needs an exchange between level one
|
||||||
> reason for success of BTC. With proof of share, or proof of stake,
|
lightning, liquid lightning,
|
||||||
> there will be always discussions of pre-mine, centralization etc.
|
tether lightning, bitcoin, liquid bitcoin, and tether.
|
||||||
> Would it be the case?
|
|
||||||
|
|
||||||
Hate the resource waste. It offends me. Plus a system that does
|
And the early adopters are not going to get aboard if the wallet is
|
||||||
not directly handle money, that is a a messaging system between
|
locked to a cex, locked to Boltz, fearing
|
||||||
systems that do handle money, cannot incentivise the
|
that once Boltz gets Metcalfe's law on its side, it is going to
|
||||||
necessary resource waste.
|
enshitify the network.
|
||||||
|
|
||||||
It could bill people for messaging, and the payments could go to the block winner, but then
|
Early adopters will want a dex, on which Blockz happens to be the
|
||||||
it would be a dao or yet another crypto currency, and not a neutral platform that other daos
|
major, but entirely replaceable, supplier
|
||||||
and crypto currencies could use.
|
of liquidity, so that if it turns evil, as corporations that have a
|
||||||
|
Metcalfe's law lockin tend to do, the
|
||||||
|
dex will become dominated by less evil alternatives.
|
||||||
|
|
||||||
Suppose we have a filecoin style proof of spacetime .
|
And a dex, a dex that exists for the perfectly respectable purpose
|
||||||
Which also wastes resources, but identifies those
|
of exchanging level one bitcoin
|
||||||
peers that are contributing to the network by storing
|
for level two (lightning, grail, and liquid) bitcoin, tether, and level
|
||||||
information and are capable of passing it around,
|
three (liquid lightning) bitcoin needs a
|
||||||
and have lots of connections to other peers.
|
privacy social net.
|
||||||
All peers that pass the proof of space test become
|
|
||||||
authorized consensus makers for
|
|
||||||
a certain number of blocks, say 8192 blocks.
|
|
||||||
The test is not too hard. Most peers are authorized.
|
|
||||||
|
|
||||||
We harvest randomness, possibly from the fact that parties
|
For a liquid lightning network to exist, needs a dex, the dex needs
|
||||||
do not know each other's secret keys, possibly from the
|
to have a privacy social net. But that would make the dex just one little
|
||||||
proof of space time test, so that each round, or each group of rounds,
|
island.
|
||||||
a peer gets a random weight, such that the inverse of the weight is uniformly
|
|
||||||
distributed between one and two to the fifty sixth
|
|
||||||
|
|
||||||
Which means the weight is non uniformly distributed, with a very few peers
|
Rather the dex needs to be *in* a privacy social net, which can have
|
||||||
having most of the weight.
|
many dexs
|
||||||
|
|
||||||
Each peer goes with the consensus block that has the highest chain of weights that it knows of.
|
To handle swift volumes, we need a liquid lightning network to
|
||||||
|
exist, for it to exist there has to be
|
||||||
|
a liquid lightning dex that mediates the exchange of liquid lightning for
|
||||||
|
other crypto currencies,, and such a dex needs a mechanism for communicating
|
||||||
|
publicly and privately without revealing one's network address.
|
||||||
|
|
||||||
Actually that algorithm has pathologies that could lead to suprising chain re-organisations
|
Therefore, need a privacy protocol that is an update to bitmessage,
|
||||||
-- a slightly more complex algorithm is needed.
|
with additional capability of zooko names and total order broadcast, reliable in the cryptographic sense.
|
||||||
|
|
||||||
Every time a proposed block consensus is shared, it now has addiitional support.\
|
This messaging functionality is the crypto currency equivalent of that provided by SWIFT to the banks.
|
||||||
The weights of the two peers that have that consensus
|
|
||||||
and have the highest weight of all peers having that consensus is propagated
|
|
||||||
among all the peers that have that consensus, and the weight of the consensus is the weight of
|
|
||||||
the lesser of the two peers, plus the weight of the lesser of the two peers of the block it
|
|
||||||
was built upon that were known to the peer that built upon it at the time he built upon it,
|
|
||||||
plus the weight of the block that block was built upon, and so on and so forth.
|
|
||||||
|
|
||||||
Thus the most well known chain is propagated, becoming more well known. The more
|
A total order broadcast in the cryptographic sense being that if one has
|
||||||
peers that know of a block, the greater the weight of the block.
|
a transaction protocol in which Bob is supposed
|
||||||
|
to send a message to Carol, and Carol supposed to send a
|
||||||
|
corresponding response to Bob, the blockchain
|
||||||
|
can prove who dropped the ball -- so one can have contracts on the
|
||||||
|
blockchain that have one outcome if Bob failed to
|
||||||
|
send the message, and a different outcome if Carol failed to reply.
|
||||||
|
|
||||||
It is a better algorithm, but a whole lot more work to implement than RandomX POW.
|
This makes possible a whole lot of useful dex capabilities, which do
|
||||||
|
not yet exist on any dex, but could and should.and Particl lack.
|
||||||
|
|
||||||
## plan
|
# The big problem
|
||||||
|
|
||||||
|
The urgent important problem that crypto currency has to solve is privacy and scaling.
|
||||||
> > But there is a perfectly respectable case for a social net that
|
|
||||||
> > allows end to end encrypted conversations and allows
|
|
||||||
> > pseudonymous identitities to conceal their network address, since if
|
|
||||||
> > one is doing trades of blockchain currencies on
|
|
||||||
> > a dex, one has make public offers without revealing the network
|
|
||||||
> > address of a computer that could be stolen, or
|
|
||||||
> > a person who could be subjected to rubber hose cryptography, and
|
|
||||||
> > engage in securely private conversations
|
|
||||||
> > about the resulting transactions, also without revealing one's
|
|
||||||
> > network address.
|
|
||||||
> >
|
|
||||||
> > For liquid lightning to work, needs an exchange between level one
|
|
||||||
> > lightning, liquid lightning,
|
|
||||||
> > tether lightning, bitcoin, liquid bitcoin, and tether.
|
|
||||||
> >
|
|
||||||
> > And the early adopters are not going to get aboard if the wallet is
|
|
||||||
> > locked to a cex, locked to Boltz, fearing
|
|
||||||
> > that once Boltz gets Metcalfe's law on its side, it is going to
|
|
||||||
> > enshitify the network.
|
|
||||||
> >
|
|
||||||
> > Early adopters will want a dex, on which Blockz happens to be the
|
|
||||||
> > major, but entirely replaceable, supplier
|
|
||||||
> > of liquidity, so that if it turns evil, as corporations that have a
|
|
||||||
> > Metcalfe's law lockin tend to do, the
|
|
||||||
> > dex will become dominated by less evil alternatives.
|
|
||||||
> >
|
|
||||||
> > And a dex, a dex that exists for the perfectly respectable purpose
|
|
||||||
> > of exchanging level one bitcoin
|
|
||||||
> > for level two (lightning and liquid) bitcoin, tether, and level
|
|
||||||
> > three (liquid lightning) bitcoin needs a
|
|
||||||
> > privacy social net.
|
|
||||||
|
|
||||||
> It makes sense.
|
|
||||||
|
|
||||||
> > If they decide they want a liquid lightning network to exist, they
|
|
||||||
> > need a dex, and they need a privacy social net for it
|
|
||||||
> > (Though I need a name less likely to give corporate officers the
|
|
||||||
> > hebee jeebies than privacy social net.
|
|
||||||
|
|
||||||
> Special social net. :)
|
|
||||||
|
|
||||||
Maybe I will just long windedly call it a social net designed to support
|
|
||||||
humanand and machine communications in a way suitable for cryptographic currency
|
|
||||||
purposes and especially a dex, that is a superset of the capabilities of Particl and
|
|
||||||
Bisq human to human communication protocol, particl's system being Bitmessage,
|
|
||||||
and Bitmessage being out of support.
|
|
||||||
|
|
||||||
> > My plan is to tell them they need a liquid lightning network to
|
|
||||||
> > exist, for it to exist there has to be
|
|
||||||
> > a liquid lightning dex, and it needs a mechanism for communicating
|
|
||||||
> > publicly and privately
|
|
||||||
> > without revealing one's network address.
|
|
||||||
> >
|
|
||||||
> > Therefore, fund a privacy protocol that is an update to bitmessage,
|
|
||||||
> > with additional capability of
|
|
||||||
> > zooko names and total order broadcast, reliable in the cryptographic
|
|
||||||
> > sense.
|
|
||||||
> >
|
|
||||||
> > total order broadcast in the cryptographic sense being that if one has
|
|
||||||
> > a transaction protocol in which Bob is supposed
|
|
||||||
> > to send a message to Carol, and Carol supposed to send a
|
|
||||||
> > corresponding response to Bob, the blockchain
|
|
||||||
> > can prove who dropped the ball -- so one can have contracts on the
|
|
||||||
> > blockchain that have one outcome if Bob failed to
|
|
||||||
> > send the message, and a different outcome if Carol failed to reply.
|
|
||||||
> >
|
|
||||||
> > This makes possible a whole lot of useful dex capabilities, which do
|
|
||||||
> > not yet exist on any dex, but could.
|
|
||||||
> > I need to write them up as part of a totally bland proposal for a
|
|
||||||
> > totally bland privacy social net that
|
|
||||||
> > enables arbitrary dexes and daos, among them a totally bland dex
|
|
||||||
> > that enables exchange of things near and dear to
|
|
||||||
> > Blockstream's heart.
|
|
||||||
|
|
||||||
> Ok, if you want me to pass your proposal, I'm ready to do it. I'm
|
|
||||||
> sure I can contact Adam, and at least get a response. I'm not sure
|
|
||||||
> how it should be proposed though. "Someone I messaged on BitMessage
|
|
||||||
> sharing this proposal, I'm sure you'll like it." :) But I think we
|
|
||||||
> can work it out.
|
|
||||||
|
|
||||||
I want to read what Adam has been writing, before I prepare the proposal.
|
|
||||||
|
|
||||||
I think he has been on some you tube channels, or something like that --
|
|
||||||
some kind of conference.
|
|
||||||
|
|
||||||
The proposal is going to be long and technical -- a white paper explaining what
|
|
||||||
Bitmessage is, that it is being used in the Particl dex, and explaining what
|
|
||||||
additional capabilities a dex needs, that Bisq and Particl lack.
|
|
||||||
|
|
||||||
## Python rant
|
|
||||||
|
|
||||||
Wouldn't it be an start to use existing code to experiment some p2p
|
|
||||||
> payments using bitmessage protocol?
|
|
||||||
|
|
||||||
Python is the best language in the world for code you intend will only be used by yourself,
|
|
||||||
used only a few times, then thrown away. It also works great for small trivial programs,
|
|
||||||
because these are apt to remain reasonably portable.
|
|
||||||
|
|
||||||
But the bigger it gets, the more it traps you into code that is only going to run
|
|
||||||
correctly on your one particular development system and that no one else is
|
|
||||||
going to be able to modify and add to, so investing in python
|
|
||||||
in anything you intend to be widely used is a trap. Open source
|
|
||||||
python is also a trap, because no one else is going to be able
|
|
||||||
to modify and add to it.
|
|
||||||
|
|
||||||
If I try to start modifying Bitmessage, I will surely fail. It is a bigger python
|
|
||||||
program than anyone except the original developer can maintain and modify.
|
|
||||||
|
|
||||||
In this sense, no large open source python program is truly open source. PHP
|
|
||||||
has the same problem, though to lesser degree. Javascript likewise. Has
|
|
||||||
improved considerably, but still sucks. But typescript which is compiled to javascript is OK.
|
|
||||||
so all big projects with many developers use typescript rather than javascript.
|
|
||||||
Or they die before they get big.
|
|
||||||
|
|
||||||
## mixer plan
|
|
||||||
|
|
||||||
(Which I am sure blockstream does not want)
|
|
||||||
|
|
||||||
> > Get early adopters to use it. One obvious use case is bitcoin
|
|
||||||
> > mixing. We have mixers, but the social environments that made them
|
|
||||||
> > usable have all been shut down.
|
|
||||||
|
|
||||||
> Or maybe integratate Samourai wallet into current BitMessage client?
|
|
||||||
|
|
||||||
Samourai wallet migrated to centralisation, which directly led to them getting
|
|
||||||
busted. That codebase is poisoned with communications that the FBI
|
|
||||||
has flagged as actionable. And integrating anything into current
|
|
||||||
Bitmessage is impossible except for the original developer. No
|
|
||||||
big Python program is truly open source.
|
|
||||||
|
|
||||||
The correct design for a mixer is as follows. One has a social net,
|
|
||||||
on which anyone can offer to coordinate a single mixing transaction.
|
|
||||||
for a mix that will produce mixed coins (utxos )of a particular
|
|
||||||
round number, 10mBTC, 20mBTC, 50mBTC, or 100mBTC,
|
|
||||||
plus unmixed changed coins.
|
|
||||||
|
|
||||||
All the mixed coins are of equal value, for example all 100mBTC.
|
|
||||||
|
|
||||||
Not some funny value highly identifiable value like 99.9872384mBTC
|
|
||||||
|
|
||||||
People offer to contribute utxos to this mix transaction - revealing
|
|
||||||
to the coordinater the public keys, the address, of the utxos,and
|
|
||||||
revealing to the coordinator that these utxos have a common owner.
|
|
||||||
|
|
||||||
They also give him the blinded addresses of coins they want to
|
|
||||||
receive. He blindsigns those addresses. They then reveal the unblinded
|
|
||||||
addresses, and his unblinded signature, which proves he signed those
|
|
||||||
addresses, but does not reveal to him which of the addresses he blindsigned it
|
|
||||||
is -- he does not learn the relation between the utxos that will be contributed
|
|
||||||
to the mix transaction, and the mixed or the change utxos that it will replace
|
|
||||||
them. (Though he and anyone doing blockchain analysis can trace the
|
|
||||||
change coins by the sudoko attack. But the sudoko attack is irrelevant to
|
|
||||||
coins that are all the same round number of bitcoin, such as 10mBTC)
|
|
||||||
|
|
||||||
He then creates the transaction, and everyone signs it. If not everyone
|
|
||||||
signs, everyone can see what the missing utxos were, the ones that
|
|
||||||
were promised, and not delivered, and blacklist them,
|
|
||||||
then try again.
|
|
||||||
|
|
||||||
People contributing already mixed utxos do not have to pay transaction fees
|
|
||||||
so get back exactly what they contributed.
|
|
||||||
|
|
||||||
People contributing as yet unmixed bitcoin have to pay a portion of the transaction
|
|
||||||
fee proportional to the number of utxos contributed and received. This is good for
|
|
||||||
them because the free of charge remixed utxos are enlarging their anonymity pool.
|
|
||||||
making each mixing transaction part of one enormous anonymity pool instead of many
|
|
||||||
tiny anonymity pools.
|
|
||||||
|
|
||||||
If mixing does not work like this, then someone has fucked it up in order to profit from
|
|
||||||
it, their users will be traced, and *they* will be traced, then arrested.
|
|
||||||
|
|
||||||
> > The core of my plan has always been Web 3.0, a privacy social net,
|
|
||||||
> > and everything else is just monetization, because software never
|
|
||||||
> > gets done properly or properly maintained without someone making
|
|
||||||
> > money off it.
|
|
||||||
|
|
||||||
> I got what you mean now. Once you reach a point that's indeed a good
|
|
||||||
> strategy to reinforce value of the network. You offer those
|
|
||||||
> integrate your service to beat metcalfe's law, your network becomes
|
|
||||||
> much more stronger. Facebook and some other social networks all
|
|
||||||
> followed this path via. 'applications' within them.
|
|
||||||
|
|
||||||
> > I have been trying to do that, but it is hard to get to the front of
|
|
||||||
> > the line of all the people who want to tell blockstream why
|
|
||||||
> > blockstream should fund them and their projects.
|
|
||||||
|
|
||||||
> Have you really tried? Adam must have had some fidelity to
|
|
||||||
> cypherpunks.
|
|
||||||
|
|
||||||
I have not tried, but I have been looking for entry points, and
|
|
||||||
have come up empty. One has to have an in, and one has
|
|
||||||
to listen before one speaks.
|
|
||||||
|
|
||||||
## the big problem
|
|
||||||
|
|
||||||
The urgent important problem that crypto currency has to solve is privacy and scaliing.
|
|
||||||
|
|
||||||
But cannot solve it just by creating a currency that is private and scales,
|
But cannot solve it just by creating a currency that is private and scales,
|
||||||
because scaling is not a competitive advantage over ten thousand scamcoins,
|
because scaling is not a competitive advantage over ten thousand scamcoins,
|
||||||
five thousand shitcoins, and two dozen altcoins,
|
five thousand shitcoins, and two dozen altcoins,
|
||||||
until you reach a market capitalization of thirty billion dollars,
|
until you reach a market capitalization of thirty billion dollars,
|
||||||
which is when scaling started to bite bitcoin in 2016-2017
|
which is when scaling started to bite bitcoin in 2016-2017, and privacy alone
|
||||||
|
is not an advantage over Monaro, Litecoin, ZCash, and Grin.
|
||||||
|
|
||||||
Further, all the recursive snark libraries are rough around the edges.
|
Further, all the recursive snark libraries are bleeding edge and rough around the edges.
|
||||||
Polygon's Poly2 is OK, but though theoretically open source,
|
|
||||||
it is not exactly open source, there are complications and gotchas.
|
|
||||||
|
|
||||||
So, the path is to create a privacy social net tool first.
|
So, the path is to create a privacy social net tool first.
|
||||||
A tool where you can securely have public and private conversations
|
A tool where you can securely have public and private conversations
|
||||||
without your IP being discoverable. Bitmessage done right.
|
without your IP being discoverable. Bitmessage done right.
|
||||||
|
|
||||||
A Dao that facilitates stuff done wth crypto currency,
|
A Dao that facilitates stuff done with crypto currency,
|
||||||
such as Bisq and Particl, needs such a social tool,
|
such as Bisq and Particl, needs such a social tool,
|
||||||
and what they have is rather broken.
|
and what they have is rather broken.
|
||||||
|
|
||||||
@ -473,21 +284,21 @@ efficient and transparent to investors, a sovereign corporation,
|
|||||||
while existing daos are dancing around the Howey test,
|
while existing daos are dancing around the Howey test,
|
||||||
and so are opaque and disorderly.
|
and so are opaque and disorderly.
|
||||||
|
|
||||||
So, create, not a crypto currency, but an environment for such Daos.
|
So, create, not a crypto currency, not a dao, but an environment for such daos.
|
||||||
Among them daos for trading crypto currency.
|
Among them daos for trading crypto currency.
|
||||||
A Dao that facilitates crypto currency transactions needs a trade currency
|
A dao that facilitates crypto currency transactions needs a trade currency
|
||||||
and dao ownership currency (substitute for shares).
|
and dao ownership currency (substitute for shares).
|
||||||
These are apt to be one and the same, to obfuscate the Howey test,
|
These are apt to be one and the same, to obfuscate the Howey test,
|
||||||
but they need not be and probably should not be.
|
but they need not be and probably should not be.
|
||||||
|
|
||||||
There are a whole lot of capabilities that a crypto coin needs
|
There are a whole lot of capabilities that a crypto coin needs
|
||||||
-- and we see that even in things that are well funded by many large corporations,
|
-- and we see that even in things that are well funded by many large corporations,
|
||||||
these things are geneally missing.
|
these things are generally missing.
|
||||||
|
|
||||||
Blockstream does not have a satisfactory lightning wallet,
|
Blockstream does not have a satisfactory lightning wallet,
|
||||||
and their business plan depends on the existence of a satisfactory lightning wallet.
|
and their business plan depends on the existence of a satisfactory lightning wallet.
|
||||||
Litecoin has demonstrated atomic exchange between
|
Litecoin has demonstrated atomic exchange between
|
||||||
Bitcoin, bitcoin lightning, Litecoin, and litecoin lightning,
|
Bitcoin, bitcoin lightning, Litecoin, and Litecoin lightning,
|
||||||
but does not have a dao in which to do it. Particl is not quite working,
|
but does not have a dao in which to do it. Particl is not quite working,
|
||||||
and Bisq lacks important things and still, after all these years,
|
and Bisq lacks important things and still, after all these years,
|
||||||
has known major bugs which can cause the loss of lots of money.
|
has known major bugs which can cause the loss of lots of money.
|
||||||
@ -508,34 +319,31 @@ Large python projects accumulate such technical debt that only the original prog
|
|||||||
can fix them, and become ever more fragile to minor,
|
can fix them, and become ever more fragile to minor,
|
||||||
obscure, and seemingly irrelevant changes in their environment.
|
obscure, and seemingly irrelevant changes in their environment.
|
||||||
|
|
||||||
Get early adopters to use it. One obvious use case is bitcoin mixing.
|
An important use case for Bitmessage was selling services for crypto currency
|
||||||
We have mixers, but the social environments that made them usable have all been shut down.
|
|
||||||
|
|
||||||
An important use case for bitmessage was selling services for crypto currency
|
|
||||||
to people who did not want to reveal their IP address.
|
to people who did not want to reveal their IP address.
|
||||||
This use case becomes a lot more conveniient if we can lift crypto transactions on existing privacy currencies
|
This use case becomes a lot more convenient if we can lift crypto transactions on existing privacy currencies
|
||||||
(Litecoin and Monero) and semi secure currencies (lightning) into the communication channel,
|
(Litecoin and Monaro) and semi secure currencies (lightning) into the communication channel,
|
||||||
as Nostr does a sort of mostly OK job of lifting lightning
|
as Nostr does a sort of mostly OK job of lifting lightning
|
||||||
into the communication channel.
|
into the communication channel.
|
||||||
First such use, following the footsteps of nostr tips.
|
First such use, following the footsteps of Nostr tips.
|
||||||
|
|
||||||
Get existing Daos to use it
|
Get existing Daos to use it
|
||||||
|
|
||||||
Get new Daos to use it. A Dao that wants to openly organise in an efficient manner transparent
|
Get new Daos to use it. A Dao that wants to openly organise in an efficient manner transparent
|
||||||
to investors is going to want a very private privacy blockchain on which to issue its shares.
|
to investors (which is to say in violation of the Howey test) is going to want a very private privacy blockchain on which to issue its shares. Such a dao
|
||||||
|
(a sovereign corporation) will
|
||||||
|
want to organise over a privacy social net, and its shares to be a privacy coin.
|
||||||
|
|
||||||
And now, it is back to plan A. (almost) A privacy blockchain
|
And now, it is back to plan A. (almost) A privacy blockchain
|
||||||
on which anyone can issue a Daocoin. Or a shitcoin or scamcoin.
|
on which anyone can issue a daocoin. Or a shitcoin or scamcoin.
|
||||||
|
|
||||||
But the privacy blockchain does not need to be fully scalable.
|
But the privacy blockchain does not need to be fully scalable.
|
||||||
It does, however need to be future compatible with the technologies
|
It does, however need to be future compatible with the technologies
|
||||||
that make full scalability possible. But we delay in the hope that by currency time,
|
that make full scalability possible. But we delay in the hope that by currency time,
|
||||||
recursive snarks libraries do not have quite so many rough edges
|
recursive snarks libraries do not have quite so many rough edges
|
||||||
|
|
||||||
> > The size of this project is illustrated by how many other big
|
The size of this project is illustrated by how many other big well funded
|
||||||
> > projects need some key element of this project, and do not have it.
|
projects need some key element of this project, and do not have it.
|
||||||
|
|
||||||
> I'm not sure if I understood that to be honest.
|
|
||||||
|
|
||||||
The core of my plan has always been Web 3.0, a privacy social net,
|
The core of my plan has always been Web 3.0, a privacy social net,
|
||||||
and everything else is just monetization,
|
and everything else is just monetization,
|
||||||
@ -546,79 +354,8 @@ And I look at all these people doing Web 3.0 stuff,
|
|||||||
or doing projects like particl that really require Web 3.0,
|
or doing projects like particl that really require Web 3.0,
|
||||||
and they are not done.
|
and they are not done.
|
||||||
|
|
||||||
> Can you double check Keet/Pear.. Holepunch thing? I belive a good
|
And so, all the larger moving parts that have to be part of the
|
||||||
> part of Blockstream funding is coming from Tether. And Tether (and
|
ultimate coin, have to be part of something that has more immediate
|
||||||
> their CEO) loves Keet (like his brainchild). Problem is they don't
|
utility, and is part of a business plan that will bring the project
|
||||||
> have any good use case. I believe a project somehow leveraging would
|
closer to completion, and product of that completion closer to
|
||||||
> easily get funding from Blockstream hence Tether.
|
getting past the cold start problem.
|
||||||
|
|
||||||
I have been trying to do that, but it is hard to get to the front of
|
|
||||||
the line of all the people who want to tell blockstream why
|
|
||||||
blockstream should fund them and their projects.
|
|
||||||
|
|
||||||
Also, I need to find the keywords needed to get the proposal
|
|
||||||
past the layer of idiot no men whose job is to protect them
|
|
||||||
from all those people with bright ideas as to why blockstream should fund them.
|
|
||||||
|
|
||||||
What words are they internally using for stuff that really needs to be done?
|
|
||||||
|
|
||||||
But some of the stuff I want done, they really need done.
|
|
||||||
>
|
|
||||||
> Also excuse me but how it would work if you stays anonymous and pay
|
|
||||||
> devs to work on it. How can they fund, doesn't it require
|
|
||||||
> psedenomous organization? Or do you think some can work in psedonmy
|
|
||||||
> but some can be non-anonymous while working on it?
|
|
||||||
|
|
||||||
I think they should promise an L-BTC bounty or lightning Bitcoin bounty
|
|
||||||
for someone who accomplishes certain goals.
|
|
||||||
Other people have used this funding model, albeit lightning Bitcoin.
|
|
||||||
|
|
||||||
> Even if you have the funding, it is not easy to bring talent on the
|
|
||||||
> table. What's your plan to find to hire the talent even if you can
|
|
||||||
> pay them?
|
|
||||||
|
|
||||||
Litecoin bounties for contributions that get included in the repository.
|
|
||||||
(Litecoin being arguably the best existing privacy currency -- at least when you use mweb addresses.
|
|
||||||
|
|
||||||
> > And so, all the larger moving parts that have to be part of the
|
|
||||||
> > ultimate coin, have to be part of something that has more immediate
|
|
||||||
> > utility, and is part of a business plan that will bring the project
|
|
||||||
> > closer to completion, and product of that completion closer to
|
|
||||||
> > getting past the cold start problem
|
|
||||||
> 100%
|
|
||||||
>
|
|
||||||
|
|
||||||
## collapse and cryptocurrency
|
|
||||||
|
|
||||||
>
|
|
||||||
> Or, do you think it will replace the Gold, nobody would need or want
|
|
||||||
> to use it.
|
|
||||||
>
|
|
||||||
> Today, if you ask me to accept Gold vs. Bitcoin, leaving aside the
|
|
||||||
> speculative part, I'd go 100% for gold. I'm not sure that would
|
|
||||||
> change in the future. But also maybe that's because I think I'm
|
|
||||||
> emotional about it. I always thought Gold is a godly thing, a "gift"
|
|
||||||
> of god to us punish or reward. No question fiat is a scam, or even
|
|
||||||
> in a good intent it is an opiod of an ecomy, however I'm really not
|
|
||||||
> convinced about Gold.
|
|
||||||
|
|
||||||
Obviously over the past few years, Bitcoin has risen enormously more than gold.
|
|
||||||
|
|
||||||
When it looked like full scale war might break out, bitcoin fell a little,
|
|
||||||
and gold rose considerably.
|
|
||||||
|
|
||||||
If the crisis is nuclear war, Gold, 22 LR rifle ammo, whiskey, tobacco,
|
|
||||||
and coffee are likely to be considerably more valuable investments than bitcoin.
|
|
||||||
|
|
||||||
If, on the other hand, the crisis is state internal collapse and red terror
|
|
||||||
against whites, straight males, and Christians, bitcoin because you can carry it through an airport,
|
|
||||||
while gold will be fairly useless
|
|
||||||
|
|
||||||
If the crisis is that you are likely to get conscripted to die in Eastern Europe or the middle east or Taiwan,
|
|
||||||
or all of them simultaneously, bitcoin will be useful, and gold fairly useless.
|
|
||||||
|
|
||||||
If the crisis is hyperinflation and collapse of the US dollar,
|
|
||||||
Gold and Bitcoin both work, but Bitcoin is better because
|
|
||||||
the primary problem will be transactions over distance.
|
|
||||||
|
|
||||||
If the problem is all of the above, simultaneously or in rapid succession, Bitcoin.
|
|
||||||
|
@ -10,6 +10,8 @@ abstract: >-
|
|||||||
as wading through molasses, failed to scale
|
as wading through molasses, failed to scale
|
||||||
---
|
---
|
||||||
|
|
||||||
|
This document is work in progress, incomplete and inchoerent.
|
||||||
|
|
||||||
# Failure of Bitcoin consensus to scale
|
# Failure of Bitcoin consensus to scale
|
||||||
Mining pools, asics
|
Mining pools, asics
|
||||||
|
|
||||||
@ -35,3 +37,56 @@ make decisions that are contrary to everyone else's interests. Even if the
|
|||||||
individual miner is better off than mining solo, this could well make everyone
|
individual miner is better off than mining solo, this could well make everyone
|
||||||
including the individual miner worse off, because he and everyone may be
|
including the individual miner worse off, because he and everyone may be
|
||||||
adversely affected by other people's decision to pool mine.
|
adversely affected by other people's decision to pool mine.
|
||||||
|
|
||||||
|
# POW
|
||||||
|
|
||||||
|
> why do you hate POW? Because of resource waste? I thought it was the
|
||||||
|
> reason for success of BTC. With proof of share, or proof of stake,
|
||||||
|
> there will be always discussions of pre-mine, centralization etc.
|
||||||
|
> Would it be the case?
|
||||||
|
|
||||||
|
Hate the resource waste. It offends me. Plus a system that does
|
||||||
|
not directly handle money, that is a a messaging system between
|
||||||
|
systems that do handle money, cannot incentivise the
|
||||||
|
necessary resource waste.
|
||||||
|
|
||||||
|
It could bill people for messaging, and the payments could go to the block winner, but then
|
||||||
|
it would be a dao or yet another crypto currency, and not a neutral platform that other daos
|
||||||
|
and crypto currencies could use.
|
||||||
|
|
||||||
|
Suppose we have a filecoin style proof of spacetime .
|
||||||
|
Which also wastes resources, but identifies those
|
||||||
|
peers that are contributing to the network by storing
|
||||||
|
information and are capable of passing it around,
|
||||||
|
and have lots of connections to other peers.
|
||||||
|
All peers that pass the proof of space test become
|
||||||
|
authorized consensus makers for
|
||||||
|
a certain number of blocks, say 8192 blocks.
|
||||||
|
The test is not too hard. Most peers are authorized.
|
||||||
|
|
||||||
|
We harvest randomness, possibly from the fact that parties
|
||||||
|
do not know each other's secret keys, possibly from the
|
||||||
|
proof of space time test, so that each round, or each group of rounds,
|
||||||
|
a peer gets a random weight, such that the inverse of the weight is uniformly
|
||||||
|
distributed between one and two to the fifty sixth
|
||||||
|
|
||||||
|
Which means the weight is non uniformly distributed, with a very few peers
|
||||||
|
having most of the weight.
|
||||||
|
|
||||||
|
Each peer goes with the consensus block that has the highest chain of weights that it knows of.
|
||||||
|
|
||||||
|
Actually that algorithm has pathologies that could lead to suprising chain re-organisations
|
||||||
|
-- a slightly more complex algorithm is needed.
|
||||||
|
|
||||||
|
Every time a proposed block consensus is shared, it now has addiitional support.\
|
||||||
|
The weights of the two peers that have that consensus
|
||||||
|
and have the highest weight of all peers having that consensus is propagated
|
||||||
|
among all the peers that have that consensus, and the weight of the consensus is the weight of
|
||||||
|
the lesser of the two peers, plus the weight of the lesser of the two peers of the block it
|
||||||
|
was built upon that were known to the peer that built upon it at the time he built upon it,
|
||||||
|
plus the weight of the block that block was built upon, and so on and so forth.
|
||||||
|
|
||||||
|
Thus the most well known chain is propagated, becoming more well known. The more
|
||||||
|
peers that know of a block, the greater the weight of the block.
|
||||||
|
|
||||||
|
It is a better algorithm, but a whole lot more work to implement than RandomX POW.
|
@ -4,6 +4,8 @@ title: >-
|
|||||||
Social networking
|
Social networking
|
||||||
sidebar: true
|
sidebar: true
|
||||||
notmine: false
|
notmine: false
|
||||||
|
misc_links: >-
|
||||||
|
Let’s eat <a href="SWIFT.html" target="_blank">SWIFT's lunch</a>.<br>
|
||||||
abstract: >-
|
abstract: >-
|
||||||
Speech is suppressed by censorship, and on "free speech" platforms by state sponsored shill spam.
|
Speech is suppressed by censorship, and on "free speech" platforms by state sponsored shill spam.
|
||||||
Crypto currency transaction metadata goes over insecure networks, so we need a secure, uncensorable, and spam resistent
|
Crypto currency transaction metadata goes over insecure networks, so we need a secure, uncensorable, and spam resistent
|
||||||
|
@ -35,8 +35,8 @@ fi
|
|||||||
katex=" --katex="$docroot
|
katex=" --katex="$docroot
|
||||||
fi
|
fi
|
||||||
done <$f
|
done <$f
|
||||||
|
echo "$destdir$base.html from $f"
|
||||||
pandoc --variable $banner_height --variable targetDocroot:$targetDocroot --template $docroot"pandoc_templates/pandoc.template" $katex $options $destdir$base.html $base.md
|
pandoc --variable $banner_height --variable targetDocroot:$targetDocroot --template $docroot"pandoc_templates/pandoc.template" $katex $options $destdir$base.html $base.md
|
||||||
echo "$destdir$base.html from $f"
|
|
||||||
#else
|
#else
|
||||||
# echo " $base.html up to date"
|
# echo " $base.html up to date"
|
||||||
fi
|
fi
|
||||||
|
260
docs/setup/nixos.md
Normal file
260
docs/setup/nixos.md
Normal file
@ -0,0 +1,260 @@
|
|||||||
|
---
|
||||||
|
title:
|
||||||
|
Nixos
|
||||||
|
sidebar: true
|
||||||
|
...
|
||||||
|
|
||||||
|
Nixos is primarily a package manager with a declarative functional language as its package manager.
|
||||||
|
|
||||||
|
Which makes it possible to reproducibly create a setup. Unfortunately the packages are hard to customise, because access to the
|
||||||
|
configuration files is restricted and non trivial -- you have to create your own package.
|
||||||
|
|
||||||
|
Nixos solves the problem of dll hell by having any number of configurations living on the same machine -- which leads to massive and rapid accumulation of garbage. Garbage collection is very slow, and requires either a lot of ram or a lot of swap (12GB swap recommended. This is a feature I do not want, but wind up suffering, for the advantage of reproducible setups.
|
||||||
|
|
||||||
|
To avoid bloat, can use a strategy of re-install from scratch, which Nixos makes less painful. I notice the mail server insists
|
||||||
|
on pinning to a specific Nixos release.
|
||||||
|
|
||||||
|
# Install Nixos
|
||||||
|
|
||||||
|
# minimal server
|
||||||
|
|
||||||
|
ssh and avahi daemon, pubkeys setup for ssh, users created.
|
||||||
|
|
||||||
|
## configuration.nix
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# Edit this configuration file to define what should be installed on
|
||||||
|
# your system. Help is available in the configuration.nix(5) man page, on
|
||||||
|
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ # Include the results of the hardware scan.
|
||||||
|
./hardware-configuration.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Use the systemd-boot EFI boot loader.
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
# networking.hostName = "nixos"; # Define your hostname.
|
||||||
|
# Pick only one of the below networking options.
|
||||||
|
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||||
|
# networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
|
# time.timeZone = "Europe/Amsterdam";
|
||||||
|
|
||||||
|
# Configure network proxy if necessary
|
||||||
|
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||||
|
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||||
|
|
||||||
|
# Select internationalisation properties.
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
# console = {
|
||||||
|
# font = "Lat2-Terminus16";
|
||||||
|
# keyMap = "us";
|
||||||
|
# useXkbConfig = true; # use xkb.options in tty.
|
||||||
|
# };
|
||||||
|
|
||||||
|
# Enable the X11 windowing system.
|
||||||
|
# services.xserver.enable = true;
|
||||||
|
|
||||||
|
# Configure keymap in X11
|
||||||
|
# services.xserver.xkb.layout = "us";
|
||||||
|
# services.xserver.xkb.options = "eurosign:e,caps:escape";
|
||||||
|
|
||||||
|
# Enable CUPS to print documents.
|
||||||
|
# services.printing.enable = true;
|
||||||
|
|
||||||
|
# Enable sound.
|
||||||
|
# hardware.pulseaudio.enable = true;
|
||||||
|
# OR
|
||||||
|
# services.pipewire = {
|
||||||
|
# enable = true;
|
||||||
|
# pulse.enable = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# Enable touchpad support (enabled default in most desktopManager).
|
||||||
|
services.libinput.enable = false;
|
||||||
|
|
||||||
|
#enable avahi-daemon
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
ipv6 = true;
|
||||||
|
ipv4 = true;
|
||||||
|
publish = {
|
||||||
|
enable = true;
|
||||||
|
addresses = true;
|
||||||
|
};
|
||||||
|
# nssmdns4 = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# guest additions
|
||||||
|
# not very useful unless desktop enabled, or maybe it just does not work at all
|
||||||
|
#virtualisation.virtualbox.guest.enable = true;
|
||||||
|
|
||||||
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
|
users.users.cherry = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||||||
|
openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAVcyLSWwsa8aN+v2PaS1wuHXGVhTdC+43B3eZ9j/C/M" ];
|
||||||
|
# packages = with pkgs; [
|
||||||
|
# firefox
|
||||||
|
# tree
|
||||||
|
# ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
|
users.users.root = {
|
||||||
|
openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAVcyLSWwsa8aN+v2PaS1wuHXGVhTdC+43B3eZ9j/C/M" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# List packages installed in system profile. To search, run:
|
||||||
|
# $ nix search wget
|
||||||
|
# environment.systemPackages = with pkgs; [
|
||||||
|
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||||
|
# wget
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# Some programs need SUID wrappers, can be configured further or are
|
||||||
|
# started in user sessions.
|
||||||
|
# programs.mtr.enable = true;
|
||||||
|
# programs.gnupg.agent = {
|
||||||
|
# enable = true;
|
||||||
|
# enableSSHSupport = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# List services that you want to enable:
|
||||||
|
|
||||||
|
# Enable the OpenSSH daemon.
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
hostKeys = [
|
||||||
|
{
|
||||||
|
path = "/etc/ssh/ssh_host_ed25519_key";
|
||||||
|
rounds = 100;
|
||||||
|
type = "ed25519";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
settings = {
|
||||||
|
PasswordAuthentication = false;
|
||||||
|
PubkeyAuthentication = true;
|
||||||
|
PermitRootLogin = "prohibit-password";
|
||||||
|
UsePAM = false;
|
||||||
|
ChallengeResponseAuthentication = false;
|
||||||
|
Ciphers = [ "chacha20-poly1305@openssh.com" ];
|
||||||
|
GatewayPorts = "Yes";
|
||||||
|
KbdInteractiveAuthentication = false;
|
||||||
|
KexAlgorithms = [ "curve25519-sha256" "curve25519-sha256@libssh.org" ];
|
||||||
|
Macs = [ "hmac-sha2-256-etm@openssh.com" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Open ports in the firewall.
|
||||||
|
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||||
|
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||||
|
# Or disable the firewall altogether.
|
||||||
|
networking.firewall.enable = false;
|
||||||
|
|
||||||
|
# Copy the NixOS configuration file and link it from the resulting system
|
||||||
|
# (/run/current-system/configuration.nix). This is useful in case you
|
||||||
|
# accidentally delete configuration.nix.
|
||||||
|
# system.copySystemConfiguration = true;
|
||||||
|
|
||||||
|
# This option defines the first version of NixOS you have installed on this particular machine,
|
||||||
|
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
||||||
|
#
|
||||||
|
# Most users should NEVER change this value after the initial install, for any reason,
|
||||||
|
# even if you've upgraded your system to a new NixOS release.
|
||||||
|
#
|
||||||
|
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
|
||||||
|
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
||||||
|
# to actually do that.
|
||||||
|
#
|
||||||
|
# This value being lower than the current NixOS release does NOT mean your system is
|
||||||
|
# out of date, out of support, or vulnerable.
|
||||||
|
#
|
||||||
|
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
||||||
|
# and migrated your data accordingly.
|
||||||
|
#
|
||||||
|
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||||
|
system.stateVersion = "24.05"; # Did you read the comment?
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## hardware-configuration.nix
|
||||||
|
|
||||||
|
This should be set up automatically by the install
|
||||||
|
process. For a human to do it is very difficult.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
imports = [ ];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "ata_piix" "ohci_pci" "ehci_pci" "ahci" "sd_mod" "sr_mod" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" =
|
||||||
|
{ device = "/dev/disk/by-uuid/bf0ee7f8-0397-44d6-a3f7-462b848d0912";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/B4E2-93D5";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [ "fmask=0077" "dmask=0077" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices =
|
||||||
|
[ { device = "/dev/disk/by-uuid/2b67021b-3b31-4e2d-a521-05362ffb39f8"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp0s3.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
virtualisation.virtualbox.guest.enable = true;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# change config
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/nixos/conf*.nix
|
||||||
|
df -h .
|
||||||
|
nixos-rebuild test
|
||||||
|
nixos-rebuild boot
|
||||||
|
df -h .
|
||||||
|
```
|
||||||
|
|
||||||
|
## garbage collect old configs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix-env --delete-generations old
|
||||||
|
nix-store --gc --print-dead
|
||||||
|
nix-store --gc --print-live
|
||||||
|
nix-store --gc
|
||||||
|
```
|
||||||
|
|
||||||
|
# Install nginx, mariadb, and php
|
||||||
|
|
||||||
|
[Nginx setup](https://wiki.nixos.org/wiki/Nginx#LEMP_stack)
|
||||||
|
|
||||||
|
# Nixos mail server
|
||||||
|
|
||||||
|
[This](https://nixos-mailserver.readthedocs.io/en/latest/) has the huge advantage that it only needs a small computer.
|
||||||
|
|
||||||
|
Setup is also decribed as ridiculously easy -- compare and contrast with much grief while setting up on debian.
|
||||||
|
|
||||||
|
And the huge disadvantage that it only exists for Nix 23.05, while the latest "stable" (not very stable at all) release is 24.05
|
||||||
|
|
||||||
|
It also has only a minimal nginx setup. Not at all sure what will happen when I combine it with a real nginx setup.
|
Loading…
Reference in New Issue
Block a user