https://github.com/chainpoint/chainpoint-core
https://github.com/chainpoint/chainpoint-core
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/chainpoint/chainpoint-core
- Owner: chainpoint
- License: agpl-3.0
- Created: 2019-02-06T21:20:05.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-11-01T14:59:14.000Z (over 3 years ago)
- Last Synced: 2024-06-19T05:56:46.965Z (almost 2 years ago)
- Language: Go
- Size: 31.5 MB
- Stars: 11
- Watchers: 8
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Chainpoint Core
[](https://www.gnu.org/licenses/agpl-3.0.en.html)
See [Chainpoint Start](https://github.com/chainpoint/chainpoint-start) for an overview of the Chainpoint Network.

Chainpoint Core runs as a node on a distributed network. Cores aggregate hashes received from Gateways, maintain the Chainpoint Calendar, and periodically anchor data to the Bitcoin blockchain.
Each Core has an integrated Lightning Node running [LND](https://github.com/lightningnetwork/lnd). Cores receive `anchor fee` payments from Gateways via Lightning. The default `anchor fee` is 2 [satoshis](). Core operators can set their anchor fee to adapt to changing market conditions and compete to earn fees from Gateways.
When joining the network, new Cores automatically open Lightning channels with the existing Cores. Each channel must have a minimum capacity of 1,000,000 satoshis. This provides a measure of Sybil resistance and helps ensure Cores have sufficient liquidity to receive Lightning payments from Gateways.
Once per hour, a Core is elected to anchor data to Bitcoin. As more Cores join the network, each Core anchors less frequently, thus reducing each Core’s cost of paying Bitcoin transaction fees.
You do not need to run Chainpoint Core to use the Chainpoint protocol. Chainpoint Core is for operators that want to participate in running the anchoring service, and earn fees from Gateways.
## Installing Chainpoint Core
### Requirements
#### Software
An Ubuntu or MacOS system with Git, Make, and BASH are required for operation. A bash script to install all other dependencies (docker, openssl, nodejs, yarn) can be run from `make install-deps`.
The following tcp ports need to be open:
- Web: 80, 443
- Lightning: 8080, 9735, 10009
- Tendermint: 26656, 26657
It _is_ possible to run Core from home, but you must have a static IP and have publicly forwarded the ports above.
#### Hardware
Chainpoint Core has been tested with a couple of different hardware configurations.
Minimum:
- `>= 4GB RAM`
- `>= 2 CPU Cores`
- `100+ GB SSD`
- `Public IPv4 address`
Recommended (high usage):
- `>= 8GB RAM`
- `>= 4 CPU Cores`
- `>= 500 GB SSD`
- `Public IPv4 address`
### Quick Start
To start up a Core node and connect to the Chainpoint Network:
#### Install Dependencies
```$bash
$ sudo apt-get install make git
$ git clone https://github.com/chainpoint/chainpoint-core.git
$ cd chainpoint-core
$ make install-deps # installs go and cleveldb
$ source ~/.bashrc # reload path after dependency installation
$ make install # compiles core binary
$ chainpoint-core # Run setup
```
If you wish to daemonize the service with systemd, the following
commands are available:
```
$ make install-daemon # install systemd if necessary
$ make start-daemon # start systemd daemon
$ make log-daemon # print daemon logs
```
By default the resulting binary will be placed in `~/go/bin`.
#### Configure Core
Before running the binary for the first time, ensure you have contacted Tierion with your public IP
so your traffic is allowed through the seed node's firewall.
```
$ ssh user@ #Log back into your server
$ chainpoint-core
██████╗██╗ ██╗ █████╗ ██╗███╗ ██╗██████╗ ██████╗ ██╗███╗ ██╗████████╗ ██████╗ ██████╗ ██████╗ ███████╗
██╔════╝██║ ██║██╔══██╗██║████╗ ██║██╔══██╗██╔═══██╗██║████╗ ██║╚══██╔══╝ ██╔════╝██╔═══██╗██╔══██╗██╔════╝
██║ ███████║███████║██║██╔██╗ ██║██████╔╝██║ ██║██║██╔██╗ ██║ ██║ ██║ ██║ ██║██████╔╝█████╗
██║ ██╔══██║██╔══██║██║██║╚██╗██║██╔═══╝ ██║ ██║██║██║╚██╗██║ ██║ ██║ ██║ ██║██╔══██╗██╔══╝
╚██████╗██║ ██║██║ ██║██║██║ ╚████║██║ ╚██████╔╝██║██║ ╚████║ ██║ ╚██████╗╚██████╔╝██║ ██║███████╗
╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝
? Will this Core use Bitcoin mainnet or testnet? testnet
? Enter your Core's Public IP Address: 3.17.78.45
```
#### Auto-Initialize Lightning
```
You will need at least 3000000 Satoshis (0.03 BTC) to join the Chainpoint Network!
Initializing Lightning wallet...
Create new address for wallet...
****************************************************
Lightning initialization has completed successfully.
****************************************************
LND Wallet Password: rjcOgYehDmthuurduuriAMsr
LND Wallet Seed: absorb behind drop safe like herp derp celery galaxy wait orient sign suit castle awake gadget pass pipe sudden ethics hill choose six orphan
LND Wallet Address: tb1qfvjr20txm464fxcr0n9d4j2gkr5w4xpl55kl6u
******************************************************
You should back up this information in a secure place.
******************************************************
Please fund your Lightning address with at least [staking requirement] Satoshis (0.0X BTC) to join the Chainpoint Network`
Chainpoint Core Setup Complete. Run with chainpoint-core -config ~/.chainpoint/core/core.conf
$ chainpoint-core -config ~/.chainpoint/core/core.conf
```
The staking requirement is determined by the number of cores on the Chainpoint Network multiplied by 1,000,000 satoshis.
If startup is successful, the log output will show the log message `Executed block` every minute after the binary connects to the Chainpoint Network, and going to `/status` in a browser will show the Core status in JSON format.
During startup, lnd and tendermint will initialize in separate background threads. During this time you may see errors or warnings related to `GetStatus` or `BlockSyncMonitor`; these can be ignored.
The process can be daemonized with systemd by running `make install-daemon && make start-daemon`.
Additionally, `make log-daemon` will use journald to parse the process logs and `make stop-daemon` will shut down the daemon.
### Joining another Network
By default, the init process will join either the Chainpoint Testnet or Mainnet, depending on user choice. However, peering with custom networks is also possible:
1. Specify peers by adding a comma-delimited list of Tendermint URIs, such as `peers=087186cd1d631c5e709c4afa15a1ce218c6a28c1@3.133.119.65:26656` to the .conf file in the config directory (by default `~/.chainpoint/core`)
2. Run `chainpoint-core -config ~/.chainpoint/core/core.conf` to start Core. In order to obtain permission to submit hashes to the network, your Core will automatically stake bitcoin by opening lightning channels with the existing network validators.
### Upgrade
Core can be upgraded by pulling the latest main branch from this repository and recompiling with `make install`.
### Troubleshooting
If setup fails and the Lightning wallet hasn't yet been generated and funded, run `rm -rf ~/.chainpoint/core`, then run `chainpoint-core` again.
To reset the core chain state if the Lightning wallet has already been generated and funded, run `make clean-tendermint`, then `chainpoint-core` again.
For further help, [submit an issue](https://github.com/chainpoint/chainpoint-core/issues) to the Chainpoint Core repo.
### Configuration
Running chainpoint-core for the first time will perform the configuration process for you. However, you may wish to setup a custom Core or Network. To do this, you will need to set up a configuration and secrets (lightning wallet) before running.
Chainpoint Core currently uses a config file, which by default is at `~/.chainpoint/core/core.conf`. Running `chainpoint-core` without arguments for the first time will initialize this file.
Modifying these settings may be invaluable for setting up a private Chainpoint Network with different parameters, for example by configuring more frequent bitcoin anchoring.
A full list of configuration parameters is located at abci/config.go or by running `chainpoint-core -h`. |
## Development
We encourage anyone interested in contributing to fork this repo and submit a pull-request with desired changes. Please be sure to use gofmt (go) to check/fix any style issues.
### Build
`make build` will build a production application, provided `go` has been installed via install-deps. `make build-dev` will compile a core instance
with tendermint and lightning node geared toward production.
### Run
After running `chainpoint-core` with test parameters, API will be accessible by default on port 80, while Tendermint is accessible on ports 26656-26657.
### Documentation
A description of the Chainpoint Network is available in the [chainpoint-start](https://github.com/chainpoint/chainpoint-start) repository.
The README for the Core application in this repo is available [here](https://github.com/chainpoint/chainpoint-core/blob/master/README.md).
## License
This is Open Source software released under [AGPLv3](./LICENSE)