Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
fe0990b
fix(dashmate): missing rawblock zmq message in core config (#770)
Feb 7, 2023
2851767
fix(dashmate): undefined wallet for dash-cli (#786)
pshenmic Feb 20, 2023
f531183
feat(rs-drive-abci): add ABCI Server
lklimek Mar 16, 2023
ba22232
feat: support .env config files in rs-drive-abci
lklimek Mar 17, 2023
35c2636
chore(rs-drive-abci): cli verbosity + initchain (WIP)
lklimek Mar 20, 2023
80da548
chore(abci): check version on abci info() call
lklimek Mar 20, 2023
5fb6612
chore(rs-drive-abci): improve log formatting on console
lklimek Mar 20, 2023
ccf6d63
feat!(abci): prototype prepare_proposal
lklimek Mar 21, 2023
4baaabe
build(rs-drive-abci)!: Dockerfile updated
lklimek Mar 22, 2023
133d558
chore(rs-drive-abci): deps and cfg support updated
lklimek Mar 22, 2023
d127669
chore(rs-drive-abci): minor changes in comments etc
lklimek Mar 22, 2023
9e10dcf
chore(rs-drive-abci): improve logging
lklimek Mar 22, 2023
07de599
build(rs-drive-abci): update tenderdash-proto branch name
lklimek Mar 22, 2023
324c192
chore(rs-drive-abci): code cleanup
lklimek Mar 22, 2023
29a21ab
chore(rs-drive-abci): fix error on missing config var
lklimek Mar 23, 2023
00ee409
chore(rs-drive-abci): apply peer review feedback
lklimek Mar 24, 2023
75a088b
chore(rs-drive-abci): use AsRef instead of clone in prepare_proposal …
lklimek Mar 24, 2023
fdb4883
chore(rs-drive-abci): Application handlers can return ResponseException
lklimek Mar 24, 2023
25c312e
build(rs-drive-abci): remove unused semver dependency
lklimek Mar 24, 2023
d678e19
build(rs-drive-abci): update cargo.lock
lklimek Mar 24, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
922 changes: 660 additions & 262 deletions Cargo.lock

Large diffs are not rendered by default.

44 changes: 16 additions & 28 deletions packages/rs-drive-abci/.env.example
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# ABCI host and port to listen
ABCI_HOST=0.0.0.0
ABCI_PORT=26658
ABCI_BIND_ADDRESS="tcp://0.0.0.0:26658"

DB_PATH=./db
DB_PATH=/tmp/db

# GroveDB database file
GROVEDB_LATEST_FILE=${DB_PATH}/latest_state
Expand All @@ -25,47 +24,36 @@ CORE_ZMQ_CONNECTION_RETRIES=16

NETWORK=testnet

INITIAL_CORE_CHAINLOCKED_HEIGHT=
INITIAL_CORE_CHAINLOCKED_HEIGHT=1243

# https://github.com/dashevo/dashcore-lib/blob/286c33a9d29d33f05d874c47a9b33764a0be0cf1/lib/constants/index.js#L42-L57
VALIDATOR_SET_LLMQ_TYPE=100

VALIDATOR_SET_QUORUM_ROTATION_BLOCK_COUNT=1024
# DPNS Contract

DPNS_MASTER_PUBLIC_KEY=
DPNS_SECOND_PUBLIC_KEY=
DPNS_MASTER_PUBLIC_KEY=02649a81b760e8635dd3a4fad8911388ed09d7c1680558a890180d4edc8bcece7e
DPNS_SECOND_PUBLIC_KEY=03f5ea3ab4bf594c28997eb8f83873532275ac2edd36e586b137ed42d15d510948

# Dashpay Contract

DASHPAY_MASTER_PUBLIC_KEY=
DASHPAY_SECOND_PUBLIC_KEY=
DASHPAY_MASTER_PUBLIC_KEY=022d6d70c9d24d03904713db17fb74c9201801ba0e3aed0f5d91e89df388e94aa6
DASHPAY_SECOND_PUBLIC_KEY=028c0a26c87b2e7f1aebbbeace9e687d774e037f5b50a6905b5f6fa24495b502cd

# Feature flags contract

FEATURE_FLAGS_MASTER_PUBLIC_KEY=
FEATURE_FLAGS_SECOND_PUBLIC_KEY=
FEATURE_FLAGS_MASTER_PUBLIC_KEY=034ee04c509083ecd09e76fa53e0b5331b39120c19607cd04c4f167707dbb42302
FEATURE_FLAGS_SECOND_PUBLIC_KEY=03c755ae1b79dbcc79020aad3ccdfcb142fc6e74f1afc220fca1e275a87aa12cf8

# Masternode reward shares contract

MASTERNODE_REWARD_SHARES_MASTER_PUBLIC_KEY=
MASTERNODE_REWARD_SHARES_SECOND_PUBLIC_KEY=
MASTERNODE_REWARD_SHARES_MASTER_PUBLIC_KEY=02099cc210c7b6c7f566099046ddc92615342db326184940bf3811026ea328c85e
MASTERNODE_REWARD_SHARES_SECOND_PUBLIC_KEY=02bf55f97f189895da29824781053140ee66b2bf47760246504fbe502985096af5

# Withdrawals contract

WITHDRAWALS_MASTER_PUBLIC_KEY=
WITHDRAWALS_SECOND_PUBLIC_KEY=

# logging
LOG_STDOUT_LEVEL=info

LOG_PRETTY_FILE_LEVEL=silent
LOG_PRETTY_FILE_PATH=/tmp/drive-pretty.log

LOG_JSON_FILE_LEVEL=silent
LOG_JSON_FILE_PATH=/tmp/drive-json.log

LOG_STATE_REPOSITORY=false

NODE_ENV=production
WITHDRAWALS_MASTER_PUBLIC_KEY=027057cdf58628635ef7b75e6b6c90dd996a16929cd68130e16b9328d429e5e03a
WITHDRAWALS_SECOND_PUBLIC_KEY=022084d827fea4823a69aa7c8d3e02fe780eaa0ef1e5e9841af395ba7e40465ab6

TENDERDASH_P2P_PORT=26656

QUORUM_SIZE=5
52 changes: 39 additions & 13 deletions packages/rs-drive-abci/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,42 +1,68 @@
[package]
name = "drive-abci"
version = "0.1.0"
authors = ["Samuel Westrich <sam@dash.org>", "Ivan Shumkov <ivan@shumkov.ru>", "Djavid Gabibiyan <djavid@dash.org>"]
authors = [
"Samuel Westrich <sam@dash.org>",
"Ivan Shumkov <ivan@shumkov.ru>",
"Djavid Gabibiyan <djavid@dash.org>",
"Lukasz Klimek <lukasz.klimek@dash.org>",
]
edition = "2021"
license = "MIT"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html


[dependencies]
ciborium = { git="https://github.com/qrayven/ciborium", branch="feat-ser-null-as-undefined"}
ciborium = { git = "https://github.com/qrayven/ciborium", branch = "feat-ser-null-as-undefined" }
chrono = "0.4.20"
serde = { version = "1.0.152", features = ["derive"] }
serde_json = { version="1.0", features=["preserve_order"] }
drive = { path = "../rs-drive", features = ["fixtures-and-mocks"]}
serde_json = { version = "1.0", features = ["preserve_order"] }
serde_with = { version = "2.3.1", features = ["hex"], default-features = false }
drive = { path = "../rs-drive", features = ["fixtures-and-mocks"] }
thiserror = "1.0.30"
rand = "0.8.5"
tempfile = "3.3.0"
bs58 = "0.4.0"
base64 = "0.13.0"
hex = "0.4.3"
dashcore = { git="https://github.com/dashevo/rust-dashcore", features=["std", "secp-recovery", "rand", "signer", "use-serde"], default-features = false, rev = "51548a4a1b9eca7430f5f3caf94d9784886ff2e9" }
dashcore-rpc = { git="https://github.com/jawid-h/rust-dashcore-rpc", branch="fix/attempt-to-fix" }
dpp = { path = "../rs-dpp", features = ["fixtures-and-mocks"]}
dashcore = { git = "https://github.com/dashevo/rust-dashcore", features = [
"std",
"secp-recovery",
"rand",
"signer",
"use-serde",
], default-features = false, rev = "51548a4a1b9eca7430f5f3caf94d9784886ff2e9" }
dashcore-rpc = { git = "https://github.com/jawid-h/rust-dashcore-rpc", branch = "fix/attempt-to-fix" }
dpp = { path = "../rs-dpp", features = ["fixtures-and-mocks"] }
rust_decimal = "1.2.5"
rust_decimal_macros = "1.25.0"
mockall= { version ="0.11", optional = true }
mockall = { version = "0.11", optional = true }
bytes = { version = "1.4.0", default-features = false }
prost = { version = "0.11.6", default-features = false }
tenderdash-proto = { git="https://github.com/dashpay/rs-tenderdash-abci/proto" }
tracing = { version = "0.1.37", default-features = false }
tracing = { version = "0.1.37", default-features = false, features = [] }
flex-error = { version = "0.4.4", default-features = false }
structopt = { version = "0.3.26", optional = true, default-features = false }
tracing-subscriber = { version = "0.3.16", optional = true, default-features = false }
#tenderdash-abci = { git="https://github.com/dashpay/rs-tenderdash-abci" }
clap = { version = "4.1.8", optional = true, features = ["derive"] }
envy = { version = "0.4.2" }
dotenvy = { version = "0.15.6", optional = true }
tracing-subscriber = { version = "0.3.16", default-features = false, features = [
"env-filter",
"ansi",
], optional = true }
atty = { version = "0.2.14", optional = true }
tenderdash-abci = { git = "https://github.com/dashpay/rs-tenderdash-abci", branch = "master", optional = true }
# tenderdash-abci = { path = "/home/lklimek/git/lklimek/tenderdash-abci-rs/abci", optional = true }

[dev-dependencies]
itertools = { version = "0.10.5" }

[features]
default = ["fixtures-and-mocks"]
default = ["fixtures-and-mocks", "server"]
fixtures-and-mocks = ["mockall"]
server = ["tenderdash-abci", "clap", "dotenvy", "tracing-subscriber", "atty"]

[[bin]]
name = "drive-abci"
path = "src/main.rs"
required-features = ["server"]
179 changes: 108 additions & 71 deletions packages/rs-drive-abci/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,82 +1,119 @@
# syntax = docker/dockerfile:1.3
FROM node:16-alpine3.16 as builder
# syntax = docker/dockerfile:1.5

ARG CARGO_BUILD_PROFILE=debug
ENV CARGO_BUILD_PROFILE ${CARGO_BUILD_PROFILE}

RUN apk update && \
apk --no-cache upgrade && \
apk add --no-cache git \
openssh-client \
linux-headers \
python3 \
alpine-sdk \
cmake \
zeromq-dev \
ca-certificates \
gcc \
clang \
libc-dev \
binutils \
bash

# Install Rust
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH \
RUST_VERSION=stable

RUN set -eux; \
apkArch="$(apk --print-arch)"; \
case "$apkArch" in \
x86_64) rustArch='x86_64-unknown-linux-musl'; rustupSha256='bdf022eb7cba403d0285bb62cbc47211f610caec24589a72af70e1e900663be9' ;; \
aarch64) rustArch='aarch64-unknown-linux-musl'; rustupSha256='89ce657fe41e83186f5a6cdca4e0fd40edab4fd41b0f9161ac6241d49fbdbbbe' ;; \
*) echo >&2 "unsupported architecture: $apkArch"; exit 1 ;; \
esac; \
url="https://static.rust-lang.org/rustup/archive/1.24.3/${rustArch}/rustup-init"; \
wget "$url"; \
echo "${rustupSha256} *rustup-init" | sha256sum -c -; \
chmod +x rustup-init; \
./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION --default-host ${rustArch}; \
rm rustup-init; \
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
rustup --version; \
cargo --version; \
rustc --version;

WORKDIR /platform

# Copy yarn and Cargo files
COPY .cargo /platform/.cargo
COPY .pnp.* Cargo.toml Cargo.lock rust-toolchain.toml ./

# Copy only necessary packages from monorepo
COPY packages/rs-dpp packages/rs-dpp
COPY packages/rs-drive packages/rs-drive
COPY packages/rs-drive-abci packages/rs-drive-abci
COPY packages/rs-platform-value packages/rs-platform-value
COPY packages/rs-drive-nodejs packages/rs-drive-nodejs
COPY packages/dapi-grpc packages/dapi-grpc
COPY packages/dashpay-contract packages/dashpay-contract
COPY packages/dpns-contract packages/dpns-contract
COPY packages/feature-flags-contract packages/feature-flags-contract
COPY packages/masternode-reward-shares-contract packages/masternode-reward-shares-contract
COPY packages/withdrawals-contract packages/withdrawals-contract
COPY packages/data-contracts packages/data-contracts
# Docker image for rs-drive-abci
#
# This image is divided into 3 stages, for better layer caching:
# - deps - includes all dependencies and some libraries
# - build - actual build process
# - release - final image
#
# We use Debian as base, because Alpine causes segmentation fault in git2 rust crate.

#
# DEPS: INSTALL AND CACHE DEPENDENCIES
#
FROM rust:bullseye as deps

LABEL maintainer="Dash Developers <dev@dash.org>"
LABEL description="Drive ABCI Rust"

# Install ZMQ shared library
RUN apk update && apk add --no-cache zeromq-dev
RUN --mount=type=cache,sharing=locked,target=/var/lib/apt/lists \
--mount=type=cache,sharing=locked,target=/var/cache/apt \
rm -f /etc/apt/apt.conf.d/docker-clean \
&& apt-get update \
&& apt-get install --yes \
build-essential \
libclang-dev \
libssl-dev \
protobuf-compiler \
git \
wget \
unzip \
bash

SHELL ["/bin/bash", "-c"]

#
# Install sccache - build cache for Rust
#
ARG SCCACHE_URL="https://github.com/mozilla/sccache/releases/download/v0.4.0/sccache-v0.4.0-x86_64-unknown-linux-musl.tar.gz"
RUN wget -q -O /tmp/sccache.tar.gz ${SCCACHE_URL} \
&& mkdir -p /tmp/sccache \
&& tar -z -C /tmp/sccache -xf /tmp/sccache.tar.gz \
&& cp /tmp/sccache/sccache*/sccache /usr/bin/sccache \
&& rm -r /tmp/sccache.tar.gz /tmp/sccache

#
# Update Rust runtime
#
ARG CARGO_BUILD_PROFILE=debug
RUN rustup install stable

#
# EXECUTE BUILD
#
FROM deps as build

WORKDIR /usr/src/platform

COPY . .

#
# Configure sccache
#

# Set RUSTC_WRAPPER=/usr/bin/sccache to enable `sccache` caching.
ARG RUSTC_WRAPPER=/usr/bin/sccache
# Set args below to use Github Actions cache; see https://github.com/mozilla/sccache/blob/main/docs/GHA.md
ARG SCCACHE_GHA_ENABLED
ARG ACTIONS_CACHE_URL
ARG ACTIONS_RUNTIME_TOKEN
# Disable incremental buildings, not supported by sccache
ARG CARGO_INCREMENTAL=false

# Run the build, with extensive caching.
# See https://doc.rust-lang.org/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci
# --mount=type=cache,sharing=private,target=/usr/src/platform/target \
RUN --mount=type=cache,sharing=shared,target=/root/.cache/sccache \
--mount=type=cache,sharing=shared,target=${CARGO_HOME}/.crates.toml \
--mount=type=cache,sharing=shared,target=${CARGO_HOME}/.crates2.json \
--mount=type=cache,sharing=shared,target=${CARGO_HOME}/registry/index \
--mount=type=cache,sharing=shared,target=${CARGO_HOME}/registry/cache \
--mount=type=cache,sharing=shared,target=${CARGO_HOME}/git/db \
cargo build -p drive-abci \
&& cp /usr/src/platform/target/${CARGO_BUILD_PROFILE}/drive-abci /usr/src/platform/drive-abci

#
# FINAL IMAGE
#
FROM debian:bullseye-slim AS release

VOLUME /var/lib/platform

ENV DB_PATH=/var/lib/platform/rs-drive-abci/db

#
# Install binaries and data
#
WORKDIR /var/lib/platform

WORKDIR /platform
COPY --from=build /usr/src/platform/drive-abci /usr/bin/drive-abci
COPY --from=build /usr/src/platform/packages/rs-drive-abci/.env.example /var/lib/platform/rs-drive-abci/.env

COPY --from=builder /platform /platform
#
# Create new non-root user
#
ARG USERNAME=platform
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID --home /var/lib/platform/rs-drive-abci --create-home $USERNAME \
&& chown -R $USER_UID:$USER_GID /var/lib/platform/rs-drive-abci

# Remove Rust sources
RUN rm -rf packages/rs-drive packages/rs-drive-abci packages/rs-dpp packages/rs-platform-value
USER $USERNAME

RUN cp /platform/packages/rs-drive-abci/.env.example /platform/packages/rs-drive-abci/.env
WORKDIR /var/lib/platform/rs-drive-abci
ENTRYPOINT ["/usr/bin/drive-abci"]
CMD ["start"]

EXPOSE 26658
Loading