Skip to content

Commit 39f7485

Browse files
authored
Docs: Update README.md to be more concise (algorand#6099)
1 parent e5a03e3 commit 39f7485

File tree

1 file changed

+87
-118
lines changed

1 file changed

+87
-118
lines changed

README.md

+87-118
Original file line numberDiff line numberDiff line change
@@ -1,204 +1,173 @@
1-
| rel/stable <br> [![CircleCI](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fstable.svg?style=svg)](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fstable) | rel/beta <br> [![CircleCI](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fbeta.svg?style=svg)](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fbeta) | rel/nightly <br> [![CircleCI](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fnightly.svg?style=svg)](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fnightly) |
2-
| --- | --- | --- |
31

42
# go-algorand
3+
| **Branch** | **Build Status** |
4+
| --------------- | ---------------- |
5+
| **rel/stable** | [![CircleCI](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fstable.svg?style=svg)](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fstable) |
6+
| **rel/beta** | [![CircleCI](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fbeta.svg?style=svg)](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fbeta) |
7+
| **rel/nightly** | [![CircleCI](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fnightly.svg?style=svg)](https://circleci.com/gh/algorand/go-algorand/tree/rel%2Fnightly) |
58

6-
Algorand's official implementation in Go.
79

8-
Algorand is a permissionless, pure proof-of-stake blockchain that delivers
9-
decentralization, scalability, security, and transaction finality.
10+
**Algorand's** official implementation in Go.
11+
12+
Algorand is a permissionless, pure proof-of-stake blockchain that delivers decentralization, scalability, security, and transaction finality.
1013

1114
## Getting Started
1215

13-
Our [developer website][developer site url] has the most up to date information
14-
about using and installing the Algorand platform.
16+
Visit our [developer website](https://developer.algorand.org/) for the most up-to-date information about using and installing the Algorand platform.
1517

16-
## Building from source
18+
## Building from Source
1719

18-
Development is done using the [Go Programming Language](https://golang.org/).
19-
The version of go is specified in the project's [go.mod](go.mod) file. This document assumes that you have a functioning
20-
environment setup. If you need assistance setting up an environment please visit
21-
the [official Go documentation website](https://golang.org/doc/).
20+
Development is done using the Go Programming Language. The Go version is specified in the project's [go.mod](go.mod) file. This document assumes you have a functioning environment set up. If you need assistance setting up an environment, please visit the [official Go documentation website](https://golang.org/doc/).
2221

2322
### Linux / OSX
2423

25-
We currently strive to support Debian-based distributions with Ubuntu 20.04
26-
being our official release target.
27-
Building on Arch Linux works as well.
28-
Our core engineering team uses Linux and OSX, so both environments are well
29-
supported for development.
24+
We currently strive to support Debian-based distributions, with Ubuntu 20.04 as our official release target. Building on Arch Linux also works well. Our core engineering team uses Linux and OSX, so both environments are well-supported for development.
25+
26+
**OSX Only**: [Homebrew (brew)](https://brew.sh) must be installed before continuing. [Here](https://docs.brew.sh/Installation) are the installation requirements.
3027

31-
OSX only: [Homebrew (brew)](https://brew.sh) must be installed before
32-
continuing. [Here](https://docs.brew.sh/Installation) are the installation
33-
requirements.
28+
### Initial Environment Setup
3429

35-
Initial environment setup:
3630
```bash
3731
git clone https://github.com/algorand/go-algorand
3832
cd go-algorand
3933
./scripts/configure_dev.sh
4034
./scripts/buildtools/install_buildtools.sh
4135
```
4236

43-
At this point, you are ready to build go-algorand. We use `make` and have a
44-
number of targets to automate common tasks.
37+
At this point, you are ready to build go-algorand. We use `make` and have several targets to automate common tasks.
38+
39+
### Build
4540

46-
#### build
4741
```bash
4842
make install
4943
```
5044

51-
#### test
45+
### Test
46+
5247
```bash
53-
# unit tests
48+
# Unit tests
5449
make test
5550

56-
# integration tests
51+
# Integration tests
5752
make integration
5853
```
5954

60-
#### style and checks
55+
### Style and Checks
56+
6157
```bash
6258
make fmt
6359
make lint
6460
make fix
6561
make vet
6662
```
67-
or alternatively
63+
64+
Alternatively, run:
65+
6866
```bash
6967
make sanity
7068
```
7169

72-
### Running a node
70+
## Running a Node
71+
72+
Once the software is built, you'll find binaries in `${GOPATH}/bin`, and a data directory will be initialized at `~/.algorand`. Start your node with:
73+
74+
```bash
75+
${GOPATH}/bin/goal node start -d ~/.algorand
76+
```
7377

74-
Once the software is built you'll find binaries in `${GOPATH}/bin`, and a data
75-
directory will be initialized at `~/.algorand`. Start your node with
76-
`${GOPATH}/bin/goal node start -d ~/.algorand`, use `${GOPATH}/bin/carpenter -d
77-
~/.algorand` to see activity. Refer to the [developer website][developer site
78-
url] for how to use the different tools.
78+
Use:
79+
80+
```bash
81+
${GOPATH}/bin/carpenter -d ~/.algorand
82+
```
83+
84+
to see activity. Refer to the [developer website](https://developer.algorand.org/) for instructions on using different tools.
85+
86+
### Providing Your Own Data Directory
87+
88+
You can run a node out of other directories than `~/.algorand` and join networks other than mainnet. Just make a new directory and copy the `genesis.json` file for the network into it. For example:
7989

80-
#### Providing your own data directory
81-
You can run a node out of other directories than `~/.algorand` and join networks
82-
other than mainnet. Just make a new directory and copy into it the
83-
`genesis.json` file for the network. For example:
8490
```bash
8591
mkdir ~/testnet_data
8692
cp installer/genesis/testnet/genesis.json ~/testnet_data/genesis.json
8793
${GOPATH}/bin/goal node start -d ~/testnet_data
8894
```
89-
Genesis files for mainnet, testnet, and betanet can be found in
90-
`installer/genesis/`.
95+
96+
Genesis files for mainnet, testnet, and betanet can be found in `installer/genesis/`.
9197

9298
## Contributing
9399

94100
Please refer to our [CONTRIBUTING](CONTRIBUTING.md) document.
95101

96-
97102
## Project Layout
98103

99-
`go-algorand` is split into various subsystems containing various packages.
104+
`go-algorand` is organized into various subsystems and packages:
100105

101106
### Core
102107

103108
Provides core functionality to the `algod` and `kmd` daemons, as well as other tools and commands:
104109

105-
- `crypto` contains the cryptographic constructions we're using for hashing,
106-
signatures, and VRFs. There are also some Algorand-specific details here
107-
about spending keys, protocols keys, one-time-use signing keys, and how they
108-
relate to each other.
109-
- `config` holds configuration parameters. These include parameters used
110-
locally by the node as well as parameters that must be agreed upon by the
111-
protocol.
112-
- `data` defines various types used throughout the codebase.
113-
- `basics` hold basic types such as MicroAlgos, account data, and
114-
addresses.
115-
- `account` defines accounts, including "root" accounts (which can
116-
spend money) and "participation" accounts (which can participate in
117-
the agreement protocol).
118-
- `transactions` define transactions that accounts can issue against
119-
the Algorand state. These include standard payments and also
120-
participation key registration transactions.
121-
- `bookkeeping` defines blocks, which are batches of transactions
122-
atomically committed to Algorand.
123-
- `pools` implement the transaction pool. The transaction pool holds
124-
transactions seen by a node in memory before they are proposed in a
125-
block.
126-
- `committee` implements the credentials that authenticate a
127-
participating account's membership in the agreement protocol.
128-
- `ledger` ([README](ledger/README.md)) contains the Algorand Ledger state
129-
machine, which holds the sequence of blocks. The Ledger executes the state
130-
transitions that result from applying these blocks. It answers queries on
131-
blocks (e.g., what transactions were in the last committed block?) and on
132-
accounts (e.g., what is my balance?).
133-
- `protocol` declares constants used to identify protocol versions, tags for
134-
routing network messages, and prefixes for domain separation of
135-
cryptographic inputs. It also implements the canonical encoder.
136-
- `network` contains the code for participating in a mesh network based on
137-
WebSockets. Maintains connection to some number of peers, (optionally)
138-
accepts connections from peers, sends point to point and broadcast messages,
139-
and receives messages routing them to various handler code
140-
(e.g. agreement/gossip/network.go registers three handlers).
141-
- `rpcs` contains the HTTP RPCs used by `algod` processes to query one
142-
another.
143-
- `agreement` ([README](agreement/README.md)) contains the agreement service,
144-
which implements Algorand's Byzantine Agreement protocol. This protocol
145-
allows participating accounts to quickly confirm blocks in a fork-safe
146-
manner, provided that sufficient account stake is correctly executing the
147-
protocol.
148-
- `node` integrates the components above and handles initialization and
149-
shutdown. It provides queries into these components.
110+
- **crypto**: Contains the cryptographic constructions used for hashing, signatures, and VRFs. It also includes Algorand-specific details about spending keys, protocol keys, one-time-use signing keys, and how they relate to each other.
111+
- **config**: Holds configuration parameters, including those used locally by the node and those that must be agreed upon by the protocol.
112+
- **data**: Defines various types used throughout the codebase.
113+
- **basics**: Holds basic types such as MicroAlgos, account data, and addresses.
114+
- **account**: Defines accounts, including "root" accounts (which can spend money) and "participation" accounts (which can participate in the agreement protocol).
115+
- **transactions**: Defines transactions that accounts can issue against the Algorand state, including standard payments and participation key registration transactions.
116+
- **bookkeeping**: Defines blocks, which are batches of transactions atomically committed to Algorand.
117+
- **pools**: Implements the transaction pool, holding transactions seen by a node in memory before they are proposed in a block.
118+
- **committee**: Implements the credentials that authenticate a participating account's membership in the agreement protocol.
119+
- **ledger** ([README](ledger/README.md)): Contains the Algorand Ledger state machine, which holds the sequence of blocks. The Ledger executes the state transitions resulting from applying these blocks. It answers queries on blocks (e.g., what transactions were in the last committed block?) and on accounts (e.g., what is my balance?).
120+
- **protocol**: Declares constants used to identify protocol versions, tags for routing network messages, and prefixes for domain separation of cryptographic inputs. It also implements the canonical encoder.
121+
- **network**: Contains the code for participating in a mesh network based on WebSockets. It maintains connections to some number of peers, (optionally) accepts connections from peers, sends point-to-point and broadcast messages, and receives messages, routing them to various handler code (e.g., agreement/gossip/network.go registers three handlers).
122+
- **rpcs**: Contains the HTTP RPCs used by `algod` processes to query one another.
123+
- **agreement** ([README](agreement/README.md)): Contains the agreement service, which implements Algorand's Byzantine Agreement protocol. This protocol allows participating accounts to quickly confirm blocks in a fork-safe manner, provided that sufficient account stake is correctly executing the protocol.
124+
- **node**: Integrates the components above and handles initialization and shutdown. It provides queries into these components.
150125

151126
### Daemon
152127

153-
Contains the two daemons which provide Algorand clients with services:
128+
Contains the two daemons that provide Algorand clients with services:
154129

155-
- `daemon/algod` holds the `algod` daemon, which implements a participating
156-
node. `algod` allows a node to participate in the agreement protocol,
157-
submit and confirm transactions, and view the state of the Algorand Ledger.
158-
- `daemon/algod/api` ([README](daemon/algod/api/README.md)) is the REST
159-
interface used for interactions with algod.
160-
- `daemon/kmd` ([README](daemon/kmd/README.md)) holds the `kmd` daemon. This
161-
daemon allows a node to sign transactions. Because `kmd` is separate from
162-
`algod`, `kmd` allows a user to sign transactions on an air-gapped computer.
130+
- **daemon/algod**: Holds the `algod` daemon, which implements a participating node. `algod` allows a node to participate in the agreement protocol, submit and confirm transactions, and view the state of the Algorand Ledger.
131+
- **daemon/algod/api** ([README](daemon/algod/api/README.md)): The REST interface used for interactions with `algod`.
132+
- **daemon/kmd** ([README](daemon/kmd/README.md)): Holds the `kmd` daemon, which allows a node to sign transactions. Since `kmd` is separate from `algod`, it enables a user to sign transactions on an air-gapped computer.
163133

164134
### Interfacing
165135

166-
Allows developers to interface with the Algorand system:
136+
Enables developers to interface with the Algorand system:
167137

168-
- `cmd` holds the primary commands defining entry points into the system.
169-
- `cmd/catchupsrv` ([README](cmd/catchupsrv/README.md)) is a tool to
170-
assist with processing historic blocks on a new node.
171-
- `libgoal` exports a Go interface useful for developers of Algorand clients.
172-
- `tools` ([README](tools/README.md)) various tools and utilities without a better place to go.
173-
- `tools/debug` holds secondary commands which assist developers during debugging.
174-
- `tools/misc` ([README](tools/misc/README.md)) small tools that are sometimes handy in a pinch.
138+
- **cmd**: Contains the primary commands defining entry points into the system.
139+
- **cmd/catchupsrv** ([README](cmd/catchupsrv/README.md)): A tool to assist with processing historic blocks on a new node.
140+
- **libgoal**: Exports a Go interface useful for developers of Algorand clients.
141+
- **tools** ([README](tools/README.md)): Various tools and utilities that don’t have a better place to go.
142+
- **tools/debug**: Holds secondary commands that assist developers during debugging.
143+
- **tools/misc** ([README](tools/misc/README.md)): Small tools that are handy in a pinch.
175144

176145
### Deployment
177-
Help Algorand developers deploy networks of their own:
178146

179-
- `nodecontrol`
180-
- `docker`
181-
- `commandandcontrol` ([README](test/commandandcontrol/README.md)) is a tool to
182-
automate a network of algod instances.
183-
- `components`
184-
- `netdeploy`
147+
Helps Algorand developers deploy networks of their own:
148+
149+
- **nodecontrol**
150+
- **docker**
151+
- **commandandcontrol** ([README](test/commandandcontrol/README.md)): A tool to automate a network of `algod` instances.
152+
- **components**
153+
- **netdeploy**
185154

186155
### Utilities
156+
187157
Provides utilities for the various components:
188158

189-
- `logging` is a wrapper around `logrus`.
190-
- `util` contains a variety of utilities, including a codec, a SQLite wrapper,
191-
a goroutine pool, a timer interface, node metrics, and more.
159+
- **logging**: A wrapper around `logrus`.
160+
- **util**: Contains a variety of utilities, including a codec, a SQLite wrapper, a goroutine pool, a timer interface, node metrics, and more.
192161

193162
### Test
194-
`test` ([README](test/README.md)) contains end-to-end tests and utilities for the above components.
195163

164+
- **test** ([README](test/README.md)): Contains end-to-end tests and utilities for the above components.
196165

197166
## License
167+
198168
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](COPYING)
199169

200-
Please see the [COPYING_FAQ](COPYING_FAQ) for details about how to apply our license.
170+
Please see the [COPYING_FAQ](COPYING_FAQ) for details on how to apply our license.
201171

202172
Copyright (C) 2019-2024, Algorand Inc.
203173

204-
[developer site url]: https://developer.algorand.org/

0 commit comments

Comments
 (0)