Skip to content

jinmannwong/fetchd

 
 

Repository files navigation

Fetch.ai fetchd Fork

This repository is the fork from the original fetchd. It contains Fetch.ai specific updates required for the test networks. For this reason it is versioned independantly. Please refer to the releases section for the compatiblity with upstream versions.

This code was originally from the cosmos/gaia repository and the majority of the codebase is the same as gaia.

Note: Requires Go 1.13+

Compatibility: Last merge from cosmos/gaia was 090c545347b03e59415a18107a0a279c703c8f40 (Jan 23, 2020)

Supported Systems

The supported systems are limited by the dlls created in go-cosmwasm. In particular, we only support MacOS and Linux. For linux, the default is to build for glibc, and we cross-compile with CentOS 7 to provide backwards compatibility for glibc 2.12+. This includes all known supported distributions using glibc (CentOS 7 uses 2.12, obsolete Debian Jessy uses 2.19).

As of 0.9.0 we support muslc Linux systems, in particular Alpine linux, which is popular in docker distributions. Note that we do not store the static muslc build in the repo, so you must compile this yourself, and pass -tags muslc. Please look at the Dockerfile for an example of how we build a static Go binary for muslc. (Or just use this Dockerfile for your production setup).

Stability

This is alpha software, do not run on a production system. Notably, we currently provide no migration path not even "dump state and restart" to move to future versions. At beta we will begin to offer migrations and better backwards compatibility guarantees.

With the v0.6.0 tag, we entered semver. That means anything with v0.6.x tags is compatible with each other, and everything with v0.7.x tags is compatible with each other. We will have a series of minor version updates prior to v1.0.0, where we offer strong backwards compatibility guarantees.

We are currently on v0.9 and targeting v0.10 for late July, at which point we will have feature freeze for the v1 tag and only perform needed bugfixes (which may be API breaking).

Thank you to all projects who have run this code in your testnets and given feedback to improve stability.

Encoding

We use standard cosmos-sdk encoding (amino) for all sdk Messages. However, the message body sent to all contracts, as well as the internal state is encoded using JSON. Cosmwasm allows arbitrary bytes with the contract itself responsible for decodng. For better UX, we often use json.RawMessage to contain these bytes, which enforces that it is valid json, but also give a much more readable interface. If you want to use another encoding in the contracts, that is a relatively minor change to fetchd but would currently require a fork. Please open in issue if this is important for your use case.

Quick Start

make install
make test

if you are using a linux without X or headless linux, look at this article or #31.

To set up a single node testnet, look at the deployment documentation.

If you want to deploy a whole cluster, look at the network scripts.

Dockerized

We provide a docker image to help with test setups. There are two modes to use it

Build: docker build -t fetchai/fetchd:latest . or pull from dockerhub

Dev server

Bring up a local node with a test account containing tokens

This is just designed for local testing/CI - do not use these scripts in production. Very likely you will assign tokens to accounts whose mnemonics are public on github.

docker volume rm -f fetchd_data

# pass password (one time) as env variable for setup, so we don't need to keep typing it
# add some addresses that you have private keys for (locally) to give them genesis funds
docker run --rm -it \
    -e PASSWORD=xxxxxxxxx \
    --mount type=volume,source=fetchd_data,target=/root \
    fetchai/fetchd:latest ./setup.sh cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6

# This will start both fetchd and fetchcli rest-server, only fetchcli output is shown on the screen
docker run --rm -it -p 26657:26657 -p 26656:26656 -p 1317:1317 \
    --mount type=volume,source=fetchd_data,target=/root \
    fetchai/fetchd:latest ./run_all.sh

# view fetchd logs in another shell
docker run --rm -it \
    --mount type=volume,source=fetchd_data,target=/root,readonly \
    fetchai/fetchd:latest ./logs.sh

CI

For CI, we want to generate a template one time and save to disk/repo. Then we can start a chain copying the initial state, but not modifying it. This lets us get the same, fresh start every time.

# Init chain and pass addresses so they are non-empty accounts
rm -rf ./template && mkdir ./template
docker run --rm -it \
    -e PASSWORD=xxxxxxxxx \
    --mount type=bind,source=$(pwd)/template,target=/root \
    fetchai/fetchd:latest ./setup.sh cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6

sudo chown -R $(id -u):$(id -g) ./template

# FIRST TIME
# bind to non-/root and pass an argument to run.sh to copy the template into /root
# we need fetchd_data volume mount not just for restart, but also to view logs
docker volume rm -f fetchd_data
docker run --rm -it -p 26657:26657 -p 26656:26656 -p 1317:1317 \
    --mount type=bind,source=$(pwd)/template,target=/template \
    --mount type=volume,source=fetchd_data,target=/root \
    fetchai/fetchd:latest ./run_all.sh /template

# RESTART CHAIN with existing state
docker run --rm -it -p 26657:26657 -p 26656:26656 -p 1317:1317 \
    --mount type=volume,source=fetchd_data,target=/root \
    fetchai/fetchd:latest ./run_all.sh

# view fetchd logs in another shell
docker run --rm -it \
    --mount type=volume,source=fetchd_data,target=/root,readonly \
    fetchai/fetchd:latest ./logs.sh

About

Fetch.ai fork of wasmd project

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 75.6%
  • Python 13.4%
  • Makefile 4.3%
  • HCL 3.6%
  • Shell 2.6%
  • Dockerfile 0.5%