This repo contains the Entropy blockchain node, the Threshold Signature Server (evaluates programs, stores threshold keyshares, and coordinates threshold-signing), and misc. testing utilities for the network.
Our blockchain node is written with Substrate using Substrate's node template.
- High level introduction to Entropy: docs.entropy.xyz
- API documentation for the
entropy-tss
crate: docs.rs/entropy-tss
You can also build the API docs yourself:
- Install the dependencies
- Invoke
cargo doc --no-deps --open`
You can begin using this repository in a few different ways. This section describes a few of them.
This repository provides a Docker Compose configuration that spins up a simple, two-node development blockchain. We provide Docker images that you can pull, or you can build from source.
Do this to use the Docker Compose configuration:
- Install Docker. Make sure you also have Docker Compose. Confirm this by running:
docker compose version
- Bring up the configuration:
docker compose up --detach # Detaching is optional.
- If you need to communicate directly with the threshold signature scheme server from your Docker host machine, you may also need to include its address in your local
/etc/hosts
file:echo "127.0.0.1 alice-tss-server bob-tss-server charlie-tss-server" | sudo tee -a /etc/hosts
- Confirm your local development network is up and running. You can:
- look at server logs:
docker compose logs --follow # Following is also optional.
- use the Entropy Test CLI to interact with the locally running network:
cargo run -p entropy-test-cli -- --chain-endpoint="ws://127.0.0.1:9944" status
- look at server logs:
Dependencies you will need to build locally:
- Install Rust
- Install Substrate dependencies
- Add Rust components
rustup target add wasm32-unknown-unknown rustup component add rust-src
- Install
wasm-pack
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
Build the chain node and threshold signature scheme (TSS) server binaries by running:
cargo build --release
Spinning up a local Entropy node for development and basic testing can be done with:
cargo run --release -p entropy -- --dev --rpc-external
Once built, the binary can also be run directly with:
./target/release/entropy --dev --rpc-external
Optionally, you can also run it with detailed logging:
RUST_BACKTRACE=1 ./target/release/entropy -ldebug --dev --rpc-external
Testing is done via cargo test
.
An Entropy node binary is required in order to succesfully run the server tests.
You can manually provide a binary using the ENTROPY_NODE
environment variable.
ENTROPY_NODE="/path/to/entropy" cargo test -p entropy-tss
Or, if no path is specified using ENTROPY_NODE
, then the test suite will search in the target
folder for a binary. A debug or release binary will be chosen based on how the test suite is built.
For example, running cargo test -p entropy-tss --release
will expect a release binary of the Entropy
node, which you can build in the following way: cargo build -p entropy --release
.
To run individual tests you can specify the test in the following way:
cargo test -p entropy-tss --features unsafe -- test_sign_tx_no_chain --nocapture
Once the node template is running locally, you can connect it with Polkadot-JS Apps front-end to interact with your chain. Click here connecting the Apps to your local node template.
A simple command line interface client is included in this repository for test purposes. This can be used with both the local docker-compose network and network deployments.
It is however only intended for use with test networks and has no secure private key storage. For a fully featured command line client see entropyxyz/cli.
- Keys for internal devnet use only (used in tests and for the local network built with docker-compose). These are not secure, they are here for convenience, do not use them for anything real.
- Secret phrase
alarm mutual concert decrease hurry invest culture survey diagram crash snap click
is account: - Network ID/version:
substrate
- Secret seed:
0x29b55504652cedded9ce0ee1f5a25b328ae6c6e97827f84eee6315d0f44816d8
- Public key (hex):
0xe0543c102def9f6ef0e8b8ffa31aa259167a9391566929fd718a1ccdaabdb876
- Account ID:
0xe0543c102def9f6ef0e8b8ffa31aa259167a9391566929fd718a1ccdaabdb876
- SS58 Address:
5H8qc7f4mXFY16NBWSB9qkc6pTks98HdVuoQTs1aova5fRtN
- Secret phrase
where sight patient orphan general short empower hope party hurt month voice
is account: - Network ID/version:
substrate
- Secret seed:
0xb0b5348db82db32d10a37b578e4c6242e148f14648661dccf8b3002fafa72cdd
- Public key (hex):
0x2a8200850770290c7ea3b50a8ff64c6761c882ff8393dc95fccb5d1475eff17f
- Account ID:
0x2a8200850770290c7ea3b50a8ff64c6761c882ff8393dc95fccb5d1475eff17f
- SS58 Address:
5D2SVCUkK5FgFiBwPTJuTN65J6fACSEoZrL41thZBAycwnQV
- Secret phrase
lake carry still awful point mention bike category tornado plate brass lock
is account: - Network ID/version: substrate
- Secret seed:
0xb9085925e9452f3e465b51a883a0dbb2c13d5610b6f8f7e7f206f7f044daa419
- Public key (hex):
0x14d223daeec68671f07298c66c9458980a48bb89fb8a85d5df31131acad8d611
- Account ID:
0x14d223daeec68671f07298c66c9458980a48bb89fb8a85d5df31131acad8d611
- SS58 Address:
5CY1EquGdAiiJJ28FDiT8EB1C3gnMixtPn4pbSggFF6nUat7
Everytime a change to the chain's interface happens, metadata needs to be pulled. You'll need to install Subxt using cargo install subxt-cli
. Then run a development chain and then invoke the ./scripts/pull_entropy_metadata.sh
script.
To speed up running tests, some tests use pre-generated keyshares rather than running a distributed key generation during the test. If you need to regenerate these keyshares because something has changed in either Synedrion or the identities of the test TS servers, you can run:
./scripts/create-test-keyshares.sh`
from the project root. For an explanation of how the test keyshare sets are structured, see create-test-keyshares
.
Need help with something not necessarily related to entropy-core
?
Head over to the Entropy Community repository for support or to raise a ticket.
For the most part, the code in this repository is licensed under AGPL-3.0.
There are some exceptions however:
- The original code of the
kvdb
crate comes from Alexar'stofnd
project, which is licensed underMIT
. - The original code of the
runtime
andnode
crates come from Parity'sSubstrate
project, which is licensed underGPL-3.0-or-later WITH Classpath-exception-2.0
. - The original code of the
transaction-pause
pallet comes from theAcala
project, which is is licensed underGPL-3.0-or-later WITH Classpath-exception-2.0
.
Modifications made by Entropy to these crates are licensed under AGPL-3.0
.