diff --git a/.env b/.env new file mode 100644 index 0000000..c512695 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +COMPOSE_PROJECT_NAME=localterra +TERRA_VERSION=2.4.0 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..d926faa --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,73 @@ +name: docker-build + +on: + pull_request: + branches: + - main + push: + branches: + - main + tags: + - 'v*' + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout + uses: actions/checkout@v3 + + # https://docs.docker.com/build/ci/github-actions/multi-platform/ + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + # Workaround: https://github.com/docker/build-push-action/issues/461 + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to the github container registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + + # https://github.com/docker/login-action + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + + github-token: ${{ secrets.GITHUB_TOKEN }} + images: | + ghcr.io/${{ github.repository }} + terraformlabs/localterra + tags: | + type=sha + type=edge,branch=test + type=semver,pattern={{tag}} + type=semver,pattern={{version}} + type=raw,value=latest,event=branch,enable=${{ github.ref == format('refs/heads/{0}', 'main') }} + type=raw,value=classic,event=branch,enable=${{ github.ref == format('refs/heads/{0}', 'classic') }} + + - name: Build docker image + uses: docker/build-push-action@v3 + with: + push: ${{ github.event_name != 'pull_request' }} + file: Dockerfile + platforms: linux/amd64 + tags: ${{ env.DOCKER_METADATA_OUTPUT_TAGS }} + labels: ${{ env.DOCKER_METADATA_OUTPUT_LABELS }} + + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..f7849c1 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,35 @@ +name: Release + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' # Push events to matching v*, i.e. v1.0, v20.15.10 + - 'v[0-9]+.[0-9]+.[0-9]+-rc*' # Push events to matching v*, i.e. v1.0-rc1, v20.15.10-rc5 + +jobs: + artifacts: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set version tag + run: echo "VERSION=$(echo ${{github.ref_name}} | sed 's/^v//')" >> $GITHUB_ENV + + - name: Create build directory + run: mkdir -p build/release + + - name: Build Changelog + id: github_release + uses: mikepenz/release-changelog-builder-action@v3 + + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + draft: true + tag_name: ${{github.ref_name}} + body: ${{steps.github_release.outputs.changelog}} + files: | + build/release/* diff --git a/.gitignore b/.gitignore index f499975..5d518a0 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,3 @@ dependency-graph.png node_modules/ logs/ -data/ -config/addrbook.json -config/write-file-atomic* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5b7df00 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +ARG TERRA_VERSION=2.3.1 + +FROM ghcr.io/terra-money/core:${TERRA_VERSION} + +COPY ./terra/genesis.json \ + ./terra/priv_validator_key.json \ + /app/config/ + +RUN mkdir -p /app/data && \ + echo '{"height": "0","round": 0,"step": 0}' > /app/data/priv_validator_state.json + +CMD terrad start \ + --api.enable true \ + --api.enabled-unsafe-cors true \ + --api.swagger true \ + --home /app \ + --minimum-gas-prices 0.015uluna \ + --moniker localterra \ + --p2p.upnp true \ + --rpc.laddr tcp://0.0.0.0:26657 \ No newline at end of file diff --git a/compose-fcd.yml b/compose-fcd.yml new file mode 100644 index 0000000..46f2e73 --- /dev/null +++ b/compose-fcd.yml @@ -0,0 +1,66 @@ +version: "3.8" + +x-fcd-env: &fcd-env + - CHAIN_ID=localterra + - LCD_URI=http://terrad:1317 + - RPC_URI=http://terrad:26657 + - USE_LOG_FILE=true + - TYPEORM_CONNECTION=postgres + - TYPEORM_HOST=postgres + - TYPEORM_USERNAME=terra + - TYPEORM_PASSWORD=abc123 + - TYPEORM_DATABASE=fcd + - TYPEORM_SYNCHRONIZE=true + - TYPEORM_LOGGING=false + - TYPEORM_ENTITIES=src/orm/*Entity.ts + - LEGACY_NETWORK=false + +services: + terrad: + extends: + file: compose-rpc.yml + service: terrad + + postgres: + image: postgres:14-alpine + hostname: postgres + environment: + POSTGRES_USER: terra + POSTGRES_PASSWORD: abc123 + volumes: + - ./initdb.d:/docker-entrypoint-initdb.d + - pgdata:/var/lib/postgresql/data + networks: + - default + ports: + - 5433:5432 + + fcd_collector: + image: ghcr.io/terra-money/fcd:${TERRA_VERSION} + command: collector + hostname: fcd_collector + restart: unless-stopped + environment: *fcd-env + volumes: + - ./logs:/app/logs + networks: + - default + + fcd_api: + image: ghcr.io/terra-money/fcd:${TERRA_VERSION} + command: start + hostname: fcd_api + environment: *fcd-env + volumes: + - ./logs:/app/logs + networks: + - default + ports: + - 3060:3060 + +volumes: + terra: + pgdata: + +networks: + default: diff --git a/compose-rpc.yml b/compose-rpc.yml new file mode 100644 index 0000000..97df613 --- /dev/null +++ b/compose-rpc.yml @@ -0,0 +1,27 @@ +version: "3.8" + +services: + terrad: + build: + context: . + dockerfile: Dockerfile + args: + TERRA_VERSION: ${TERRA_VERSION} + image: ghcr.io/terra-money/localterra:${TERRA_VERSION} + hostname: terrad + pull_policy: always + volumes: + - terra:/app + networks: + - default + ports: + - "1317:1317" + - "9090:9090" + - "9091:9091" + - "26657:26657" + +volumes: + terra: + +networks: + default: diff --git a/config/app.toml b/config/app.toml deleted file mode 100644 index 28b1371..0000000 --- a/config/app.toml +++ /dev/null @@ -1,203 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -############################################################################### -### Base Configuration ### -############################################################################### - -# The minimum gas prices a validator is willing to accept for processing a -# transaction. A transaction's fees must meet the minimum of any denomination -# specified in this config (e.g. 0.25token1;0.0001token2). -minimum-gas-prices = "0.15uluna" - -# default: the last 100 states are kept in addition to every 500th state; pruning at 10 block intervals -# nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node) -# everything: all saved states will be deleted, storing only the current and previous state; pruning at 10 block intervals -# custom: allow pruning options to be manually specified through 'pruning-keep-recent', 'pruning-keep-every', and 'pruning-interval' -pruning = "default" - -# These are applied if and only if the pruning strategy is custom. -pruning-keep-recent = "0" -pruning-keep-every = "0" -pruning-interval = "0" - -# HaltHeight contains a non-zero block height at which a node will gracefully -# halt and shutdown that can be used to assist upgrades and testing. -# -# Note: Commitment of state will be attempted on the corresponding block. -halt-height = 0 - -# HaltTime contains a non-zero minimum block time (in Unix seconds) at which -# a node will gracefully halt and shutdown that can be used to assist upgrades -# and testing. -# -# Note: Commitment of state will be attempted on the corresponding block. -halt-time = 0 - -# MinRetainBlocks defines the minimum block height offset from the current -# block being committed, such that all blocks past this offset are pruned -# from Tendermint. It is used as part of the process of determining the -# ResponseCommit.RetainHeight value during ABCI Commit. A value of 0 indicates -# that no blocks should be pruned. -# -# This configuration value is only responsible for pruning Tendermint blocks. -# It has no bearing on application state pruning which is determined by the -# "pruning-*" configurations. -# -# Note: Tendermint block pruning is dependant on this parameter in conunction -# with the unbonding (safety threshold) period, state pruning and state sync -# snapshot parameters to determine the correct minimum value of -# ResponseCommit.RetainHeight. -min-retain-blocks = 0 - -# InterBlockCache enables inter-block caching. -inter-block-cache = true - -# IndexEvents defines the set of events in the form {eventType}.{attributeKey}, -# which informs Tendermint what to index. If empty, all events will be indexed. -# -# Example: -# ["message.sender", "message.recipient"] -index-events = [] - -# IavlCacheSize set the size of the iavl tree cache. -# Default cache size is 50mb. -iavl-cache-size = 781250 - -############################################################################### -### Telemetry Configuration ### -############################################################################### - -[telemetry] - -# Prefixed with keys to separate services. -service-name = "" - -# Enabled enables the application telemetry functionality. When enabled, -# an in-memory sink is also enabled by default. Operators may also enabled -# other sinks such as Prometheus. -enabled = false - -# Enable prefixing gauge values with hostname. -enable-hostname = false - -# Enable adding hostname to labels. -enable-hostname-label = false - -# Enable adding service to labels. -enable-service-label = false - -# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. -prometheus-retention-time = 0 - -# GlobalLabels defines a global set of name/value label tuples applied to all -# metrics emitted using the wrapper functions defined in telemetry package. -# -# Example: -# [["chain_id", "cosmoshub-1"]] -global-labels = [ -] - -############################################################################### -### API Configuration ### -############################################################################### - -[api] - -# Enable defines if the API server should be enabled. -enable = true - -# Swagger defines if swagger documentation should automatically be registered. -swagger = true - -# Address defines the API server to listen on. -address = "tcp://0.0.0.0:1317" - -# MaxOpenConnections defines the number of maximum open connections. -max-open-connections = 1000 - -# RPCReadTimeout defines the Tendermint RPC read timeout (in seconds). -rpc-read-timeout = 10 - -# RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds). -rpc-write-timeout = 0 - -# RPCMaxBodyBytes defines the Tendermint maximum response body (in bytes). -rpc-max-body-bytes = 1000000 - -# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). -enabled-unsafe-cors = true - -############################################################################### -### Rosetta Configuration ### -############################################################################### - -[rosetta] - -# Enable defines if the Rosetta API server should be enabled. -enable = false - -# Address defines the Rosetta API server to listen on. -address = ":8080" - -# Network defines the name of the blockchain that will be returned by Rosetta. -blockchain = "app" - -# Network defines the name of the network that will be returned by Rosetta. -network = "network" - -# Retries defines the number of retries when connecting to the node before failing. -retries = 3 - -# Offline defines if Rosetta server should run in offline mode. -offline = false - -############################################################################### -### gRPC Configuration ### -############################################################################### - -[grpc] - -# Enable defines if the gRPC server should be enabled. -enable = true - -# Address defines the gRPC server address to bind to. -address = "0.0.0.0:9090" - -############################################################################### -### gRPC Web Configuration ### -############################################################################### - -[grpc-web] - -# GRPCWebEnable defines if the gRPC-web should be enabled. -# NOTE: gRPC must also be enabled, otherwise, this configuration is a no-op. -enable = true - -# Address defines the gRPC-web server address to bind to. -address = "0.0.0.0:9091" - -# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). -enable-unsafe-cors = true - -############################################################################### -### State Sync Configuration ### -############################################################################### - -# State sync snapshots allow other nodes to rapidly join the network without replaying historical -# blocks, instead downloading and applying a snapshot of the application state at a given height. -[state-sync] - -# snapshot-interval specifies the block interval at which local state sync snapshots are -# taken (0 to disable). Must be a multiple of pruning-keep-every. -snapshot-interval = 0 - -# snapshot-keep-recent specifies the number of recent snapshots to keep and serve (0 to keep all). -snapshot-keep-recent = 2 - -[wasm] -# This is the maximum sdk gas (wasm and storage) that we allow for any x/wasm "smart" queries -query_gas_limit = 300000 -# This is the number of wasm vm instances we keep cached in memory for speed-up -# Warning: this is currently unstable and may lead to crashes, best to keep for 0 unless testing locally -lru_size = 0 diff --git a/config/client.toml b/config/client.toml deleted file mode 100644 index 2dc6825..0000000 --- a/config/client.toml +++ /dev/null @@ -1,17 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -############################################################################### -### Client Configuration ### -############################################################################### - -# The network chain ID -chain-id = "localterra" -# The keyring's backend, where the keys are stored (os|file|kwallet|pass|test|memory) -keyring-backend = "os" -# CLI output format (text|json) -output = "text" -# : to Tendermint RPC interface for this chain -node = "tcp://localhost:26657" -# Transaction broadcasting mode (sync|async|block) -broadcast-mode = "sync" diff --git a/config/config.toml b/config/config.toml deleted file mode 100644 index 7a1f9a1..0000000 --- a/config/config.toml +++ /dev/null @@ -1,428 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -# NOTE: Any path below can be absolute (e.g. "/var/myawesomeapp/data") or -# relative to the home directory (e.g. "data"). The home directory is -# "$HOME/.tendermint" by default, but could be changed via $TMHOME env variable -# or --home cmd flag. - -####################################################################### -### Main Base Config Options ### -####################################################################### - -# TCP or UNIX socket address of the ABCI application, -# or the name of an ABCI application compiled in with the Tendermint binary -proxy_app = "tcp://127.0.0.1:26658" - -# A custom human readable name for this node -moniker = "localterra" - -# If this node is many blocks behind the tip of the chain, FastSync -# allows them to catchup quickly by downloading blocks in parallel -# and verifying their commits -fast_sync = true - -# Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb -# * goleveldb (github.com/syndtr/goleveldb - most popular implementation) -# - pure go -# - stable -# * cleveldb (uses levigo wrapper) -# - fast -# - requires gcc -# - use cleveldb build tag (go build -tags cleveldb) -# * boltdb (uses etcd's fork of bolt - github.com/etcd-io/bbolt) -# - EXPERIMENTAL -# - may be faster is some use-cases (random reads - indexer) -# - use boltdb build tag (go build -tags boltdb) -# * rocksdb (uses github.com/tecbot/gorocksdb) -# - EXPERIMENTAL -# - requires gcc -# - use rocksdb build tag (go build -tags rocksdb) -# * badgerdb (uses github.com/dgraph-io/badger) -# - EXPERIMENTAL -# - use badgerdb build tag (go build -tags badgerdb) -db_backend = "goleveldb" - -# Database directory -db_dir = "data" - -# Output level for logging, including package level options -log_level = "info" - -# Output format: 'plain' (colored text) or 'json' -log_format = "plain" - -##### additional base config options ##### - -# Path to the JSON file containing the initial validator set and other meta data -genesis_file = "config/genesis.json" - -# Path to the JSON file containing the private key to use as a validator in the consensus protocol -priv_validator_key_file = "config/priv_validator_key.json" - -# Path to the JSON file containing the last sign state of a validator -priv_validator_state_file = "data/priv_validator_state.json" - -# TCP or UNIX socket address for Tendermint to listen on for -# connections from an external PrivValidator process -priv_validator_laddr = "" - -# Path to the JSON file containing the private key to use for node authentication in the p2p protocol -node_key_file = "config/node_key.json" - -# Mechanism to connect to the ABCI application: socket | grpc -abci = "socket" - -# If true, query the ABCI app on connecting to a new peer -# so the app can decide if we should keep the connection or not -filter_peers = false - - -####################################################################### -### Advanced Configuration Options ### -####################################################################### - -####################################################### -### RPC Server Configuration Options ### -####################################################### -[rpc] - -# TCP or UNIX socket address for the RPC server to listen on -laddr = "tcp://0.0.0.0:26657" - -# A list of origins a cross-domain request can be executed from -# Default value '[]' disables cors support -# Use '["*"]' to allow any origin -cors_allowed_origins = [] - -# A list of methods the client is allowed to use with cross-domain requests -cors_allowed_methods = ["HEAD", "GET", "POST", ] - -# A list of non simple headers the client is allowed to use with cross-domain requests -cors_allowed_headers = ["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time", ] - -# TCP or UNIX socket address for the gRPC server to listen on -# NOTE: This server only supports /broadcast_tx_commit -grpc_laddr = "" - -# Maximum number of simultaneous connections. -# Does not include RPC (HTTP&WebSocket) connections. See max_open_connections -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files} -# 1024 - 40 - 10 - 50 = 924 = ~900 -grpc_max_open_connections = 900 - -# Activate unsafe RPC commands like /dial_seeds and /unsafe_flush_mempool -unsafe = false - -# Maximum number of simultaneous connections (including WebSocket). -# Does not include gRPC connections. See grpc_max_open_connections -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files} -# 1024 - 40 - 10 - 50 = 924 = ~900 -max_open_connections = 900 - -# Maximum number of unique clientIDs that can /subscribe -# If you're using /broadcast_tx_commit, set to the estimated maximum number -# of broadcast_tx_commit calls per block. -max_subscription_clients = 100 - -# Maximum number of unique queries a given client can /subscribe to -# If you're using GRPC (or Local RPC client) and /broadcast_tx_commit, set to -# the estimated # maximum number of broadcast_tx_commit calls per block. -max_subscriptions_per_client = 5 - -# Experimental parameter to specify the maximum number of events a node will -# buffer, per subscription, before returning an error and closing the -# subscription. Must be set to at least 100, but higher values will accommodate -# higher event throughput rates (and will use more memory). -experimental_subscription_buffer_size = 200 - -# Experimental parameter to specify the maximum number of RPC responses that -# can be buffered per WebSocket client. If clients cannot read from the -# WebSocket endpoint fast enough, they will be disconnected, so increasing this -# parameter may reduce the chances of them being disconnected (but will cause -# the node to use more memory). -# -# Must be at least the same as "experimental_subscription_buffer_size", -# otherwise connections could be dropped unnecessarily. This value should -# ideally be somewhat higher than "experimental_subscription_buffer_size" to -# accommodate non-subscription-related RPC responses. -experimental_websocket_write_buffer_size = 200 - -# If a WebSocket client cannot read fast enough, at present we may -# silently drop events instead of generating an error or disconnecting the -# client. -# -# Enabling this experimental parameter will cause the WebSocket connection to -# be closed instead if it cannot read fast enough, allowing for greater -# predictability in subscription behaviour. -experimental_close_on_slow_client = false - -# How long to wait for a tx to be committed during /broadcast_tx_commit. -# WARNING: Using a value larger than 10s will result in increasing the -# global HTTP write timeout, which applies to all connections and endpoints. -# See https://github.com/tendermint/tendermint/issues/3435 -timeout_broadcast_tx_commit = "30s" - -# Maximum size of request body, in bytes -max_body_bytes = 1000000 - -# Maximum size of request header, in bytes -max_header_bytes = 1048576 - -# The path to a file containing certificate that is used to create the HTTPS server. -# Might be either absolute path or path related to Tendermint's config directory. -# If the certificate is signed by a certificate authority, -# the certFile should be the concatenation of the server's certificate, any intermediates, -# and the CA's certificate. -# NOTE: both tls_cert_file and tls_key_file must be present for Tendermint to create HTTPS server. -# Otherwise, HTTP server is run. -tls_cert_file = "" - -# The path to a file containing matching private key that is used to create the HTTPS server. -# Might be either absolute path or path related to Tendermint's config directory. -# NOTE: both tls-cert-file and tls-key-file must be present for Tendermint to create HTTPS server. -# Otherwise, HTTP server is run. -tls_key_file = "" - -# pprof listen address (https://golang.org/pkg/net/http/pprof) -pprof_laddr = "localhost:6060" - -####################################################### -### P2P Configuration Options ### -####################################################### -[p2p] - -# Address to listen for incoming connections -laddr = "tcp://0.0.0.0:26656" - -# Address to advertise to peers for them to dial -# If empty, will use the same port as the laddr, -# and will introspect on the listener or use UPnP -# to figure out the address. ip and port are required -# example: 159.89.10.97:26656 -external_address = "" - -# Comma separated list of seed nodes to connect to -seeds = "" - -# Comma separated list of nodes to keep persistent connections to -persistent_peers = "" - -# UPNP port forwarding -upnp = false - -# Path to address book -addr_book_file = "config/addrbook.json" - -# Set true for strict address routability rules -# Set false for private or local networks -addr_book_strict = true - -# Maximum number of inbound peers -max_num_inbound_peers = 40 - -# Maximum number of outbound peers to connect to, excluding persistent peers -max_num_outbound_peers = 10 - -# List of node IDs, to which a connection will be (re)established ignoring any existing limits -unconditional_peer_ids = "" - -# Maximum pause when redialing a persistent peer (if zero, exponential backoff is used) -persistent_peers_max_dial_period = "0s" - -# Time to wait before flushing messages out on the connection -flush_throttle_timeout = "100ms" - -# Maximum size of a message packet payload, in bytes -max_packet_msg_payload_size = 1024 - -# Rate at which packets can be sent, in bytes/second -send_rate = 5120000 - -# Rate at which packets can be received, in bytes/second -recv_rate = 5120000 - -# Set true to enable the peer-exchange reactor -pex = true - -# Seed mode, in which node constantly crawls the network and looks for -# peers. If another node asks it for addresses, it responds and disconnects. -# -# Does not work if the peer-exchange reactor is disabled. -seed_mode = false - -# Comma separated list of peer IDs to keep private (will not be gossiped to other peers) -private_peer_ids = "" - -# Toggle to disable guard against peers connecting from the same ip. -allow_duplicate_ip = false - -# Peer connection configuration. -handshake_timeout = "20s" -dial_timeout = "3s" - -####################################################### -### Mempool Configuration Option ### -####################################################### -[mempool] - -recheck = true -broadcast = true -wal_dir = "" - -# Maximum number of transactions in the mempool -size = 5000 - -# Limit the total size of all txs in the mempool. -# This only accounts for raw transactions (e.g. given 1MB transactions and -# max_txs_bytes=5MB, mempool will only accept 5 transactions). -max_txs_bytes = 1073741824 - -# Size of the cache (used to filter transactions we saw earlier) in transactions -cache_size = 10000 - -# Do not remove invalid transactions from the cache (default: false) -# Set to true if it's not possible for any invalid transaction to become valid -# again in the future. -keep-invalid-txs-in-cache = false - -# Maximum size of a single transaction. -# NOTE: the max size of a tx transmitted over the network is {max_tx_bytes}. -max_tx_bytes = 1048576 - -# Maximum size of a batch of transactions to send to a peer -# Including space needed by encoding (one varint per transaction). -# XXX: Unused due to https://github.com/tendermint/tendermint/issues/5796 -max_batch_bytes = 0 - -####################################################### -### State Sync Configuration Options ### -####################################################### -[statesync] -# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine -# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in -# the network to take and serve state machine snapshots. State sync is not attempted if the node -# has any local state (LastBlockHeight > 0). The node will have a truncated block history, -# starting from the height of the snapshot. -enable = false - -# RPC servers (comma-separated) for light client verification of the synced state machine and -# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding -# header hash obtained from a trusted source, and a period during which validators can be trusted. -# -# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2 -# weeks) during which they can be financially punished (slashed) for misbehavior. -rpc_servers = "" -trust_height = 0 -trust_hash = "" -trust_period = "168h0m0s" - -# Time to spend discovering snapshots before initiating a restore. -discovery_time = "15s" - -# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp). -# Will create a new, randomly named directory within, and remove it when done. -temp_dir = "" - -# The timeout duration before re-requesting a chunk, possibly from a different -# peer (default: 1 minute). -chunk_request_timeout = "10s" - -# The number of concurrent chunk fetchers to run (default: 1). -chunk_fetchers = "4" - -####################################################### -### Fast Sync Configuration Connections ### -####################################################### -[fastsync] - -# Fast Sync version to use: -# 1) "v0" (default) - the legacy fast sync implementation -# 2) "v1" - refactor of v0 version for better testability -# 2) "v2" - complete redesign of v0, optimized for testability & readability -version = "v0" - -####################################################### -### Consensus Configuration Options ### -####################################################### -[consensus] - -wal_file = "data/cs.wal/wal" - -# How long we wait for a proposal block before prevoting nil -timeout_propose = "3s" -# How much timeout_propose increases with each round -timeout_propose_delta = "500ms" -# How long we wait after receiving +2/3 prevotes for “anything” (ie. not a single block or nil) -timeout_prevote = "1s" -# How much the timeout_prevote increases with each round -timeout_prevote_delta = "500ms" -# How long we wait after receiving +2/3 precommits for “anything” (ie. not a single block or nil) -timeout_precommit = "1s" -# How much the timeout_precommit increases with each round -timeout_precommit_delta = "500ms" -# How long we wait after committing a block, before starting on the new -# height (this gives us a chance to receive some more precommits, even -# though we already have +2/3). -timeout_commit = "5s" - -# How many blocks to look back to check existence of the node's consensus votes before joining consensus -# When non-zero, the node will panic upon restart -# if the same consensus key was used to sign {double_sign_check_height} last blocks. -# So, validators should stop the state machine, wait for some blocks, and then restart the state machine to avoid panic. -double_sign_check_height = 0 - -# Make progress as soon as we have all the precommits (as if TimeoutCommit = 0) -skip_timeout_commit = false - -# EmptyBlocks mode and possible interval between empty blocks -create_empty_blocks = true -create_empty_blocks_interval = "0s" - -# Reactor sleep duration parameters -peer_gossip_sleep_duration = "100ms" -peer_query_maj23_sleep_duration = "2s" - -####################################################### -### Transaction Indexer Configuration Options ### -####################################################### -[tx_index] - -# What indexer to use for transactions -# -# The application will set which txs to index. In some cases a node operator will be able -# to decide which txs to index based on configuration set in the application. -# -# Options: -# 1) "null" -# 2) "kv" (default) - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend). -# - When "kv" is chosen "tx.height" and "tx.hash" will always be indexed. -indexer = "kv" - -####################################################### -### Instrumentation Configuration Options ### -####################################################### -[instrumentation] - -# When true, Prometheus metrics are served under /metrics on -# PrometheusListenAddr. -# Check out the documentation for the list of available metrics. -prometheus = false - -# Address to listen for Prometheus collector(s) connections -prometheus_listen_addr = ":26660" - -# Maximum number of simultaneous connections. -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -max_open_connections = 3 - -# Instrumentation namespace -namespace = "tendermint" diff --git a/config/node_key.json b/config/node_key.json deleted file mode 100644 index 27ec69f..0000000 --- a/config/node_key.json +++ /dev/null @@ -1 +0,0 @@ -{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"xkHT1nM10OR4WLbdZNxQzxS5n2XbEUQhrEGS9DSpiS55fPkIkwVyvEqz0Auzv2S9ZcnoVwwAvVjg2uOfy/dlVw=="}} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index c033b1d..54d403d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,62 +1,37 @@ -version: "3" - services: terrad: - image: terramoney/localterra-core:2.0.1 - #pull_policy: always - volumes: - - ./config:/root/.terra/config - - ./entrypoint.sh:/entrypoint.sh - networks: - - terra - ports: - - "26657:26657" - - "1317:1317" - - "9090:9090" - - "9091:9091" - entrypoint: /entrypoint.sh - command: terrad start + extends: + file: compose-rpc.yml + service: terrad + postgres: - image: postgres:13 - volumes: - - ./init.sql:/docker-entrypoint-initdb.d/init.sql - networks: - - terra - environment: - POSTGRES_USER: dev - POSTGRES_PASSWORD: dev - # redis: - # image: redis:latest - # networks: - # - terra - # ports: - # - "6379:6379" + extends: + file: compose-fcd.yml + service: postgres + fcd-collector: - image: terramoney/fcd:2.0.6 - depends_on: - - terrad - - postgres - volumes: - - ./logs:/app/logs - networks: - - terra - env_file: fcd.env - command: collector - restart: unless-stopped + extends: + file: compose-fcd.yml + service: fcd-collector + fcd-api: - image: terramoney/fcd:2.0.6 - depends_on: - - terrad - - postgres - volumes: - - ./logs:/app/logs - networks: - - terra - ports: - - 3060:3060 - env_file: fcd.env - command: start + extends: + file: compose-fcd.yml + service: fcd-api -networks: + api-collector: + extends: + file: compose-api.yml + service: fcd-collector + + api: + extends: + file: compose-api.yml + service: fcd-api + +volumes: terra: - driver: bridge + pgdata: + +networks: + default: diff --git a/entrypoint.sh b/entrypoint.sh deleted file mode 100755 index 7f78d9c..0000000 --- a/entrypoint.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -# Fetch minimum gas prices from the Phoenix FCD. -MIN_GAS_PRICES=$(wget -qO- "https://phoenix-fcd.terra.dev/v1/txs/gas_prices" | awk -F'"' -vRS=',' '/uluna/{print $4$2}') - -# Replace minimum-gas-price in ~/.terra/config/app.toml with Phoenix FCD response. -sed -e "s/^\(minimum-gas-prices\s*=\s*\).*$/\1\"${MIN_GAS_PRICES}\"/" -i ~/.terra/config/app.toml - -exec "$@" diff --git a/fcd.env b/fcd.env deleted file mode 100644 index ba0ab22..0000000 --- a/fcd.env +++ /dev/null @@ -1,13 +0,0 @@ -CHAIN_ID=localterra -LCD_URI=http://terrad:1317 -RPC_URI=http://terrad:26657 -USE_LOG_FILE=true -TYPEORM_CONNECTION=postgres -TYPEORM_HOST=postgres -TYPEORM_USERNAME=dev -TYPEORM_PASSWORD=dev -TYPEORM_DATABASE=fcd -TYPEORM_SYNCHRONIZE=true -TYPEORM_LOGGING=false -TYPEORM_ENTITIES=src/orm/*Entity.ts -LEGACY_NETWORK=false diff --git a/init.sql b/initdb.d/init.sql similarity index 51% rename from init.sql rename to initdb.d/init.sql index 642a019..7caba00 100644 --- a/init.sql +++ b/initdb.d/init.sql @@ -1 +1,2 @@ CREATE DATABASE fcd; +CREATE DATABASE api; \ No newline at end of file diff --git a/config/genesis.json b/terra/genesis.json similarity index 99% rename from config/genesis.json rename to terra/genesis.json index a9c0b19..5c5532a 100644 --- a/config/genesis.json +++ b/terra/genesis.json @@ -22,6 +22,19 @@ }, "app_hash": "", "app_state": { + "alliance": { + "params": { + "reward_delay_time": "604800s", + "take_rate_claim_interval": "300s", + "last_take_rate_claim_time": "0001-01-01T00:00:00Z" + }, + "assets": [], + "validator_infos": [], + "reward_weight_change_snaphots": [], + "delegations": [], + "redelegations": [], + "undelegations": [] + }, "auth": { "params": { "max_memo_characters": "256", @@ -262,6 +275,13 @@ "feegrant": { "allowances": [] }, + "feeibc": { + "identified_fees": [], + "fee_enabled_channels": [], + "registered_payees": [], + "registered_counterparty_payees": [], + "forward_relayers": [] + }, "genutil": { "gen_txs": [ { @@ -367,7 +387,10 @@ "connection_genesis": { "connections": [], "client_connection_paths": [], - "next_connection_sequence": "0" + "next_connection_sequence": "0", + "params": { + "max_expected_time_per_block": "30000000000" + } }, "channel_genesis": { "channels": [], @@ -380,6 +403,54 @@ "next_channel_sequence": "0" } }, + "ibchooks": {}, + "interchainaccounts": { + "controller_genesis_state": { + "active_channels": [], + "interchain_accounts": [], + "ports": [], + "params": { + "controller_enabled": true + } + }, + "host_genesis_state": { + "active_channels": [], + "interchain_accounts": [], + "port": "icahost", + "params": { + "host_enabled": true, + "allow_messages": [ + "/cosmos.authz.v1beta1.MsgExec", + "/cosmos.authz.v1beta1.MsgGrant", + "/cosmos.authz.v1beta1.MsgRevoke", + "/cosmos.bank.v1beta1.MsgSend", + "/cosmos.bank.v1beta1.MsgMultiSend", + "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress", + "/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission", + "/cosmos.distribution.v1beta1.MsgFundCommunityPool", + "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", + "/cosmos.feegrant.v1beta1.MsgGrantAllowance", + "/cosmos.feegrant.v1beta1.MsgRevokeAllowance", + "/cosmos.gov.v1beta1.MsgVoteWeighted", + "/cosmos.gov.v1beta1.MsgSubmitProposal", + "/cosmos.gov.v1beta1.MsgDeposit", + "/cosmos.gov.v1beta1.MsgVote", + "/cosmos.staking.v1beta1.MsgEditValidator", + "/cosmos.staking.v1beta1.MsgDelegate", + "/cosmos.staking.v1beta1.MsgUndelegate", + "/cosmos.staking.v1beta1.MsgBeginRedelegate", + "/cosmos.staking.v1beta1.MsgCreateValidator", + "/cosmos.vesting.v1beta1.MsgCreateVestingAccount", + "/ibc.applications.transfer.v1.MsgTransfer", + "/cosmwasm.wasm.v1.MsgStoreCode", + "/cosmwasm.wasm.v1.MsgInstantiateContract", + "/cosmwasm.wasm.v1.MsgExecuteContract", + "/cosmwasm.wasm.v1.MsgMigrateContract" + ] + } + } + }, + "intertx": null, "mint": { "minter": { "inflation": "0.130000000000000000", @@ -412,7 +483,8 @@ "max_validators": 100, "max_entries": 7, "historical_entries": 10000, - "bond_denom": "uluna" + "bond_denom": "uluna", + "min_commission_rate": "0.000000000000000000" }, "last_total_power": "0", "last_validator_powers": [], @@ -422,6 +494,17 @@ "redelegations": [], "exported": false }, + "tokenfactory": { + "params": { + "denom_creation_fee": [ + { + "denom": "uluna", + "amount": "10000000" + } + ] + }, + "factory_denoms": [] + }, "transfer": { "port_id": "transfer", "denom_traces": [], @@ -436,7 +519,8 @@ "params": { "code_upload_access": { "permission": "Everybody", - "address": "" + "address": "", + "addresses": [] }, "instantiate_default_permission": "Everybody" }, diff --git a/terracore/mnemonics.json b/terra/mnemonics.json similarity index 100% rename from terracore/mnemonics.json rename to terra/mnemonics.json diff --git a/config/priv_validator_key.json b/terra/priv_validator_key.json similarity index 100% rename from config/priv_validator_key.json rename to terra/priv_validator_key.json diff --git a/terracore/Dockerfile b/terracore/Dockerfile deleted file mode 100644 index 05156e7..0000000 --- a/terracore/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -# Simple usage with a mounted data directory: -# > docker build -t terra . -# > docker run -it -p 1317:1317 -p 26657:26657 -p 26656:26656 terra terrad start -FROM alpine:latest - -# Copy -WORKDIR /root - -ENV PATH /root/bin:$PATH - -COPY terrad ./bin/ - -RUN terrad init localterra