2022-02-16 00:53:01 -05:00
---
title: >-
README
---
2023-09-18 23:13:07 -04:00
2022-02-16 00:53:01 -05:00
[pre alpha documentation (mostly a wish list) ](docs/index.htm )
[copyright © and license ](./license.txt )
pre-requisite, Pandoc to build the html documentation from the markdown files.
Windows pre-requisites: Visual Studio and git-bash
2022-06-10 07:49:37 -04:00
To obtain the source code from which the project can be built,
2022-06-19 19:17:52 -04:00
including this README.html, from the bash command line (git-bash in windows).
2022-02-16 00:53:01 -05:00
2022-06-19 19:17:52 -04:00
```bash
2022-05-11 15:54:50 -04:00
git clone --recurse-submodules missing url
2022-02-16 00:53:01 -05:00
```
2022-06-19 19:17:52 -04:00
To build the docs, you need pandoc on the path.
```bash2
cd wallet/docs
./mkdocs.sh
```
2022-02-16 00:53:01 -05:00
To configure and build the required third party libraries in windows, then
2022-06-19 19:17:52 -04:00
build the program and run unit test for the first time, you need to have
Visual studio build tools at their default location)
2022-02-16 00:53:01 -05:00
2022-06-19 19:17:52 -04:00
```bash2
cd wallet
./winConfigure.bat
2022-02-16 00:53:01 -05:00
```
2022-06-19 19:17:52 -04:00
Or, if you are in the command shell or power shell,
2022-05-11 16:39:45 -04:00
```bat
2022-06-10 07:49:37 -04:00
.\winConfigure.bat
2022-02-16 00:53:01 -05:00
```
2022-06-19 19:17:52 -04:00
After a pull from remote in which the submodules have changed, the pull
fails to automatically update the submodules by default, and when you
switch or checkout branches, the switch fails to automatically switch
and checkout the brances.
2022-06-10 07:49:37 -04:00
2022-06-19 19:17:52 -04:00
After a pull that gives you a status of modified submodules.
2022-05-11 16:39:45 -04:00
2022-06-19 19:17:52 -04:00
```bash
git submodule update --init --recursive --remote
2022-05-11 16:39:45 -04:00
```
2022-05-11 15:54:50 -04:00
2022-06-19 19:17:52 -04:00
After a checkout or branch switch that gives you a status of modified submodules.
2022-05-23 00:05:10 -04:00
2022-06-19 19:17:52 -04:00
```bash
git submodule update --recursive
2022-05-11 16:39:45 -04:00
```
2022-05-11 15:54:50 -04:00
2022-06-19 19:17:52 -04:00
The documentation is in pandoc flavored markdown, which is
conveniently edited in vscode with the `markdown lint` and `Pandoc`
extensions included and, if you have launched `code` in the docs directory,
with `file/preferences/Extensions/Markdown/Styles` set to
`pandoc_templates\\style.css` , that being the style used by the `mkdocs.sh` documentation build script.
On Windows, if Git Bash and Pandoc has been installed, you should be
able to run this shell file in bash by double clicking on it.
2022-05-23 00:05:10 -04:00
2022-06-19 19:17:52 -04:00
if you add the recommended repository configuration defaults to your local repository configuration
```bash
git config --local include.path ../.gitconfig
```
this will substantially mitigate the problem of submodules failing to
update in pushes, pulls, checkouts, and switches.
2022-05-23 00:05:10 -04:00
2022-07-25 05:04:34 -04:00
[cryptographic software is under attack]:./docs/setup/contributor_code_of_conduct.html#code-will-be-cryptographically-signed
2022-02-16 00:53:01 -05:00
"Contributor Code of Conduct"
{target="_blank"}
2022-06-19 19:17:52 -04:00
It will, however, also implement signed commits, insist that you have `gpg` on your path, and that you have cohfigured a signing key in your local config, and will refuse to pull updates that are signed by a gpg key that you have not locally trusted.
because [cryptographic software is under attack] from NSA
2022-05-23 00:05:10 -04:00
entryists and shills, who seek to introduce backdoors.
2022-02-16 00:53:01 -05:00
2023-11-03 19:24:15 -04:00
[has its own trust model based on *ssh* and gpg keys]:https://git-scm.com/docs/git-config
{target="_blank"}
〔 Note that this has been obsoleted and needs to be rewritten
since git now [has its own trust model based on *ssh* and gpg keys]
and the file `gpg.ssh.allowedSignersFile` ,
which should be in a repository that only allows signed commits.
Git now has a bunch of hooks that are accessed through config entries
starting with `gpg.` that potentially allow us to supply zooko names
2023-11-08 14:20:16 -05:00
for git signed commits.〕 You can sign a file or a commit, and
`https://github.com/USERNAME.keys` is a central name authority.
2023-11-03 19:24:15 -04:00
2022-02-16 00:53:01 -05:00
This may be inconvenient if you do not have `gpg` installed and set up.
2022-06-15 03:14:32 -04:00
It also means that subsequent pulls and merges will require you to have `gpg ` trust the key `public_key.gpg` , and if you submit a pull request, the puller will need to trust your `gpg` public key.
2022-02-16 00:53:01 -05:00
`.gitconfig` adds several git aliases:
2022-06-10 07:49:37 -04:00
1. `git lg` to display the gpg trust information for the last few commits.
2022-02-16 00:53:01 -05:00
For this to be useful you need to import the repository public key
`public_key.gpg` into gpg, and locally sign that key.
2022-05-23 00:05:10 -04:00
1. `git graph` to graph the commit tree with signing status
2022-02-16 00:53:01 -05:00
1. `git alias` to display the git aliases.
```bash
2022-05-23 00:05:10 -04:00
# To verify that the signature on future pulls is
# unchanged.
2022-02-16 00:53:01 -05:00
gpg --import public_key.gpg
gpg --lsign 096EAE16FB8D62E75D243199BC4482E49673711C
```
2022-05-23 00:05:10 -04:00
We ignore the Gpg Web of Trust model and instead use the Zooko
identity model.
We use Gpg signatures to verify that remote repository code
is coming from an unchanging entity, not for Gpg Web of Trust. Web
of Trust is too complicated and too user hostile to be workable or safe.
Never --sign any Gpg key related to this project. --lsign it.
2022-06-14 19:27:17 -04:00
`gitconfig` disallows merges unless you have told `gpg` to trust the
public key corresponding to the private key that signed the tip of
the root. So part of the pull request process is getting the puller to
trust your public key, and you will not be able to pull updates
unless you tell `gpg` to trust the key that is in the root directory as
`public_key.gpg` .
2022-05-23 00:05:10 -04:00
Never check any Gpg key related to this project against a public
gpg key repository. It should not be there.
2022-06-19 07:04:27 -04:00
`gitconfig` disallows merges unless you have told `gpg` to trust the public
key corresponding to the private key that signed the tip of the root. So part
of the pull request process is getting the puller to trust your public key, and
you will not be able to pull updates unless you tell `gpg` to trust the key that
is in the root directory as `public_key.gpg` .
2022-05-23 00:05:10 -04:00
Never use any email address on a gpg key related to this project
unless it is only used for project purposes, or a fake email, or the
email of an enemy. We don't want Gpg used to link different email
addresses as owned by the same entity, and we don't want email
addresses used to link people to the project, because those
identities would then come under state and quasi state pressure.
2022-06-10 07:49:37 -04:00
[Pre alpha release ](./RELEASE_NOTES.html ), which means it does not yet work even well
enough for it to be apparent what it would do if it did work.