Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • nodes/rust/duniter-v2s
  • llaq/lc-core-substrate
  • pini-gh/duniter-v2s
  • vincentux/duniter-v2s
  • mildred/duniter-v2s
  • d0p1/duniter-v2s
  • bgallois/duniter-v2s
  • Nicolas80/duniter-v2s
8 results
Select Git revision
  • distance
  • elois-ci-binary-release
  • elois-compose-metrics
  • elois-duniter-storage
  • elois-fix-85
  • elois-opti-cert
  • elois-remove-renewable-period
  • elois-rework-certs
  • elois-smoldot
  • elois-substrate-v0.9.23
  • elois-technical-commitee
  • hugo-cucumber-identity
  • master
  • no-bootnodes
  • poc-oneshot-accounts
  • release/runtime-100
  • release/runtime-200
  • ts-types
  • ud-time-64
  • runtime-100
  • runtime-101
  • runtime-102
  • runtime-103
  • runtime-104
  • runtime-105
  • runtime-200
  • runtime-201
  • v0.1.0
28 results
Show changes
Commits on Source (378)
Showing
with 12743 additions and 6525 deletions
[alias]
cucumber = "test -p duniter-end2end-tests --test cucumber_tests --"
tu = "test --workspace --exclude duniter-end2end-tests"
xtask = "run --package xtask --"
[alias]
sanity-gdev = "test -Zgit=shallow-deps -p duniter-live-tests --test sanity_gdev -- --nocapture"
tu = "test -Zgit=shallow-deps --workspace --exclude duniter-end2end-tests --exclude duniter-live-tests --features constant-fees" # Unit tests with constant-fees
tf = "test -Zgit=shallow-deps --workspace --exclude duniter-end2end-tests --exclude duniter-live-tests test_fee" # Custom fee model tests
# `te` and `cucumber` are synonyms
te = "test -p duniter-end2end-tests --test cucumber_tests --features constant-fees --"
cucumber-build = "build -Zgit=shallow-deps --features constant-fees"
cucumber = "test -Zgit=shallow-deps -p duniter-end2end-tests --test cucumber_tests --"
ta = "test -Zgit=shallow-deps --workspace --exclude duniter-live-tests --features constant-fees"
tb = "test -Zgit=shallow-deps --features runtime-benchmarks -p"
rbp = "run -Zgit=shallow-deps --release --features runtime-benchmarks -- benchmark pallet --chain=dev --steps=50 --repeat=20 --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=. --pallet"
xtask = "run -Zgit=shallow-deps --package xtask --"
cucumber-node = "run -Zgit=shallow-deps -- --chain=gdev_dev --execution=Native --sealing=manual --force-authoring --rpc-cors=all --tmp --rpc-port 9944 --alice --features constant-fees"
...@@ -4,4 +4,6 @@ ...@@ -4,4 +4,6 @@
.vscode .vscode
docker/Dockerfile docker/Dockerfile
docker-compose.yml docker-compose.yml
target arm-build/
**/target/
build/
This project is tracked on our hosted gitlab server at:
https://git.duniter.org/nodes/rust/duniter-v2s
The current github repository is a simple clone taken up to date at each push on the main gitlab repository.
All contributions should be performed on the main gitlab repository.
Pull requests and issues must be created on the main gitlab repository.
Please note that all issues must be opened at https://git.duniter.org/nodes/rust/duniter-v2s/issues/new?issue
If you open issue here, it will be closed.
Thank you for your understanding.
This project is tracked on our hosted gitlab server at: https://git.duniter.org/nodes/rust/duniter-v2s
The current github repository is a simple clone taken up to date at each push on the main gitlab repository.
All contributions should be performed on the main gitlab repository.
Pull requests proposed on github will be closed.
Thank you for your understanding.
# Initial disclaimer
This project is tracked on our hosted gitlab server at:
https://git.duniter.org/nodes/rust/duniter-v2s
The current github repository is a simple clone taken up to date at each push on the main gitlab repository.
All contributions should be performed on the main gitlab repository.
Pull requests and issues must be created on the main gitlab repository.
# Original README.md
name: Check Set-Up & Build
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
check:
# The type of runner that the job will run on
runs-on: ubuntu-20.04
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: Set-Up
run: sudo apt install -y cmake pkg-config libssl-dev git build-essential clang libclang-dev curl
- name: Install Rustup
run: |
curl https://sh.rustup.rs -sSf | sh -s -- -y
source ~/.cargo/env
rustup default stable
rustup update nightly
rustup update stable
rustup target add wasm32-unknown-unknown --toolchain nightly
- name: Check Build
run: |
SKIP_WASM_BUILD=1 cargo check --release
- name: Check Build for Benchmarking
run: >
pushd node &&
cargo check --features=runtime-benchmarks --release
...@@ -15,7 +15,8 @@ ...@@ -15,7 +15,8 @@
# node modules # node modules
**/node_modules/** **/node_modules/**
# build folder # build folders
arm-build
build build
# Temporary files # Temporary files
......
# Runner tags:
# - podman: use 'podman' to build multiplatform images
stages: stages:
- schedule
- labels
- quality - quality
- build - build
- tests - tests
- release
- deploy - deploy
- deploy_readme
workflow: workflow:
rules: rules:
- changes: - changes:
- docker/Dockerfile - docker/Dockerfile
- end2end-tests/**/*
- node/**/* - node/**/*
- pallets/**/* - pallets/**/*
- runtime/**/* - runtime/**/*
...@@ -15,10 +23,43 @@ workflow: ...@@ -15,10 +23,43 @@ workflow:
- Cargo.toml - Cargo.toml
- Cargo.lock - Cargo.lock
.is_network_branch: &is_network_branch
if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_BRANCH =~ /^(network\/).+/
.is_runtime_branch: &is_runtime_branch
if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_BRANCH =~ /^(runtime\/).+/
sanity_tests:
extends: .env
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TOPIC=="sanity-tests"'
- when: never
stage: schedule
script:
- cargo sanity-${CURRENCY}
check_labels:
extends: .env
stage: labels
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- when: never
script:
- ./scripts/check_labels.sh $CI_MERGE_REQUEST_LABELS $CI_MERGE_REQUEST_MILESTONE
check_metadata:
extends: .env
stage: tests
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- when: never
script:
- ./scripts/check_metadata.sh
.env: .env:
image: paritytech/ci-linux:production image: paritytech/ci-linux:production
tags: tags:
- elois-neutron - kepler
fmt_and_clippy: fmt_and_clippy:
extends: .env extends: .env
...@@ -27,221 +68,474 @@ fmt_and_clippy: ...@@ -27,221 +68,474 @@ fmt_and_clippy:
when: manual when: manual
- if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH == "master"' - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH == "master"'
when: never when: never
- <<: *is_network_branch
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: always
- when: manual - when: manual
stage: quality stage: quality
script: script:
- cargo fmt -- --version - cargo fmt -- --version
- cargo fmt -- --check - cargo fmt -- --check
- cargo clippy -- -V - cargo clippy -- -V
- cargo clippy --all --tests -- -D warnings - cargo clippy -Zgit=shallow-deps --features runtime-benchmarks --all --tests -- -D warnings
build_debug: run_benchmarks:
extends: .env extends: .env
stage: tests
rules: rules:
- if: $CI_COMMIT_REF_NAME =~ /^wip*$/
when: manual
- <<: *is_network_branch
when: never
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
when: never when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"' - if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
changes: - when: manual
- Cargo.lock
- when: never
stage: build
script: script:
- cargo clean -p duniter - cargo build -Zgit=shallow-deps --release --features runtime-benchmarks
- cargo build --locked - target/release/duniter benchmark storage --chain=dev --mul=2 --state-version=1 --weight-path=./runtime/gdev/src/weights/
- mkdir build - target/release/duniter benchmark overhead --chain=dev --wasm-execution=compiled --warmup=1 --repeat=100 --weight-path=./runtime/gdev/src/weights/
- mv target/debug/duniter build/duniter - target/release/duniter benchmark pallet --chain=dev --steps=5 --repeat=2 --pallet="*" --extrinsic="*" --wasm-execution=compiled --output=./runtime/gdev/src/weights/
artifacts: - cargo build -Zgit=shallow-deps --release --features runtime-benchmarks # Check if autogenerated weights work
paths:
- build/
expire_in: 3 day
cache:
- key:
files:
- Cargo.lock
paths:
- target/debug
policy: push
build_debug_with_cache: gtest_build:
stage: build
extends: .env extends: .env
rules: rules:
- changes: - <<: *is_network_branch
- Cargo.lock
when: never when: never
- if: $CI_COMMIT_REF_NAME =~ /^wip*$/
when: manual
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
when: never when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"' - if: $CI_COMMIT_BRANCH =~ /^(release\/runtime-)[0-9].*/
- when: never when: never
stage: build - if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
- when: manual
variables:
DEBIAN_FRONTEND: noninteractive
script: script:
- cargo clean -p duniter - cargo build -Zgit=shallow-deps --no-default-features --features gtest
- cargo build --locked
- mkdir build
- mv target/debug/duniter build/duniter
artifacts:
paths:
- build/
expire_in: 3 day
cache:
- key:
files:
- Cargo.lock
paths:
- target/debug
policy: pull
build_release: build_deb:
stage: deploy
extends: .env extends: .env
rules: rules:
- if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v*/" - if: $CI_COMMIT_REF_NAME =~ /^wip*$/
- when: never when: manual
stage: build - if: $CI_COMMIT_TAG
when: never
- <<: *is_network_branch
needs: ["build_raw_specs"]
when: always
- if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
- when: manual
variables:
DEBIAN_FRONTEND: noninteractive
script: script:
- cargo build --locked --release - cargo install cargo-deb
- mkdir build - cargo build -Zgit=shallow-deps --release
- mv target/release/duniter build/duniter - cargo deb --no-build -p duniter
artifacts: artifacts:
paths: paths:
- build/ - target/debian/duniter*.deb
expire_in: 3 day
build_release_manual: build_rpm:
stage: deploy
extends: .env extends: .env
rules: rules:
- if: $CI_COMMIT_REF_NAME =~ /^wip*$/
when: manual
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
when: never when: never
- <<: *is_network_branch
needs: ["build_raw_specs"]
when: always
- if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
- when: manual - when: manual
stage: build
allow_failure: true
script: script:
- cargo build --locked --release - cargo install cargo-generate-rpm
- mkdir build - cargo build -Zgit=shallow-deps --release
- mv target/release/duniter build/duniter - cargo generate-rpm -p node
artifacts: artifacts:
paths: paths:
- build/ - target/generate-rpm/duniter*.rpm
expire_in: 3 day
tests_debug: tests:
stage: tests
extends: .env extends: .env
rules: rules:
- if: $CI_COMMIT_REF_NAME =~ /^wip*$/ - if: $CI_COMMIT_REF_NAME =~ /^wip*$/
when: manual when: manual
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
when: never when: never
- <<: *is_network_branch
when: never
- if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"' - if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
- when: manual - when: manual
stage: tests
variables: variables:
DUNITER_BINARY_PATH: "../build/duniter" DEBIAN_FRONTEND: noninteractive
DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT: "20" script:
- export RUST_MIN_STACK=16777216 # 16MB stack size otherwise CI fail during LLVM's Thin LTO (Link Time Optimization) phase
- cargo tu
- cargo tf
- cargo cucumber-build
- cargo cucumber
.network_branch_vars: &define_network_branch_vars
- export NETWORK=$(echo $CI_COMMIT_BRANCH | sed -e "s/network\///g")
- echo "NETWORK = $NETWORK"
- export RUNTIME=$(echo $NETWORK | grep -Po "gdev|gtest|g1")
- echo "RUNTIME = $RUNTIME"
# srtool specific
- export RUNTIME_DIR=runtime/$RUNTIME
- echo "RUNTIME_DIR = $RUNTIME_DIR"
# srtool specific
- export PACKAGE=$RUNTIME-runtime
- echo "PACKAGE = $PACKAGE"
# GitLab milestone : used for both GitLab and Docker releases. Milestone must match source code's runtime version to fetch the git changes for release notes.
- export CLIENT_VERSION=$(cat node/Cargo.toml | grep version | sed "s/version = \"//g" | sed "s/\"//")
- echo $CLIENT_VERSION
- export RUNTIME_VERSION=$(cat runtime/$RUNTIME/src/lib.rs | grep "spec_version:" | sed "s/ *spec_version. //g" | sed "s/,//g")
- echo $RUNTIME_VERSION
- export CLIENT_MILESTONE="client-$CLIENT_VERSION"
- echo $CLIENT_MILESTONE
- export NETWORK_RELEASE="$NETWORK"
- echo $NETWORK_RELEASE
- export DOCKER_TAG="$RUNTIME_VERSION-$CLIENT_VERSION"
# Tags for Docker images
- export IMAGE_NAME="duniter/duniter-v2s-$NETWORK"
- echo $IMAGE_NAME
- export MANIFEST=localhost/manifest-$IMAGE_NAME:$DOCKER_TAG
- echo $MANIFEST
# Files to be pushed in a release
- export RELEASE_FILE_G1_DATA=release/genesis.json
- echo $RELEASE_FILE_G1_DATA
- export RELEASE_FILE_SPEC_CONFIG=release/${RUNTIME}.yaml
- echo $RELEASE_FILE_SPEC_CONFIG
- export RELEASE_FILE_SPEC=release/${RUNTIME}.json
- echo $RELEASE_FILE_SPEC
- export RELEASE_FILE_WASM=release/${RUNTIME}_runtime.compact.compressed.wasm
- echo $RELEASE_FILE_WASM
- export RELEASE_FILE_RAW_SPEC=release/${RUNTIME}-raw.json
- echo $RELEASE_FILE_RAW_SPEC
- export RELEASE_FILE_CLIENT_SPEC=release/gdev_client-specs.yaml
- echo $RELEASE_FILE_CLIENT_SPEC
- export CLIENT_RELEASE_NAME=$RUNTIME-$RUNTIME_VERSION-$CLIENT_VERSION
- echo $CLIENT_RELEASE_NAME
.release_runtime_vars: &define_release_runtime_vars
- echo "RUNTIME = $RUNTIME"
- export RUNTIME_VERSION=$(cat runtime/$RUNTIME/src/lib.rs | grep "spec_version:" | sed "s/ *spec_version. //g" | sed "s/,//g")
- echo $RUNTIME_VERSION
- export RUNTIME_MILESTONE="runtime-$RUNTIME_VERSION"
- echo $RUNTIME_MILESTONE
- export SRTOOL_OUTPUT=$CI_PROJECT_DIR/release/srtool_output_$RUNTIME.json
- echo "SRTOOL_OUTPUT = $SRTOOL_OUTPUT"
- export RELEASE_FILE_WASM=release/${RUNTIME}_runtime.compact.compressed.wasm
- echo $RELEASE_FILE_WASM
# srtool specific
- export RUNTIME_DIR=runtime/$RUNTIME
- echo "RUNTIME_DIR = $RUNTIME_DIR"
# srtool specific
- export PACKAGE=$RUNTIME-runtime
- echo "PACKAGE = $PACKAGE"
trigger_runtime_release:
stage: build
rules:
- <<: *is_runtime_branch
when: manual
variables:
RUNTIME: gdev
script:
- *define_release_runtime_vars
- echo "Vérification de l'absence de la release $RUNTIME_MILESTONE"
- echo "Contrôle de l'URL https://git.duniter.org/api/v4/projects/$CI_PROJECT_ID/releases/$RUNTIME_MILESTONE"
- curl -s https://git.duniter.org/api/v4/projects/$CI_PROJECT_ID/releases/$RUNTIME_MILESTONE --fail 1>/dev/null && (echo "Release déjà présente" && exit 1) || echo "Release absente"
trigger_network_release:
stage: build
rules:
- <<: *is_network_branch
when: manual
script:
- *define_network_branch_vars
- echo "Vérification de l'absence de la release $NETWORK"
- echo "Contrôle de l'URL https://git.duniter.org/api/v4/projects/$CI_PROJECT_ID/releases/$NETWORK"
- curl -s https://git.duniter.org/api/v4/projects/$CI_PROJECT_ID/releases/$NETWORK --fail 1>/dev/null && (echo "Release déjà présente" && exit 1) || echo "Release absente"
trigger_client_release:
stage: build
rules:
- <<: *is_network_branch
when: manual
script:
- *define_network_branch_vars
- echo "Vérification de la présence de la release $NETWORK"
- echo "Contrôle de l'URL https://git.duniter.org/api/v4/projects/$CI_PROJECT_ID/releases/$NETWORK"
- curl -s https://git.duniter.org/api/v4/projects/$CI_PROJECT_ID/releases/$NETWORK --fail 1>/dev/null && echo "Release présente" || (echo "Release absente" && exit 1)
docker_deploy:
stage: release
needs: ["build_raw_specs"]
rules:
- <<: *is_network_branch
- when: never
before_script:
- sh -c "[ -n '$DUNITERTEAM_PASSWD' ] || ( echo No access to environment variable 'DUNITERTEAM_PASSWD'; exit 1 )"
- podman login -u "duniterteam" -p "$DUNITERTEAM_PASSWD" docker.io
script: script:
- cargo test --workspace --exclude duniter-end2end-tests - *define_network_branch_vars
- cargo cucumber -i balance* - podman manifest rm "$MANIFEST" 2>/dev/null || true
- cargo cucumber -i monetary* - podman build --layers --platform linux/amd64,linux/arm64 --manifest "$MANIFEST" -f docker/Dockerfile --build-arg chain=$RUNTIME .
- cargo cucumber -i transfer* - podman manifest push --all "$MANIFEST" "docker://docker.io/$IMAGE_NAME:$DOCKER_TAG"
- podman manifest push --all "$MANIFEST" "docker://docker.io/$IMAGE_NAME:latest"
after_script: after_script:
- cd target/debug/deps/ - *define_network_branch_vars
- rm cucumber_tests-*.d - echo $MANIFEST
- mv cucumber_tests* ../../../build/duniter-cucumber - podman manifest rm "$MANIFEST"
tags:
- podman
############## SRTOOL ##############
# The Network Runtime is only built when creating a network release (i.e.: genesis)
build_network_runtime:
stage: build
needs: ["trigger_network_release"]
rules:
- <<: *is_network_branch
image: paritytech/srtool:1.77.0-0.15.0
variables:
SRTOOL_OUTPUT: $CI_PROJECT_DIR/release/network_srtool_output.json
script:
- *define_network_branch_vars
- echo "SRTOOL_OUTPUT = $SRTOOL_OUTPUT"
- mkdir -p $CI_PROJECT_DIR/release
# Copy sources to the expected directory of srtool
- cp -R * /build/
# Build the runtime
- /srtool/build --app --json -cM | tee -a $SRTOOL_OUTPUT
- mv /build/runtime/$RUNTIME/target/srtool/release/wbuild/$RUNTIME-runtime/${RUNTIME}_runtime.compact.compressed.wasm $CI_PROJECT_DIR/release/
artifacts: artifacts:
expire_in: never
name: "runtime"
paths: paths:
- build/ - $CI_PROJECT_DIR/release
expire_in: 3 day tags:
- kepler
tests_release: build_gdev_runtime:
extends: .env stage: build
needs: ["trigger_runtime_release"]
rules: rules:
- if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v*/" - <<: *is_runtime_branch
- when: never image: paritytech/srtool:1.77.0-0.15.0
stage: tests
variables: variables:
DUNITER_BINARY_PATH: "../build/duniter" RUNTIME: gdev
DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT: "20"
script: script:
- cargo test --workspace --exclude duniter-end2end-tests - *define_release_runtime_vars
- cargo cucumber -i balance* - mkdir -p $CI_PROJECT_DIR/release
- cargo cucumber -i monetary* # Copy sources to the expected directory of srtool
- cargo cucumber -i transfer* - cp -R * /build/
after_script: # Build the runtime
- cd target/debug/deps/ - /srtool/build --app --json -cM | tee -a $SRTOOL_OUTPUT
- rm cucumber_tests-*.d - mv /build/runtime/$RUNTIME/target/srtool/release/wbuild/$RUNTIME-runtime/${RUNTIME}_runtime.compact.compressed.wasm $CI_PROJECT_DIR/release/
- mv cucumber_tests* ../../../build/duniter-cucumber
artifacts: artifacts:
expire_in: never
name: "runtime"
paths: paths:
- build/ - $CI_PROJECT_DIR/release
expire_in: 3 day
dependencies:
- build_release
.docker-build-app-image:
stage: deploy
image: docker:18.06
tags: tags:
- redshift - kepler
services:
- docker:18.06-dind ############## SPECS ##############
before_script:
- docker info
script:
- docker pull $CI_REGISTRY_IMAGE:$IMAGE_TAG || true
- docker build --cache-from $CI_REGISTRY_IMAGE:$IMAGE_TAG --pull -t "$CI_REGISTRY_IMAGE:$IMAGE_TAG" -f $DOCKERFILE_PATH .
- docker login -u "duniterteam" -p "$DUNITERTEAM_PASSWD"
- docker tag "$CI_REGISTRY_IMAGE:$IMAGE_TAG" "duniter/duniter-v2s:$IMAGE_TAG"
- docker push "duniter/duniter-v2s:$IMAGE_TAG"
deploy_docker_test_image: build_g1-migrator:
extends: .docker-build-app-image stage: build
rules: rules:
- if: $CI_COMMIT_REF_NAME =~ /^wip*$/ - <<: *is_network_branch
when: manual trigger:
- if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH == "master"' project: tools/py-g1-migrator
when: never
- when: manual g1_data:
allow_failure: true stage: build
needs: ["trigger_network_release", "build_g1-migrator"]
rules:
- <<: *is_network_branch
# following image already has g1-migrator and dependency embedded
image: registry.duniter.org/tools/py-g1-migrator:latest
variables: variables:
DOCKERFILE_PATH: "docker/Dockerfile" LEVELDB_PATH: /dump/duniter_default/data/leveldb
IMAGE_TAG: "test-image-$CI_COMMIT_SHORT_SHA" script:
- *define_network_branch_vars
# Duniter 1.8.7 dump
- mkdir /dump
- cd /dump
# Export file constructed using Duniter 1.8.7:
# - bin/duniter sync g1.cgeek.fr --store-txs --nointeractive --mdb 1.8.7
# - mkdir -p /tmp/backup-g1-duniter-1.8.7
# - cp -R $HOME/.config/duniter/1.8.7/data /tmp/backup-g1-duniter-1.8.7
# - tar -cvzf /tmp/backup-g1-duniter-1.8.7.tgz /tmp/backup-g1-duniter-1.8.7
# Then the file is uploaded to dl.cgeek.fr manually
- curl https://dl.cgeek.fr/public/backup-g1-duniter-1.8.7.tgz -o g1-dump.tgz
- tar xvzf g1-dump.tgz
- rm g1-dump.tgz
- mv tmp/backup-g1-duniter-1.8.7 duniter_default
# py-g1-migrator conversion
- cd /py-g1-migrator
# Export genesis file
- ./main.py # ./output/genesis.json
# Expore history files for squid
- ./squid-block.py # ./output/block_hist.json
- ./squid-cert.py # ./output/cert_hist.json
- ./squid-tx.py # ./output/tx_hist.json
# Make the exported file available for next jobs
- mkdir -p $CI_PROJECT_DIR/release/
- cp output/genesis.json $CI_PROJECT_DIR/$RELEASE_FILE_G1_DATA
- cp output/block_hist.json $CI_PROJECT_DIR/release/
- cp output/cert_hist.json $CI_PROJECT_DIR/release/
- cp output/tx_hist.json $CI_PROJECT_DIR/release/
artifacts:
expire_in: never
paths:
- $CI_PROJECT_DIR/release/
tags:
- kepler
deploy_docker_debug_sha: build_specs:
extends: .docker-build-app-image stage: build
needs: ["build_network_runtime", "g1_data"]
rules: rules:
- if: $CI_COMMIT_TAG - <<: *is_network_branch
when: never extends: .env
- if: $CI_COMMIT_BRANCH == "master"
variables: variables:
DOCKERFILE_PATH: "docker/Dockerfile" DEBIAN_FRONTEND: noninteractive
IMAGE_TAG: "debug-sha-$CI_COMMIT_SHORT_SHA" script:
after_script: - *define_network_branch_vars
- docker login -u "duniterteam" -p "$DUNITERTEAM_PASSWD" - export FEATURES="--features $RUNTIME --no-default-features"
- docker tag "duniter/duniter-v2s:$IMAGE_TAG" "duniter/duniter-v2s:debug-latest" - echo "FEATURES = $FEATURES"
- docker push "duniter/duniter-v2s:debug-latest" - export WASM_FILE="$CI_PROJECT_DIR/$RELEASE_FILE_WASM"
- echo "WASM_FILE = $WASM_FILE"
- export DUNITER_GENESIS_DATA=$CI_PROJECT_DIR/$RELEASE_FILE_G1_DATA
- echo "DUNITER_GENESIS_DATA = $DUNITER_GENESIS_DATA"
- apt-get update
- apt-get install -y clang cmake protobuf-compiler
# Build the spec file (including the G1 data), e.g.: "release/gdev.json"
- cargo run -Zgit=shallow-deps ${FEATURES} -- build-spec --chain=${RUNTIME}_live > $RELEASE_FILE_SPEC
# Save spec configuration file for release
- cp resources/${RUNTIME}.yaml $RELEASE_FILE_SPEC_CONFIG
artifacts:
expire_in: never
name: "runtime"
paths:
- $CI_PROJECT_DIR/release
tags:
- kepler
deploy_docker_release_sha: build_raw_specs:
extends: .docker-build-app-image stage: build
needs: ["trigger_client_release"]
rules: rules:
- if: $CI_COMMIT_TAG - <<: *is_network_branch
when: never image: rust:1-bullseye
- when: manual script:
allow_failure: true - *define_network_branch_vars
- export FEATURES="--features $RUNTIME --no-default-features"
- echo "FEATURES = $FEATURES"
- apt-get update
- apt-get install -y clang cmake protobuf-compiler jq
# Print chainspec to file
- cargo xtask print-spec $NETWORK_RELEASE > ${RUNTIME}-printed.json
# Merge client specs into chainspec file (to update bootnodes for example)
# 1. Download yq to create a json client spec file
- wget https://github.com/mikefarah/yq/releases/download/v4.44.6/yq_linux_arm64 -O yq
- chmod +x ./yq
# 2. YML -> JSON for the client specs
- cat node/specs/${RUNTIME}_client-specs.yaml | ./yq --output-format json > node/specs/${RUNTIME}_client-specs.json
# 3. Merge the client spec file into chainspec file and create the final spec file (e.g. gdev.json)
- jq -s '.[0] * .[1]' node/specs/${RUNTIME}_client-specs.json ${RUNTIME}-printed.json > ${RUNTIME}.json
# Produce raw spec file
- mkdir -p $CI_PROJECT_DIR/release
- cargo run -Zgit=shallow-deps ${FEATURES} -- build-spec --chain=${RUNTIME}.json --disable-default-bootnode --raw > $RELEASE_FILE_RAW_SPEC
artifacts:
expire_in: never
name: "runtime"
paths:
- $CI_PROJECT_DIR/release
tags:
- kepler
############## RELEASE ##############
create_network_release:
stage: release
needs: ["build_specs"]
rules:
- <<: *is_network_branch
image: rust:1-bullseye
variables: variables:
DOCKERFILE_PATH: "docker/Dockerfile" # Used by `release-network` command
IMAGE_TAG: "sha-$CI_COMMIT_SHORT_SHA" SRTOOL_OUTPUT: $CI_PROJECT_DIR/release/network_srtool_output.json
dependencies: script:
- build_release_manual - *define_network_branch_vars
# Release creation
- cargo xtask release-network $NETWORK_RELEASE $CI_COMMIT_BRANCH
# g1-data (initial data)
- cargo xtask create-asset-link $NETWORK_RELEASE g1-data.json https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/$RELEASE_FILE_G1_DATA
# gdev.yaml (spec configuration)
- cargo xtask create-asset-link $NETWORK_RELEASE ${RUNTIME}.yaml https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/$RELEASE_FILE_SPEC_CONFIG
# initial runtime
- cargo xtask create-asset-link $NETWORK_RELEASE ${RUNTIME}_runtime.compact.compressed.wasm https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/$RELEASE_FILE_WASM
# the result: gdev.json (genesis)
- cargo xtask create-asset-link $NETWORK_RELEASE ${RUNTIME}.json https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/$RELEASE_FILE_SPEC
artifacts:
expire_in: never
paths:
- $CI_PROJECT_DIR/release/
tags:
- kepler
deploy_docker_release_tag: create_client_release:
extends: .docker-build-app-image stage: release
needs: ["build_raw_specs"]
rules: rules:
- if: "$CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v*/" - <<: *is_network_branch
- when: never image: rust:1-bullseye
script:
- *define_network_branch_vars
# Create the GitLab release page + tag and associate the milestone
- cargo xtask release-client $CLIENT_RELEASE_NAME $CI_COMMIT_BRANCH $CLIENT_MILESTONE
# Add the client assets
- cargo xtask create-asset-link $CLIENT_RELEASE_NAME ${RUNTIME}_client-specs.yaml https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/$RELEASE_FILE_CLIENT_SPEC
- cargo xtask create-asset-link $CLIENT_RELEASE_NAME ${RUNTIME}-raw.json https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/$RELEASE_FILE_RAW_SPEC
artifacts:
expire_in: never
paths:
- $CI_PROJECT_DIR/release/
tags:
- kepler
create_runtime_release:
stage: release
needs: ["build_gdev_runtime"]
rules:
- <<: *is_runtime_branch
image: rust:1-bullseye
variables: variables:
DOCKERFILE_PATH: "docker/Dockerfile" RUNTIME: gdev
IMAGE_TAG: "$CI_COMMIT_TAG" script:
after_script: - *define_release_runtime_vars
- docker login -u "duniterteam" -p "$DUNITERTEAM_PASSWD" # Create the GitLab release page + tag and associate the milestone.
- docker tag "duniter/duniter-v2s:$IMAGE_TAG" "duniter/duniter-v2s:latest" # Note: the release name = the release tag = runtime milesone ($RUNTIME_MILESTONE)
- docker push "duniter/duniter-v2s:latest" - cargo xtask release-runtime $RUNTIME_MILESTONE $RUNTIME $CI_COMMIT_BRANCH $RUNTIME_MILESTONE
dependencies: - cargo xtask create-asset-link $RUNTIME_MILESTONE ${RUNTIME}_runtime.compact.compressed.wasm https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/$CI_JOB_ID/artifacts/$RELEASE_FILE_WASM
- build_release # In the future: also build gtest and g1 runtimes and atach them
artifacts:
expire_in: never
paths:
- $CI_PROJECT_DIR/release/
tags:
- kepler
--- ---
name: Ask a Question name: Ask a Question
about: Ask a question about this template. about: Ask a question about duniter-v2s.
title: "" title: ""
labels: question labels: question
assignees: "" assignees: ""
......
--- ---
name: Report a Bug name: Report a Bug
about: Report a problem with this template. about: Report a problem with duniter-v2s.
title: "" title: ""
labels: bug labels: bug
assignees: "" assignees: ""
...@@ -8,9 +8,7 @@ assignees: "" ...@@ -8,9 +8,7 @@ assignees: ""
**Description** **Description**
_Tell us what happened. In particular, be specific about any changes you made to this template. _Tell us what happened. Please elaborate, the more information you are able to
Ideally, provide a link to your project's GitHub repository. Please note that we are not able to
support all conceivable changes to this template project, but the more information you are able to
provide the more equipped we will be to help._ provide the more equipped we will be to help._
**Steps to Reproduce** **Steps to Reproduce**
...@@ -33,7 +31,7 @@ _Describe the environment in which you encountered this bug. Use the list below ...@@ -33,7 +31,7 @@ _Describe the environment in which you encountered this bug. Use the list below
and add additional information if you think it's relevant._ and add additional information if you think it's relevant._
- Operating system: - Operating system:
- Template version/tag: - Git commit/tag:
- Rust version (run `rustup show`): - Rust version (run `rustup show`):
**Logs, Errors or Screenshots** **Logs, Errors or Screenshots**
......
--- ---
name: Suggest a Feature name: Suggest a Feature
about: Suggest a new feature or an improvement to an existing feature for this template. about: Suggest a new feature or an improvement to an existing feature for duniter-v2s.
title: "" title: ""
labels: enhancement labels: enhancement
assignees: "" assignees: ""
...@@ -9,8 +9,8 @@ assignees: "" ...@@ -9,8 +9,8 @@ assignees: ""
**Motivation** **Motivation**
_Describe the need or frustration that motivated you to make this suggestion. Please note that the _Describe the need or frustration that motivated you to make this suggestion. Please note that the
goal of this project is to provide a general-purpose template project, so please take care when goal of this project is to bring the Ğ1 blockchain itself, so please take care when
suggesting features that may be specific to a particular use case._ suggesting features that may not concern the Ğ1 currency._
**Suggested Solution** **Suggested Solution**
......
...@@ -29,7 +29,7 @@ USER duniter ...@@ -29,7 +29,7 @@ USER duniter
# check if executable works in this container # check if executable works in this container
RUN /usr/local/bin/duniter --version RUN /usr/local/bin/duniter --version
EXPOSE 30333 9933 9944 EXPOSE 30333 9944
VOLUME ["/duniter"] VOLUME ["/duniter"]
ENTRYPOINT ["/usr/local/bin/duniter"] ENTRYPOINT ["/usr/local/bin/duniter"]
...@@ -9,7 +9,12 @@ ...@@ -9,7 +9,12 @@
"request": "launch", "request": "launch",
"name": "Debug unit tests in library 'duniter'", "name": "Debug unit tests in library 'duniter'",
"cargo": { "cargo": {
"args": ["test", "--no-run", "--lib", "--package=duniter"], "args": [
"test",
"--no-run",
"--lib",
"--package=duniter"
],
"filter": { "filter": {
"name": "duniter", "name": "duniter",
"kind": "lib" "kind": "lib"
...@@ -23,13 +28,20 @@ ...@@ -23,13 +28,20 @@
"request": "launch", "request": "launch",
"name": "Debug executable 'duniter'", "name": "Debug executable 'duniter'",
"cargo": { "cargo": {
"args": ["build"], "args": [
"build"
],
"filter": { "filter": {
"name": "duniter", "name": "duniter",
"kind": "bin" "kind": "bin"
} }
}, },
"args": ["--tmp", "--dev", "--execution", "Native"], "args": [
"--tmp",
"--dev",
"--execution",
"Native"
],
"cwd": "${workspaceFolder}" "cwd": "${workspaceFolder}"
}, },
{ {
...@@ -37,7 +49,12 @@ ...@@ -37,7 +49,12 @@
"request": "launch", "request": "launch",
"name": "Debug unit tests in executable 'duniter'", "name": "Debug unit tests in executable 'duniter'",
"cargo": { "cargo": {
"args": ["test", "--no-run", "--bin=duniter", "--package=duniter"], "args": [
"test",
"--no-run",
"--bin=duniter",
"--package=duniter"
],
"filter": { "filter": {
"name": "duniter", "name": "duniter",
"kind": "bin" "kind": "bin"
...@@ -51,7 +68,12 @@ ...@@ -51,7 +68,12 @@
"request": "launch", "request": "launch",
"name": "Debug unit tests in library 'gdev-runtime'", "name": "Debug unit tests in library 'gdev-runtime'",
"cargo": { "cargo": {
"args": ["test", "--no-run", "--lib", "--package=gdev-runtime"], "args": [
"test",
"--no-run",
"--lib",
"--package=gdev-runtime"
],
"filter": { "filter": {
"name": "gdev-runtime", "name": "gdev-runtime",
"kind": "lib" "kind": "lib"
...@@ -65,7 +87,12 @@ ...@@ -65,7 +87,12 @@
"request": "launch", "request": "launch",
"name": "Debug unit tests in library 'pallet-certification'", "name": "Debug unit tests in library 'pallet-certification'",
"cargo": { "cargo": {
"args": ["test", "--no-run", "--lib", "--package=pallet-certification"], "args": [
"test",
"--no-run",
"--lib",
"--package=pallet-certification"
],
"filter": { "filter": {
"name": "pallet-certification", "name": "pallet-certification",
"kind": "lib" "kind": "lib"
...@@ -78,29 +105,15 @@ ...@@ -78,29 +105,15 @@
"type": "lldb", "type": "lldb",
"request": "launch", "request": "launch",
"name": "Debug unit tests in library 'pallet-identity'", "name": "Debug unit tests in library 'pallet-identity'",
"cargo": {
"args": ["test", "--no-run", "--lib", "--package=pallet-identity"],
"filter": {
"name": "pallet-identity",
"kind": "lib"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in library 'pallet-ud-accounts-storage'",
"cargo": { "cargo": {
"args": [ "args": [
"test", "test",
"--no-run", "--no-run",
"--lib", "--lib",
"--package=pallet-ud-accounts-storage" "--package=pallet-identity"
], ],
"filter": { "filter": {
"name": "pallet-ud-accounts-storage", "name": "pallet-identity",
"kind": "lib" "kind": "lib"
} }
}, },
......
{ {
"editor.formatOnSave": true, "editor.formatOnSave": true,
"editor.rulers": [100], "editor.rulers": [
"[typescript]": { 100
"editor.defaultFormatter": "esbenp.prettier-vscode" ],
},
"[json]": { "[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "vscode.json-language-features"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}, },
"[yaml]": { "[yaml]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
...@@ -18,5 +14,6 @@ ...@@ -18,5 +14,6 @@
"port_p2p": 19931, "port_p2p": 19931,
"port_rpc": 19932, "port_rpc": 19932,
"port_ws": 19933 "port_ws": 19933
} },
"rust-analyzer.showUnlinkedFileNotification": false
} }
\ No newline at end of file
...@@ -4,7 +4,7 @@ Before contributing, please make sure that your development environment is prope ...@@ -4,7 +4,7 @@ Before contributing, please make sure that your development environment is prope
[Setting up your development environment] [Setting up your development environment]
Sign-ups on our gitlab are disabled. If you would like to contribute, please ask for its creation on [the technical forum]. Sign-ups on our gitlab are disabled. If you would like to contribute, please ask for an account on [the technical forum].
When contributing to this repository, please first discuss the change you wish to make via issue or When contributing to this repository, please first discuss the change you wish to make via issue or
via [the technical forum] before making a change. via [the technical forum] before making a change.
...@@ -13,40 +13,38 @@ Please note we have a specific workflow, please follow it in all your interactio ...@@ -13,40 +13,38 @@ Please note we have a specific workflow, please follow it in all your interactio
## Developer documentation ## Developer documentation
Please read [Developer documentation] before contribute. Please read [Developer documentation] before contributing.
## Workflow ## Workflow
- If there is an unassigned issue about the thing you want to contribute to, assign the issue to yourself.
- Create a branch based on `master` and prefixed with your nickname. Give your branch a short name indicating the subject. - Create a branch based on `master` and prefixed with your nickname. Give your branch a short name indicating the subject.
- Create an MR from your branch to `master`. - Create an MR from your branch to `master`. Prefix the title with `Draft: ` until it's ready to be merged.
- Never contribute to a branch of ahother contributor! If the contributor make a `git rebase` your commit will be lost ! - If the MR is related to an issue, mention the issue in the description using the `#42` syntax.
- Never push to a branch of another contributor! If the contributor makes a `git rebase` your commit will be lost!
- Before you push your commit: - Before you push your commit:
- Apply formatters (rustfmt and prettier) and linter (clippy) - Apply formatters (rustfmt and prettier) and linter (clippy)
- Document your code. - Document your code
- Apply the [project's git conventions] - Apply the [project's git conventions]
## Merge Process ## Merge Process
1. Ensure you rebased your branch on the latest `master` commit to avoid any merge conflicts. 1. Ensure you rebased your branch on the latest `master` commit to avoid any merge conflicts.
1. Ensure that you respect the [commit naming conventions].
2. Ensure that you respect the [commit naming conventions]. 1. Ensure that all automated tests pass with the `cargo test` command.
1. Ensure that the code is well formatted `cargo fmt` and complies with the good practices `cargo clippy`. If you have been working on tests, check everything with `cargo clippy --all --tests`.
3. Ensure that all automated tests pass with the `npm test` command. 1. Update the documentation with details of changes to the interface, this includes new environment variables, exposed ports, useful file locations and container parameters.
1. Push your branch on the gitlab and create a merge request. Briefly explain the purpose of your contribution in the description of the merge request.
4. Update the documentation with details of changes to the interface, this includes new environment 1. Mark the MR as ready (or remove the `Draft: ` prefix) only when you think it can be reviewed or merged.
variables, exposed ports, useful file locations and container parameters. 1. Assign a Duniter reviewer so they will review your contribution. If you still have no news after several weeks, ask explicitly for a review, or tag another reviewer or/and talk about your contribution on [the technical forum].
5. Push your branch on the gitlab and create a merge request. Briefly explain the purpose of your contribution in the description of the merge request.
6. Tag a Duniter reviewer so they will review your contribution. If you still have no news after several weeks, tag another reviewer or/and talk about your contribution on [the technical forum].
## List of Duniter's reviewers ## List of Duniter's reviewers
- @librelois - @HugoTrentesaux
- @tuxmain - @tuxmain
[commit naming conventions]: ./docs/dev/git-conventions.md#naming-commits [commit naming conventions]: ./docs/dev/git-conventions.md#naming-commits
[Developer documentation]: ./docs/dev/index.md [Developer documentation]: ./docs/dev/
[project's git conventions]: ./docs/dev/git-conventions.md [project's git conventions]: ./docs/dev/git-conventions.md
[Setting up your development environment]: ./docs/setup.md [Setting up your development environment]: ./docs/dev/setup.md
[the technical forum]: https://forum.duniter.org [the technical forum]: https://forum.duniter.org
Source diff could not be displayed: it is too large. Options to address this: view the blob.
[package]
authors = ['Axiom-Team Developers <https://axiom-team.fr>']
build = 'node/build.rs'
description = 'Crypto-currency software (based on Substrate framework) to operate Ğ1 libre currency'
edition = '2018'
homepage = 'https://substrate.dev'
license = 'AGPL-3.0'
name = 'duniter'
repository = 'https://git.duniter.org/nodes/rust/duniter-v2s'
version = '0.1.0'
[package.metadata.docs.rs]
targets = ['x86_64-unknown-linux-gnu']
[[bin]]
bench = false
name = 'duniter'
path = "node/src/main.rs"
[features]
default = ["gdev"]
g1 = ["g1-runtime"]
gdev = ["gdev-runtime"]
gtest = ["gtest-runtime"]
runtime-benchmarks = [
'g1-runtime',
'g1-runtime/runtime-benchmarks',
'gdev-runtime',
'gdev-runtime/runtime-benchmarks',
'gtest-runtime',
'gtest-runtime/runtime-benchmarks',
]
[build-dependencies]
clap = { version = "3.0" }
#clap_complete = { version = "3.0" }
substrate-build-script-utils = { git = 'https://github.com/librelois/substrate.git', branch = 'duniter-monthly-2022-02' }
[dev-dependencies]
rusty-hook = "^0.11.2"
[dependencies]
# local dependencies
common-runtime = { path = 'runtime/common' }
g1-runtime = { path = 'runtime/g1', optional = true }
gdev-runtime = { path = 'runtime/gdev', optional = true }
gtest-runtime = { path = 'runtime/gtest', optional = true }
pallet-certification = { path = 'pallets/certification' }
sp-membership = { path = 'primitives/membership' }
# crates.io dependencies
async-io = "1.3"
clap = { version = "3.0", features = ["derive"] }
clap_complete = { version = "3" }
futures = { version = "0.3.1", features = ["compat"] }
hex = "0.4.3"
jsonrpc-core = '18.0.0'
log = "0.4"
maplit = '1.0.2'
memmap2 = "0.5.0"
serde = "1.0"
serde_json = "1.0.64"
# substrate dependencies
frame-benchmarking = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
frame-benchmarking-cli = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
pallet-grandpa = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
pallet-transaction-payment-rpc = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-basic-authorship = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-chain-spec = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-cli = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-client-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-consensus = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
babe = { package = "sc-consensus-babe", git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
manual-seal = { package = "sc-consensus-manual-seal", git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-consensus-uncles = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-executor = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-finality-grandpa = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-keystore = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-network = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-rpc-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-service = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-telemetry = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-transaction-pool = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sc-transaction-pool-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-authority-discovery = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-block-builder = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-blockchain = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-consensus = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-consensus-babe = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-core = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-finality-grandpa = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-io = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-offchain = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-keyring = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-keystore = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-runtime = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-session = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-storage = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-timestamp = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-transaction-pool = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
sp-trie = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
substrate-frame-rpc-system = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-02" }
[workspace] [workspace]
resolver = "2" resolver = "2"
members = [ members = [
'client/distance',
'distance-oracle',
'end2end-tests', 'end2end-tests',
'live-tests',
'node',
'pallets/authority-members',
'pallets/certification', 'pallets/certification',
'pallets/distance',
'pallets/duniter-test-parameters', 'pallets/duniter-test-parameters',
'pallets/duniter-test-parameters/macro', 'pallets/duniter-test-parameters/macro',
'pallets/duniter-wot', 'pallets/duniter-wot',
'pallets/identity', 'pallets/identity',
'pallets/membership', 'pallets/membership',
'pallets/authority-members', 'pallets/oneshot-account',
'pallets/ud-accounts-storage', 'pallets/quota',
'pallets/smith-members',
'pallets/universal-dividend', 'pallets/universal-dividend',
'pallets/upgrade-origin', 'pallets/upgrade-origin',
'primitives/distance',
'primitives/membership', 'primitives/membership',
'resources/weight_analyzer',
'runtime/common', 'runtime/common',
'runtime/gdev', 'runtime/gdev',
'xtask', 'xtask',
] ]
[workspace.package]
authors = [
'librelois <c@elo.tf>',
'tuxmain <tuxmain@zettascript.org>',
'c-geek <https://forum.duniter.org/u/cgeek>',
'HugoTrentesaux <https://trentesaux.fr>',
'bgallois <benjamin@gallois.cc>',
'Duniter Developers <https://duniter.org>',
'Axiom-Team Developers <https://axiom-team.fr>',
]
description = 'Crypto-currency software (based on Substrate framework) to operate Ğ1 libre currency'
edition = '2021'
homepage = 'https://duniter.org'
license = 'AGPL-3.0'
repository = 'https://git.duniter.org/nodes/rust/duniter-v2s'
version = '1.0.0'
[workspace.dependencies]
# crates.io dependencies
anyhow = { version = "1.0.81", default-features = false }
base64 = { version = "0.22.1", default-features = false }
countmap = { version = "0.2.0", default-features = false }
ctrlc = { version = "3.4.4", default-features = false }
cucumber = { version = "0.20.2", default-features = false }
env_logger = { version = "0.11.3", default-features = false }
notify = { version = "6.1.1", default-features = false }
portpicker = { version = "0.1.1", default-features = false }
notify-debouncer-mini = { version = "0.4.1", default-features = false }
async-io = { version = "2.3.1", default-features = false }
async-trait = { version = "0.1.78", default-features = false }
thiserror = { version = "1.0.58", default-features = false }
frame-metadata = { version = "16.0.0", default-features = false }
graphql_client = { version = "0.13.0" }
bs58 = { version = "0.5.1", default-features = false }
placeholder = { version = "1.1.4", default-features = false }
clap = { version = "4.5.3" }
clap_complete = { version = "4.5.1" }
reqwest = { version = "0.12.0", default-features = false, features = [
"rustls-tls",
] }
glob = { version = "0.3.1", default-features = false }
convert_case = { version = "0.6.0", default-features = false }
subweight-core = { version = "3.3.1", default-features = false }
version_check = { version = "0.9.4", default-features = false }
codec = { package = "parity-scale-codec", version = "3.6.9", default-features = false }
enum-as-inner = { version = "=0.5.1", default-features = false } #https://github.com/bluejekyll/trust-dns/issues/1946
futures = { version = "0.3.30", default-features = false }
tera = { version = "1", default-features = false }
hex = { version = "0.4.3", default-features = false }
jsonrpsee = { version = "0.24.3", default-features = false } # Version should exactly match polkadot one
lazy_static = { version = "1.4.0", default-features = false }
log = { version = "0.4.21", default-features = false }
maplit = { version = '1.0.2', default-features = false }
proc-macro2 = { version = '1.0.79', default-features = false }
quote = { version = '1.0.35', default-features = false }
syn = { version = '2.0.53', default-features = false }
memmap2 = { version = "0.9.4", default-features = false }
num-format = { version = "0.4.4", default-features = false }
smallvec = { version = "1.13.2", default-features = false }
hex-literal = { version = '0.4.1', default-features = false }
scale-info = { version = "2.11.0", default-features = false }
scale-value = { version = "0.14.1", default-features = false }
serde = { version = "1.0.197", default-features = false }
serde_derive = { version = "1.0.197", default-features = false }
serde_yaml = { version = "0.9.33", default-features = false }
serde_json = { version = "1.0.114", default-features = false }
fnv = { version = "1.0.7", default-features = false }
tokio = { version = "1.36.0", default-features = false }
time = { version = "0.3.34", default-features = false }
time-macros = { version = "0.2.17", default-features = false }
num-traits = { version = "0.2.18", default-features = false }
rayon = { version = "1.9.0", default-features = false }
simple_logger = { version = "4.3.3", default-features = false }
bincode = { version = "1.3.3", default-features = false }
dubp-wot = { version = "0.11.1", default-features = false }
flate2 = { version = "1.0.28", default-features = false }
array-bytes = { version = "6.2.2", default-features = false }
parking_lot = { version = "0.12.1" }
# Subxt
subxt = { git = 'https://github.com/paritytech/subxt', tags = '0.41.0', default-features = false }
# local dependencies
weight-analyzer = { path = "resources/weight_analyzer", default-features = false }
common-runtime = { path = 'runtime/common', default-features = false }
dc-distance = { path = 'client/distance', default-features = false }
distance-oracle = { path = 'distance-oracle', default-features = false }
g1-runtime = { path = 'runtime/g1', default-features = false }
gdev-runtime = { path = 'runtime/gdev', default-features = false }
gtest-runtime = { path = 'runtime/gtest', default-features = false }
pallet-authority-members = { path = 'pallets/authority-members', default-features = false }
pallet-certification = { path = 'pallets/certification', default-features = false }
pallet-distance = { path = "pallets/distance", default-features = false }
pallet-duniter-account = { path = 'pallets/duniter-account', default-features = false }
pallet-duniter-test-parameters = { path = 'pallets/duniter-test-parameters', default-features = false }
pallet-duniter-test-parameters-macro = { path = 'pallets/duniter-test-parameters/macro', default-features = false }
duniter-primitives = { path = 'primitives/duniter', default-features = false }
pallet-duniter-wot = { path = 'pallets/duniter-wot', default-features = false }
pallet-identity = { path = 'pallets/identity', default-features = false }
pallet-membership = { path = 'pallets/membership', default-features = false }
pallet-offences = { path = 'pallets/offences', default-features = false }
pallet-oneshot-account = { path = 'pallets/oneshot-account', default-features = false }
pallet-provide-randomness = { path = 'pallets/provide-randomness', default-features = false }
pallet-quota = { path = 'pallets/quota', default-features = false }
pallet-session-benchmarking = { path = 'pallets/session-benchmarking', default-features = false }
pallet-smith-members = { path = 'pallets/smith-members', default-features = false }
pallet-universal-dividend = { path = 'pallets/universal-dividend', default-features = false }
pallet-upgrade-origin = { path = 'pallets/upgrade-origin', default-features = false }
sp-distance = { path = 'primitives/distance', default-features = false }
sp-membership = { path = 'primitives/membership', default-features = false }
# substrate dependencies
pallet-transaction-payment-rpc = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-metadata-hash-extension = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-executive = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-support = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-system = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-system-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-system-rpc-runtime-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-try-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-atomic-swap = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-authority-discovery = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-authorship = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-collective = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-im-online = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-multisig = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-preimage = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-proxy = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-scheduler = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-sudo = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-timestamp = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-transaction-payment = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-transaction-payment-rpc-runtime-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-treasury = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
pallet-utility = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-arithmetic = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-block-builder = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-client-db = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-client-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-consensus-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-rpc = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-consensus-grandpa-rpc = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-consensus-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-consensus-babe-rpc = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-blockchain = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-offchain = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-consensus-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-consensus-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-inherents = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-offchain = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-staking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-weights = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-transaction-pool = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-version = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-cli = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-service = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-trie = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-authority-discovery = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-genesis-builder = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-keyring = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-consensus = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-core-hashing = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-keystore = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-rpc-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
substrate-wasm-builder = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-io = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
substrate-build-script-utils = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0' }
node-primitives = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
frame-benchmarking-cli = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-chain-spec = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-consensus = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-consensus-manual-seal = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-executor = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-telemetry = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-transaction-pool = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-basic-authorship = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-network = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-network-sync = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-network-test = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-utils = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-keystore = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-storage = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-timestamp = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-transaction-storage-proof = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sc-transaction-pool-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
sp-state-machine = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
substrate-frame-rpc-system = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.18.0', default-features = false }
# The list of dependencies below (which can be both direct and indirect dependencies) are crates # The list of dependencies below (which can be both direct and indirect dependencies) are crates
# that are suspected to be CPU-intensive, and that are unlikely to require debugging (as some of # that are suspected to be CPU-intensive, and that are unlikely to require debugging (as some of
# their debug info might be missing) or to require to be frequently recompiled. We compile these # their debug info might be missing) or to require to be frequently recompiled. We compile these
...@@ -141,7 +240,6 @@ members = [ ...@@ -141,7 +240,6 @@ members = [
# This list is ordered alphabetically. # This list is ordered alphabetically.
[profile.dev.package] [profile.dev.package]
blake2 = { opt-level = 3 } blake2 = { opt-level = 3 }
blake2-rfc = { opt-level = 3 }
blake2b_simd = { opt-level = 3 } blake2b_simd = { opt-level = 3 }
chacha20poly1305 = { opt-level = 3 } chacha20poly1305 = { opt-level = 3 }
cranelift-codegen = { opt-level = 3 } cranelift-codegen = { opt-level = 3 }
...@@ -149,9 +247,6 @@ cranelift-wasm = { opt-level = 3 } ...@@ -149,9 +247,6 @@ cranelift-wasm = { opt-level = 3 }
crc32fast = { opt-level = 3 } crc32fast = { opt-level = 3 }
crossbeam-deque = { opt-level = 3 } crossbeam-deque = { opt-level = 3 }
crypto-mac = { opt-level = 3 } crypto-mac = { opt-level = 3 }
curve25519-dalek = { opt-level = 3 }
ed25519-dalek = { opt-level = 3 }
flate2 = { opt-level = 3 }
futures-channel = { opt-level = 3 } futures-channel = { opt-level = 3 }
hashbrown = { opt-level = 3 } hashbrown = { opt-level = 3 }
hash-db = { opt-level = 3 } hash-db = { opt-level = 3 }
...@@ -160,7 +255,6 @@ httparse = { opt-level = 3 } ...@@ -160,7 +255,6 @@ httparse = { opt-level = 3 }
integer-sqrt = { opt-level = 3 } integer-sqrt = { opt-level = 3 }
keccak = { opt-level = 3 } keccak = { opt-level = 3 }
libm = { opt-level = 3 } libm = { opt-level = 3 }
librocksdb-sys = { opt-level = 3 }
libsecp256k1 = { opt-level = 3 } libsecp256k1 = { opt-level = 3 }
libz-sys = { opt-level = 3 } libz-sys = { opt-level = 3 }
mio = { opt-level = 3 } mio = { opt-level = 3 }
...@@ -178,16 +272,12 @@ smallvec = { opt-level = 3 } ...@@ -178,16 +272,12 @@ smallvec = { opt-level = 3 }
snow = { opt-level = 3 } snow = { opt-level = 3 }
twox-hash = { opt-level = 3 } twox-hash = { opt-level = 3 }
uint = { opt-level = 3 } uint = { opt-level = 3 }
wasmi = { opt-level = 3 }
x25519-dalek = { opt-level = 3 } x25519-dalek = { opt-level = 3 }
yamux = { opt-level = 3 } yamux = { opt-level = 3 }
zeroize = { opt-level = 3 } zeroize = { opt-level = 3 }
[profile.release] [profile.release]
# Link Time Optimization
lto = "thin"
# Substrate runtime requires unwinding. # Substrate runtime requires unwinding.
panic = "unwind" panic = "unwind"
[patch.crates-io]
# rw-stream-sink has not been updated for 2 years and uses a too old version of pin-project (v0.4.28)
# For the project to compile, we have to patch this dependency to force the use of pin-project v1.x
rw-stream-sink = { git = "https://github.com/librelois/rw-stream-sink", branch = "master" }
# Duniter v2s # Duniter v2s
A rewriting of duniter based on [Substrate](https://www.substrate.io/) framework. 🆙 A rewriting of [Duniter v1](https://duniter.org) in the [Substrate](https://www.substrate.io/) framework.
duniter-v2s is under active development, only a test network called "ĞDev" is deployed. ⚠️ Duniter-v2s is under active development.
🚧 A test network called "ĞDev" is deployed, allowing to test wallets and indexers.
<div align="center">
<img alt="logov2" src="https://duniter.fr/img/duniterv2.svg" width="128" height="128"/>
</div>
## Documentation
Multiple documentation sources are available depending on the level of detail you need.
- Full technical Rust doc (auto-generated with `cargo xtask gen-doc`) : https://doc-duniter-org.ipns.pagu.re/duniter/
- User and client developer doc (official website) : https://duniter.org/wiki/duniter-v2/
- Internal documentation (within git repository), see table of contents below : [./doc](./doc)
### Internal documentation TOC
- [README](./README.md) (this file)
- [Use](#use)
- [Contribute](#contribute)
- [License](#license)
- [docs](./docs/) internal documentation
- [api](./docs/api/) API
- [manual](./docs/api/manual.md) manage account and identities
- [runtime-calls](./docs/api/runtime-calls.md) the calls you can submit through the RPC API
- [runtime-errors](./docs/api/runtime-errors.md) the errors you can get submitting a call
- [runtime-events](./docs/api/runtime-events.md) the events you can get submitting a call
- [dev](./docs/dev/) developer documentation
- [beginner-walkthrough](./docs/dev/beginner-walkthrough.md)
- [git-conventions](./docs/dev/git-conventions.md)
- [pallet_conventions](./docs/dev/pallet_conventions.md)
- [launch-a-live-network](./docs/dev/launch-a-live-network.md)
- [setup](./docs/dev/setup.md)
- [compilation features](./docs/dev/compilation.md)
- [verify-runtime-code](./docs/dev/verify-runtime-code.md)
- [weights-benchmarking](./docs/dev/weights-benchmarking.md)
- [upgrade-substrate](./docs/dev/upgrade-substrate.md)
- [replay-block](./docs/test/replay-block.md)
- [user](./docs/user/) user documentation
- [autocompletion](./docs/user/autocompletion.md)
- [debian installation](./docs/user/installation_debian.md)
- [distance](./docs/user/distance.md)
- [fees](./docs/user/fees.md)
- [packaging](./docs/packaging/) packaging
- [build-for-arm](./docs/packaging/build-for-arm.md) build for ARM architecture
- [build-debian](./docs/packaging/build-deb.md) build a native Debian package
- [docker](./docker/) docker-related documentation
- [end2end-tests](./end2end-tests/) automated end to end tests written with cucumber
- [live-tests](./live-tests/) sanity checks to test the storage of a live chain
## Use ## Use
...@@ -10,65 +59,41 @@ duniter-v2s is under active development, only a test network called "ĞDev" is d ...@@ -10,65 +59,41 @@ duniter-v2s is under active development, only a test network called "ĞDev" is d
The easiest way is to use the docker image. The easiest way is to use the docker image.
Minimal command to deploy a **temporary** mirror peer: Minimal command to deploy a temporary mirror peer:
```docker ```docker
docker run -it -p9944:9944 -e DUNITER_CHAIN_NAME=gdev duniter/duniter-v2s:v0.1.0 --tmp --execution=Wasm docker run -it -p9944:9944 -e DUNITER_CHAIN_NAME=gdev duniter/duniter-v2s-gdev-800:latest
``` ```
To go further, read [How to deploy a permanent mirror node on ĞDev network](./docs/user/mirror.md). To go further, read [How to deploy a permanent mirror node on ĞDev network 🔗](https://duniter.org/wiki/duniter-v2/#run-a-mirror-node).
### Create your local blockchain ### Create your local blockchain
It can be useful to deploy your local blockchain, for instance to have a controled environement It can be useful to deploy your local blockchain, for instance to have a controlled environment to develop/test an application that interacts with the blockchain.
to develop/test an application that interact with the blockchain.
```docker ```docker
docker run -it -p9944:9944 duniter/duniter-v2s:v0.1.0 --tmp docker run -it -p9944:9944 duniter/duniter-v2s-gdev-800:latest
``` ```
Or use the `docker-compose.yml` at the root of this repository. Or use the [`docker-compose.yml`](./docker-compose.yml) at the root of this repository.
#### Control when your local blockchain should produce blocks #### Control when your local blockchain should produce blocks
By default, your local blockchain produce a new block every 6 seconds, which is not practical in some cases. By default, your local blockchain produces a new block every 6 seconds, which is not practical in some cases.
You can decide when to produce blocks with the cli option `--sealing`, , there are 2 possible modes:
* `--sealing=instant`: produce a block immediately upon receiving a transaction into the transaction pool
* `--sealing=manual`: produce a block upon receiving an RPC request (method `engine_createBlock`).
### Autocompletion
See [autocompletion](./docs/user/autocompletion.md). You can decide when to produce blocks with the cli option `--sealing` which has two modes:
## Test - `--sealing=instant`: produce a block immediately upon receiving a transaction into the transaction pool
- `--sealing=manual`: produce a block upon receiving an RPC request (method `engine_createBlock`).
### Test a specific commit ### Shell autocompletion
At each commit on master, an image with the tag `debug-sha-********` is published, where `********` See [autocompletion](./docs/user/autocompletion.md) to generate shell autocompletion for duniter commands.
corresponds to the first 8 hash characters of the commit.
Usage:
```docker
docker run -it -p9944:9944 --name duniter-v2s duniter/duniter-v2s:debug-sha-b836f1a6
```
Then open `https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944` in a browser.
Enable detailed logging:
```docker
docker run -it -p9944:9944 --name duniter-v2s \
-e RUST_LOG=debug \
-e RUST_BACKTRACE=1 \
-lruntime=debug \
duniter/duniter-v2s:debug-sha-b836f1a6
```
## Contribute ## Contribute
If you are beginner in Rust and need a well guided tutorial, follow the [beginner walkthrough](./docs/dev/beginner-walkthrough.md).
Before any contribution, please read carefully the [CONTRIBUTING](./CONTRIBUTING.md) file and our [git conventions](./docs/dev/git-conventions.md). Before any contribution, please read carefully the [CONTRIBUTING](./CONTRIBUTING.md) file and our [git conventions](./docs/dev/git-conventions.md).
### Setup your dev environment ### Setup your dev environment
...@@ -77,7 +102,7 @@ First, complete the [basic setup instructions](./docs/dev/setup.md). ...@@ -77,7 +102,7 @@ First, complete the [basic setup instructions](./docs/dev/setup.md).
### Build ### Build
NOTE: You must first follow the instructions in the [Setup] section (#setup). NOTE: You must first follow the instructions in the [Setup](#setup-your-dev-environment) section.
Use the following command to build the node without launching it: Use the following command to build the node without launching it:
...@@ -90,20 +115,11 @@ cargo build ...@@ -90,20 +115,11 @@ cargo build
Use Rust's native `cargo` command to build and launch the node: Use Rust's native `cargo` command to build and launch the node:
```sh ```sh
cargo run -- --dev --tmp cargo run -- --dev
``` ```
This will deploy a local blockchain with test accounts (Alice, Bob, etc) in the genesis. This will deploy a local blockchain with test accounts (Alice, Bob, etc) in the genesis.
Open `https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944` to watch and interact with your node.
## Single-Node Development Chain
This command will start the single-node development chain with persistent state:
```bash
./target/debug/duniter --dev --tmp
```
Then open `https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944` in a browser.
Start the development chain with detailed logging: Start the development chain with detailed logging:
...@@ -111,134 +127,24 @@ Start the development chain with detailed logging: ...@@ -111,134 +127,24 @@ Start the development chain with detailed logging:
RUST_LOG=debug RUST_BACKTRACE=1 ./target/debug/duniter -lruntime=debug --dev RUST_LOG=debug RUST_BACKTRACE=1 ./target/debug/duniter -lruntime=debug --dev
``` ```
## Multi-Node Local Testnet ## License
If you want to see the multi-node consensus algorithm in action, refer to
[our Start a Private Network tutorial](https://substrate.dev/docs/en/tutorials/start-a-private-network/).
### Purge previous lacal testnet
``` See [LICENSE](./LICENSE)
./target/debug/duniter purge-chain --base-path /tmp/alice --chain local
./target/debug/duniter purge-chain --base-path /tmp/bob --chain local
``` ```
CopyLeft 2021-2023 Axiom-Team
### Start Alice's node Some parts borrowed from Polkadot (Parity Technologies (UK) Ltd.)
```bash Duniter-v2S is free software: you can redistribute it and/or modify
./target/debug/duniter \ it under the terms of the **GNU Affero General Public License** as published by
--base-path /tmp/alice \ the Free Software Foundation, **version 3** of the License.
--chain local \
--alice \
--port 30333 \
--ws-port 9945 \
--rpc-port 9933 \
--node-key 0000000000000000000000000000000000000000000000000000000000000001 \
--validator
```
### Start Bob's node Duniter-v2S is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
```bash You should have received a copy of the GNU Affero General Public License
./target/debug/duniter \ along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
--base-path /tmp/bob \
--chain local \
--bob \
--port 30334 \
--ws-port 9946 \
--rpc-port 9934 \
--validator \
--bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp
``` ```
## Project Structure
A Substrate project such as this consists of a number of components that are spread across a few
directories.
### Node
A blockchain node is an application that allows users to participate in a blockchain network.
Substrate-based blockchain nodes expose a number of capabilities:
- Networking: Substrate nodes use the [`libp2p`](https://libp2p.io/) networking stack to allow the
nodes in the network to communicate with one another.
- Consensus: Blockchains must have a way to come to
[consensus](https://substrate.dev/docs/en/knowledgebase/advanced/consensus) on the state of the
network. Substrate makes it possible to supply custom consensus engines and also ships with
several consensus mechanisms that have been built on top of
[Web3 Foundation research](https://research.web3.foundation/en/latest/polkadot/NPoS/index.html).
- RPC Server: A remote procedure call (RPC) server is used to interact with Substrate nodes.
There are several files in the `node` directory - take special note of the following:
- [`chain_spec.rs`](./node/src/chain_spec.rs): A
[chain specification](https://substrate.dev/docs/en/knowledgebase/integrate/chain-spec) is a
source code file that defines a Substrate chain's initial (genesis) state. Chain specifications
are useful for development and testing, and critical when architecting the launch of a
production chain. Take note of the `development_chain_spec` and `testnet_genesis` functions, which
are used to define the genesis state for the local development chain configuration. These
functions identify some
[well-known accounts](https://substrate.dev/docs/en/knowledgebase/integrate/subkey#well-known-keys)
and use them to configure the blockchain's initial state.
- [`service.rs`](./node/src/service.rs): This file defines the node implementation. Take note of
the libraries that this file imports and the names of the functions it invokes. In particular,
there are references to consensus-related topics, such as the
[longest chain rule](https://substrate.dev/docs/en/knowledgebase/advanced/consensus#longest-chain-rule),
the [Babe](https://substrate.dev/docs/en/knowledgebase/advanced/consensus#babe) block authoring
mechanism and the
[GRANDPA](https://substrate.dev/docs/en/knowledgebase/advanced/consensus#grandpa) finality
gadget.
After the node has been [built](#build), refer to the embedded documentation to learn more about the
capabilities and configuration parameters that it exposes:
```shell
./target/debug/duniter --help
```
### Runtime
In Substrate, the terms
"[runtime](https://substrate.dev/docs/en/knowledgebase/getting-started/glossary#runtime)" and
"[state transition function](https://substrate.dev/docs/en/knowledgebase/getting-started/glossary#stf-state-transition-function)"
are analogous - they refer to the core logic of the blockchain that is responsible for validating
blocks and executing the state changes they define. The Substrate project in this repository uses
the [FRAME](https://substrate.dev/docs/en/knowledgebase/runtime/frame) framework to construct a
blockchain runtime. FRAME allows runtime developers to declare domain-specific logic in modules
called "pallets". At the heart of FRAME is a helpful
[macro language](https://substrate.dev/docs/en/knowledgebase/runtime/macros) that makes it easy to
create pallets and flexibly compose them to create blockchains that can address
[a variety of needs](https://www.substrate.io/substrate-users/).
Review the [FRAME runtime implementation](./runtime/src/lib.rs) included in this template and note
the following:
- This file configures several pallets to include in the runtime. Each pallet configuration is
defined by a code block that begins with `impl $PALLET_NAME::Config for Runtime`.
- The pallets are composed into a single runtime by way of the
[`construct_runtime!`](https://crates.parity.io/frame_support/macro.construct_runtime.html)
macro, which is part of the core
[FRAME Support](https://substrate.dev/docs/en/knowledgebase/runtime/frame#support-library)
library.
### Pallets
The runtime in this project is constructed using many FRAME pallets that ship with the
[core Substrate repository](https://github.com/paritytech/substrate/tree/master/frame) and a
template pallet that is [defined in the `pallets`](./pallets/template/src/lib.rs) directory.
A FRAME pallet is compromised of a number of blockchain primitives:
- Storage: FRAME defines a rich set of powerful
[storage abstractions](https://substrate.dev/docs/en/knowledgebase/runtime/storage) that makes
it easy to use Substrate's efficient key-value database to manage the evolving state of a
blockchain.
- Dispatchables: FRAME pallets define special types of functions that can be invoked (dispatched)
from outside of the runtime in order to update its state.
- Events: Substrate uses [events](https://substrate.dev/docs/en/knowledgebase/runtime/events) to
notify users of important changes in the runtime.
- Errors: When a dispatchable fails, it returns an error.
- Config: The `Config` configuration interface is used to define the types and parameters upon
which a FRAME pallet depends.