Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time

Timestamping: Example Service

This project demonstrates how to create simple timestamping service using Exonum blockchain.

Timestamping demo

Getting started

Be sure you installed necessary packages:

Install and run

Using docker

Simply run the following command to start the timestamping service on 4 nodes on the local machine:

docker run -p 8000-8008:8000-8008 exonumhub/exonum-timestamping:v1.0.0

Ready! Find demo at

Docker will automatically pull image from the repository and run 4 nodes with public endpoints at, ..., and private ones at, ...,

To stop docker container, use docker stop <container id> command.


Getting started

Be sure you installed necessary packages:

Install and run

Below you will find a step-by-step guide to start the service on 4 nodes on the local machine.

Clone the project and install Rust dependencies:

git clone

cd exonum/examples/timestamping/backend

cargo install --path .

Generate blockchain configuration:

mkdir example

exonum-timestamping generate-template example/common.toml --validators-count 4

Generate templates of nodes configurations:

exonum-timestamping generate-config example/common.toml  example/1 --peer-address -n

exonum-timestamping generate-config example/common.toml  example/2 --peer-address -n

exonum-timestamping generate-config example/common.toml  example/3 --peer-address -n

exonum-timestamping generate-config example/common.toml  example/4 --peer-address -n

Note that in case of copying file with master key to the other machines, you must change the access permissions of this file for every machine. For example:

sudo chmod 600 master.key.toml

Finalize generation of nodes configurations:

exonum-timestamping finalize --public-api-address --private-api-address example/1/sec.toml example/1/node.toml --public-configs example/{1,2,3,4}/pub.toml

exonum-timestamping finalize --public-api-address --private-api-address example/2/sec.toml example/2/node.toml --public-configs example/{1,2,3,4}/pub.toml

exonum-timestamping finalize --public-api-address --private-api-address example/3/sec.toml example/3/node.toml --public-configs example/{1,2,3,4}/pub.toml

exonum-timestamping finalize --public-api-address --private-api-address example/4/sec.toml example/4/node.toml --public-configs example/{1,2,3,4}/pub.toml

Run nodes:

exonum-timestamping run --node-config example/1/node.toml --db-path example/1/db --public-api-address --master-key-pass pass

exonum-timestamping run --node-config example/2/node.toml --db-path example/2/db --public-api-address --master-key-pass pass

exonum-timestamping run --node-config example/3/node.toml --db-path example/3/db --public-api-address --master-key-pass pass

exonum-timestamping run --node-config example/4/node.toml --db-path example/4/db --public-api-address --master-key-pass pass

Before service deploy make sure that you have pure python implementation of protobuf:

pip uninstall protobuf
pip install --no-binary=protobuf protobuf

Deploy timestamping service.

python3 -m exonum_launcher -i ../timestamping.yaml

Install frontend dependencies:

cd ../frontend

npm install

Build sources:

npm run build

Run the application:

npm start -- --port=2268 --api-root=

--port is a port for Node.JS app.

--api-root is a root URL of public API address of one of nodes.

Ready! Find demo at


Timestamping demo is licensed under the Apache License (Version 2.0). See LICENSE for details.