Giter Site home page Giter Site logo

hyperledger / iroha Goto Github PK

View Code? Open in Web Editor NEW
413.0 34.0 272.0 47.29 MB

Iroha - A simple, enterprise-grade decentralized ledger

Home Page: https://wiki.hyperledger.org/display/iroha

License: Apache License 2.0

Python 3.25% Shell 0.28% Dockerfile 0.08% C 0.20% Rust 95.82% Nix 0.37%
docker iroha blockchain dlt hyperledger transactions distributed-ledger consensus

iroha's Introduction

Hyperledger Iroha

License Rust

Iroha is a simple and efficient blockchain ledger based on the distributed ledger technology (DLT). Its design principles are inspired by the Japanese Kaizen principle of eliminating excesses (muri).

Iroha can help you manage your accounts, assets, on-chain data storage with efficient smart contracts, while being Byzantine- and crash-fault tolerant.

Features

Iroha is a fully-featured blockchain ledger. With Iroha you can:

  • Create and manage custom fungible assets, such as currencies, gold, and others
  • Create and manage non-fungible assets
  • Manage user accounts with a domain hierarchy and multi-signature transactions
  • Use efficient portable smart contracts implemented either via WebAssembly or Iroha Special Instructions
  • Use both permissioned and permission-less blockchain deployments

Iroha offers:

  • Byzantine fault-tolerance with up to 33% fault rate
  • Efficient in-memory operations
  • Extensive telemetry support out of the box
  • Modular structure
  • Event-driven architecture with strongly-typed events

Overview

Engage with the community:

System Requirements

RAM and storage requirements depend on your use case: whether you need to build or deploy a network, how big it is, and so on. This table summarises the requirements:

Use case CPU RAM Storage1
Build (minimum) Dual-core CPU 4GB 20GB
Build (recommend) AMD Ryzen™ 5 1600 16GB 40GB
Deploy (small) Dual-core CPU 8GB+ 20GB+
Deploy (large) AMD Epyc™ 64-core 128GB 128GB+

Regarding RAM requirements:

  • On average, you need 5 KiB of RAM per account. A network with 1 000 000 accounts uses 5GiB of memory.
  • Each transfer or Mint instruction requires 1 KiB per instruction.
  • RAM usage grows linearly, as all transactions are stored in memory. You should expect to consume more RAM with a higher TPS and uptime.

CPU considerations:

  • Rust compilation highly favours multi-core CPUs such as Apple M1™, AMD Ryzen™/Threadripper™/Epyc™, and Intel Alder Lake™.
  • On systems with restricted memory and many CPU cores, Iroha compilation may sometimes fail with SIGKILL. To avoid it, restrict the number of CPU cores using cargo build -j <number>, where <number> (without the angle brackets) is half of your RAM capacity rounded down.

Build, Test, and Run Iroha

Prerequisites:

(Optional) Run included tests

Run included code tests:

cargo test

Run API functional tests:

cargo build
chmod +x target/debug/iroha
chmod +x target/debug/iroha_client_cli

bash ./scripts/test_env.sh setup
bash ./scripts/tests/register_mint_quantity.sh
bash ./scripts/test_env.sh cleanup

To generate WASM files for smart contracts, use the provided script generate_wasm.sh. If you are in the root directory of iroha run the following command:

bash ./scripts/generate_wasm.sh [path/to/smartcontracts]

The generated WASM files will be saved in a generated directory test-smartcontracts, relative to your current working directory. The default path for smart contracts in this project is client/tests/integration/smartcontracts.

Build Iroha

  • Build Iroha and accompanying binaries:

    cargo build
  • (Optional) Build the latest Iroha image:

    docker build . -t hyperledger/iroha2:dev

    If you skip this step, the Iroha container will be built using the latest available image.

Run Iroha

Once you have built Iroha, you can instantiate the minimum viable network:

docker compose up

With the docker-compose instance running, use Iroha Client CLI:

cargo run --bin iroha_client_cli -- --config ./configs/swarm/client.toml

Integration

Iroha project mainly consists of the following crates:

  • iroha is the command-line application for deploying an Iroha peer. Contains the routing table and definitions of API endpoints.
  • iroha_actor provides a message passing model for Iroha components.
  • iroha_client provides a library for building clients that communicate with peers.
  • iroha_client_cli is the reference implementation of a client.
  • iroha_config handles configuration and documentation generation for options and run-time changes.
  • iroha_core is the primary library used by all other crates, including the peer endpoint management.
  • iroha_crypto defines cryptographic aspects of Iroha.
  • kagami is used to generate cryptographic keys, default genesis, configuration reference, and schema.
  • iroha_data_model defines common data models in Iroha.
  • iroha_futures is used for async programming.
  • iroha_logger uses tracing to provide logging facilities.
  • iroha_macro provides the convenience macros.
  • iroha_p2p defines peer creation and handshake logic.
  • iroha_default_executor defines runtime validation logic.
  • iroha_telemetry is used for monitoring and analysis of telemetry data.
  • iroha_version provides message versioning for non-simultaneous system updates.

Maintenance

A brief overview on how to configure and maintain an Iroha instance:

Configuration

There is a set of configuration parameters that could be passed either through a configuration file or environment variables.

iroha --config /path/to/config.toml

Note: detailed configuration reference is work in progress.

Endpoints

For a list of all endpoints, available operations, and ways to customize them with parameters, see API Reference > Torii Endpoints

Logging

By default, Iroha provides logs in a human-readable format and prints them out to stdout.

The logging level can be changed either via the logger.level configuration parameter or at run-time using the configuration endpoint.

Example: changing log level

For example, if your Iroha instance is running at 127.0.0.1:8080 and you want to change the log level to DEBUG using curl, you should send a POST request with a JSON containing the new log level. Like this:

curl -X POST \
    -H 'content-type: application/json' \
    http://127.0.0.1:8080/configuration \
    -d '{"logger": {"level": "DEBUG"}}' -i

The log format might be configured via the logger.format configuration parameter. Possible values are: full (default), compact, pretty, and json.

Output goes to /dev/stdout. Piping to files or log rotation is the responsibility of the peer administrator.

Monitoring

The details of the Health endpoint can be found in the API Reference > Torii Endpoints.

Iroha can produce both JSON-formatted as well as prometheus-readable metrics at the status and metrics endpoints respectively.

The prometheus monitoring system is the de-factor standard for monitoring long-running services such as an Iroha peer. In order to get started, install prometheus and use configs/prometheus.template.yml for configuration.

Storage

Iroha stores blocks and snapshots in the storage directory, which is created automatically by Iroha in the working directory of the peer. If kura.block_store_path is specified in the config file, it overrides the default one and is resolved relative to the config file location.

Note: detailed configuration reference is work in progress.

Scalability

Multiple instances of Iroha peer and client binaries can be run on the same physical machine and in the same working directory. However, we recommend to give each instance a clean new working directory.

The provided docker-compose file showcases a minimum viable network and the general methods of using the hyperledger/iroha2:dev docker image for deploying a network of peers.

Further Reading

We encourage you to check out our Iroha 2 Tutorial first. It is suitable for both experienced developers and prospective users of Iroha 2, and it provides language-specific guides for Bash, Python, Rust, Kotlin/Java, and Javascript/TypeScript.

Iroha SDKs:

How to Contribute

We welcome community contributions! Report bugs and suggest improvements via GitHub issues and pull requests.

Check out our contributing guide to learn more.

Get Help

Check out the channels you could use to get help or engage with the community.

License

Iroha codebase is licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Iroha documentation files are made available under the Creative Commons Attribution 4.0 International License (CC-BY-4.0), available at http://creativecommons.org/licenses/by/4.0/

Footnotes

  1. Note that all operations are done in RAM, so in theory Iroha can work without persistent storage. However, since synchronising blocks over the network after a power failure may take a long time, we recommend adding a hard drive.

iroha's People

Contributors

0x009922 avatar 6r1d avatar alexstroke avatar appetrosyan avatar arjentix avatar bakhtin avatar bastos525 avatar bulatsaif avatar dcnick3 avatar dependabot[bot] avatar e-ivkov avatar erigara avatar humb1t avatar i1i1 avatar ilchu avatar lebdron avatar liralemur avatar luckychess avatar mboldyrev avatar muratovv avatar mversic avatar nxsaken avatar ortyomka avatar outoftardis avatar pesterev avatar quentini avatar revertron avatar s8sato avatar samhsmith avatar takemiyamakoto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iroha's Issues

Add documetation page about irohad cmdline flags

The best would be to update page automatically from --help

But at the moment I think it would be enough to copy-paste. ;)

@LiraLemur, @kamilsa

>>> ./build/bin/irohad --help
irohad: Warning: SetUsageMessage() never called

  Flags from ../irohad/main/irohad.cpp:
    -config (Specify iroha provisioning path.) type: string default: ""
    -drop_state (Drops existing state data at startup.) type: bool
      default: false
    -genesis_block (Specify file with initial block) type: string default: ""
    -keypair_name (Specify name of .pub and .priv files) type: string
      default: ""
    -metrics_addr (Prometeus HTTP server listen address) type: string
      default: "127.0.0.1"
    -metrics_port (Prometeus HTTP server listens port, disabled by default)
      type: string default: ""
    -overwrite_ledger (Overwrite ledger data if existing) type: bool
      default: false
    -reuse_state (Try to reuse existing state data at startup (Deprecated,
      startup reuses state by default. Use drop_state to drop the WSV).)
      type: bool default: true
    -verbosity (Log verbosity) type: string default: "config_file"
    -wait_for_new_blocks (Startup synchronization policy - waits for new blocks
      in blockstore, does not run network) type: bool default: false



  Flags from /Users/tanya/devel/vcpkg/buildtrees/gflags/src/v2.2.2-d9283b9285.clean/src/gflags.cc:
    -flagfile (load flags from file) type: string default: ""
    -fromenv (set flags from the environment [use 'export FLAGS_flag1=value'])
      type: string default: ""
    -tryfromenv (set flags from the environment if present) type: string
      default: ""
    -undefok (comma-separated list of flag names that it is okay to specify on
      the command line even if the program does not define a flag with that
      name.  IMPORTANT: flags in this list that have arguments MUST use the
      flag=value format) type: string default: ""

  Flags from /Users/tanya/devel/vcpkg/buildtrees/gflags/src/v2.2.2-d9283b9285.clean/src/gflags_completions.cc:
    -tab_completion_columns (Number of columns to use in output for tab
      completion) type: int32 default: 80
    -tab_completion_word (If non-empty, HandleCommandLineCompletions() will
      hijack the process and attempt to do bash-style command line flag
      completion on this value.) type: string default: ""

  Flags from /Users/tanya/devel/vcpkg/buildtrees/gflags/src/v2.2.2-d9283b9285.clean/src/gflags_reporting.cc:
    -help (show help on all flags [tip: all flags can have two dashes])
      type: bool default: false currently: true
    -helpfull (show help on all flags -- same as -help) type: bool
      default: false
    -helpmatch (show help on modules whose name contains the specified substr)
      type: string default: ""
    -helpon (show help on the modules named by this flag value) type: string
      default: ""
    -helppackage (show help on all modules in the main package) type: bool
      default: false
    -helpshort (show help on only the main module for this program) type: bool
      default: false
    -helpxml (produce an xml version of help) type: bool default: false
    -version (show version and build info and exit) type: bool default: false

KV storage

  • Db init
  • Block indexer
  • KV Commands
  • KV queries
  • ITF tests
  • Integration
  • Burrow

RPC failed: Connect failed

Error when two peers are connect. AddPeer command is commited succesfully but when votes bundle is sent to the peer error happens.

[2019-07-29 09:40:53.824513251][I][Irohad/Consensus/HashGate]: Order for voting: {127.0.0.1:10002, 127.0.0.1:10001}
[2019-07-29 09:40:53.824586825][I][Irohad/Consensus/HashGate]: Vote for round Round: [block=10, reject=0, ], hash (, ) to peer Peer: [address=127.0.0.1:10002, pubkey=PublicKey: [7a1d8abcf351c268ab9d3f5690ad78acd50e53fa615e4f9c54c994591420c055 ], ]
[2019-07-29 09:40:53.824644310][I][Irohad/Consensus/Network]: Send votes bundle[size=1] to 127.0.0.1:10002
[2019-07-29 09:40:53.824668224][I][Irohad]: ~~~~~~~~~| PROPOSAL ^_^ |~~~~~~~~~
[2019-07-29 09:40:53.824894628][W][Irohad/AsyncNetworkClient]: RPC failed: Connect Failed

Can provide more details if needed.

How can we Recovery public key and private key on iroha when uninstall app.

Hello iroha!

I would like to ask some about how to recovery public key and private key on android app after uninstall we don't need to generate these two keys. Please share me some solution on this issue. other ways you can share me how to store these keys on device ? like using KeyChain to store that keys.

this is my question and full example:

https://stackoverflow.com/questions/58197963/how-to-store-key-in-android-after-uninstall-app-key-still-have-when-install-app?noredirect=1#comment102775009_58197963

CMake Error: CMake was unable to find a build program corresponding to "Ninja"

on docker container after bash scripts/run-iroha-dev.sh

iroha-ci@66078cb9d601:/opt/iroha$ cmake -H. -Bbuild -DCMAKE_TOOLCHAIN_FILE=/opt/dependencies/scripts/buildsystems/vcpkg.cmake -G "Ninja"
-- ccache enabled (/usr/bin/ccache)
CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "/opt/iroha/build/CMakeFiles/CMakeOutput.log".
iroha-ci@66078cb9d601:/opt/iroha$ 

any ideas ?

Only way to successfully build iroha

  • Install Ubuntu Groovy on a VM (i use LXC Container)
# Success on Ubuntu Groovy
mkdir /root/blockchain/
cd /root/blockchain
apt-get update; \
apt-get -y --no-install-recommends install \
build-essential ninja-build \
git ca-certificates tar curl unzip cmake
git clone -b master https://github.com/hyperledger/iroha 
iroha/vcpkg/build_iroha_deps.sh
vcpkg/vcpkg integrate install
cd iroha
git checkout 1.2.0
cmake -H. -Bbuild  "-DCMAKE_TOOLCHAIN_FILE=/root/blockchain/vcpkg/scripts/buildsystems/vcpkg.cmake" -G "Ninja"
cmake --build . --target irohad -- -j4

Building with v1.2-rc2 with -DUSE_LIBURSA=ON

Building on docker image: debian/bullseye-slim
Instructions followed: https://iroha.readthedocs.io/en/master/build/index.html#build-process

Rust installation with:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
source $HOME/.cargo/env

The build process fails with:
shared_model/cryptography/ed25519_ursa_impl/CMakeFiles/hyperledger_ursa_build.dir/build.make:131

Proposed solution:
FILE: cmake/Modules/Findursa.cmake
CHANGE: cargo build --release --no-default-features --features="ffi" to cargo build --release

Update contributing guidelines

Contributing guidelines should reflect possibility of creating issues in the github. It should be stated that github has higher priority than HL Jira, although creating tasks in Jira can still be an option

Fix failing test OneLargeAndManySingleVoteGroups

I try to add some functionality to Iroha. I use Ubuntu 18.04, Docker environment and clang++-7 to build Iroha in release mode.

Before this commit (IvanTyulyandin@ec1daa7), tests were passed successfully. After commit, the test OneLargeAndManySingleVoteGroups failed. I got this log:

[ RUN      ] Instance/CftAndBftSupermajorityCheckerTest.OneLargeAndManySingleVoteGroups/0
[2019-04-19 10:14:42.546518918][th:11235][  info  ][TestYacCommon]: --------| ProofOfReject(x, 62, 139752461309472), x in [1..62] |---------
[2019-04-19 10:14:42.546526970][th:11235][  info  ][TestYacCommon]: --------| ProofOfReject(x, 13122976, 1), x in [1..13122976] |---------
../test/module/irohad/consensus/yac/supermajority_checker_test.cpp:175: Failure
Value of: canHaveSupermajority(vote_groups, c.A)
  Actual: false
Expected: true
if 18446744073696429713 not yet voted peers vote for option already having 2 votes, it will reach supermajority in `2 * f + 1' CFT model
...

According to the log, something went wrong with initialization (unexpected numbers).
Seems that code https://github.com/hyperledger/iroha/blob/master/test/module/irohad/consensus/yac/supermajority_checker_test.cpp#L155 has a problem.

 struct Case {
    size_t V; // Voted peers
    size_t A; // All peers
  };

  for (const auto &c : std::initializer_list<Case>({{6, 7}, {8, 12}})) {
    log_->info("--------| ProofOfReject(x, {0}, {1}), x in [1..{0}] |---------",
               c.V,
               c.A);

I think that problem is in std::initializer_list. Std::initializer_list<T>.begin() returns a pointer to T, not an iterator. The range-based loop implicitly calls this method and then increments the pointer to the first Case. I guess that led to unexpected numbers instead of actual data.

Consider to change std::initializer_list to std::vector. With this replacement test was successfully passed.

Limit on the length of asset name

When tinkering with iroha for a project, I noticed that there was a (seemingly undocumented) limit on the length of an asset name.
In my project I'm generating asset names using the encoded hash of some data, and when I try to add assets with long names, the transaction fails (with a validation error).
I don't recall exactly where the limit is, but, for example, a name of 46 characters causes a validation error, whereas a name of 25 characters succeeds.
This is while using the example genesis, etc.
Is there some way to increase this name length limit?

Test issue

Need to check the work of the issue bot.

Cannot run the docker container

At line:5 char:3

  • --network=iroha-network \
  • ~
    Missing expression after unary operator '--'.
    At line:5 char:3
  • --network=iroha-network \

Unexpected token 'network=iroha-network' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingExpressionAfterOperator

Query account balance with transaction hash

There is no way to query an account balance at a particular point in time. Currently I need to maintain my own internal running balance on accounts which is less than ideal.

I would like a query similar to GetAccountAssets where I can pass in a transaction hash and it returns the state of all accounts and balance at the time of that transaction hash. An alternative solution would be to pass in a timestamp instead of a transaction hash but I feel the transaction hash would be more reliable.

Thanks

Linking error when compiling version 1.1.3 connected with GRPC

For few weeks I'm seeing problems with buiding iroha. I'm tried with multiple versions: 1.12 today 1.1.3 and always it is problem with linking with GRPC.
I'm build iroha old way (not with vcpkg), because I need to run this on Raspberry Pi 4B, which is not supported by vcpkg. My system is Manjaro 20.04, the same problem is on my laptop (also Manjaro).

First I've installed dependencies (Manjaro's version of installation command):
trizen -S unzip cmake ca-certificates spdlog rapidjson boost intel-tbb go --noconfirm

Steps which I do:

git clone --branch 1.1.2 https://github.com/hyperledger/iroha.git
cd iroha
cmake -H. -Bbuild -DTESTING=OFF
cd build
make iroha-cli

After some time and repairing #457 it is linking error for both iroha-cli and irohad (as in attachment:
linkingError.txt
connected with GRPC.

What is important -I've succesfully build iroha on Raspberry Pi 4 few months ago (on Manjaro) and about one year ago on Raspberry Pi 3, so only new versions are having problems.

I've also tried to build grpc manually:

git clone https://github.com/grpc/grpc.git --depth=1
cd grpc
git submodule update --init
cd src/
cmake ../..
make -j4
sudo make install

and the problem is still not disappearing.

My g++ vestion:

$ g++ --version
g++ (Arch Linux 9.3.0-1) 9.3.0

Irohad does not respect "working database" config option, --drop-state causes exception and SIGSEGV.

OS: MacOS Big Sur 11.2.1
Branch: support/1.2.x

Working database is configured "iroha_noda2".
Option --drop-state drops database successfully and recreates it. But function prepareTables() tries to create tables in other database "iroha_user" according to user name... I did not reasearch why, code exactly says to soci - use "dbname=iroha_noda2" from config. The result is cannot create table schema_version - already exists.

irohad run:

$ ./bin/irohad --config kuvaldini/config2.json --genesis_block kuvaldini/genesis.block --keypair_name kuvaldini/noda2@kyb --drop-state
[2021-03-18 09:51:24.576639000][th:537268][  info  ][Init]: Irohad version: 1.2.0-114-g86442fc0
[2021-03-18 09:51:24.577366000][th:537268][  info  ][Init]: config initialized
*** 1616053884.577619000            0 4824952320 mg_start2:19081: [listening_ports] -> [127.0.0.1:5552]
*** 1616053884.577645000        26000 4824952320 mg_start2:19081: [num_threads] -> [2]
*** 1616053884.577899000       254000 123145337810944 consume_socket:18210: going idle
*** 1616053884.577935000        36000 123145337925632 consume_socket:18210: going idle
[2021-03-18 09:51:24.579643000][th:537268][  info  ][Irohad]: created
[2021-03-18 09:51:24.579980000][th:537268][  info  ][Irohad]: [Init] => pending transactions storage
[2021-03-18 09:51:24.789788000][th:537268][ error  ][Irohad]: Storage initialization failed: Cannot execute query. Fatal error. ERROR:  relation "schema_version" already exists
 while executing "CREATE TABLE schema_version (
    lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY,
    iroha_major int not null,
    iroha_minor int not null,
    iroha_patch int not null
);
insert into schema_version
    (iroha_major, iroha_minor, iroha_patch)
    values (1, 2, 0);
CREATE TABLE top_block_info (
    lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY,
    height int,
    hash character varying(128)
);
CREATE TABLE role (
    role_id character varying(32),
    PRIMARY KEY (role_id)
);
CREATE TABLE domain (
    domain_id character varying(255),
    default_role character varying(32) NOT NULL REFERENCES role(role_id),
    PRIMARY KEY (domain_id)
);
CREATE TABLE signatory (
    public_key varchar NOT NULL,
    PRIMARY KEY (public_key)
);
CREATE TABLE account (
    account_id character varying(288),
    domain_id character varying(255) NOT NULL REFERENCES domain,
    quorum int NOT NULL,
    data JSONB,
    PRIMARY KEY (account_id)
);
CREATE TABLE account_has_signatory (
    account_id character varying(288) NOT NULL REFERENCES account,
    public_key varchar NOT NULL REFERENCES signatory,
    PRIMARY KEY (account_id, public_key)
);
CREATE TABLE peer (
    public_key varchar NOT NULL,
    address character varying(261) NOT NULL UNIQUE,
    tls_certificate varchar,
    PRIMARY KEY (public_key)
);
CREATE TABLE asset (
    asset_id character varying(288),
    domain_id character varying(255) NOT NULL REFERENCES domain,
    precision int NOT NULL,
    PRIMARY KEY (asset_id)
);
CREATE TABLE account_has_asset (
    account_id character varying(288) NOT NULL REFERENCES account,
    asset_id character varying(288) NOT NULL REFERENCES asset,
    amount decimal NOT NULL,
    PRIMARY KEY (account_id, asset_id)
);
CREATE TABLE role_has_permissions (
    role_id character varying(32) NOT NULL REFERENCES role,
    permission bit(53) NOT NULL,
    PRIMARY KEY (role_id)
);
CREATE TABLE account_has_roles (
    account_id character varying(288) NOT NULL REFERENCES account,
    role_id character varying(32) NOT NULL REFERENCES role,
    PRIMARY KEY (account_id, role_id)
);
CREATE TABLE account_has_grantable_permissions (
    permittee_account_id character varying(288) NOT NULL REFERENCES account,
    account_id character varying(288) NOT NULL REFERENCES account,
    permission bit(6) NOT NULL,
    PRIMARY KEY (permittee_account_id, account_id)
);
CREATE TABLE IF NOT EXISTS tx_positions (
    creator_id text,
    hash varchar(64) not null,
    asset_id text,
    ts bigint,
    height bigint,
    index bigint
);
CREATE INDEX IF NOT EXISTS tx_positions_hash_index
    ON tx_positions
    USING hash
    (hash);
CREATE INDEX IF NOT EXISTS tx_positions_creator_id_asset_index
    ON tx_positions
    (creator_id, asset_id);
CREATE INDEX IF NOT EXISTS tx_positions_ts_height_index_index
    ON tx_positions
    (ts);
CREATE TABLE IF NOT EXISTS tx_status_by_hash (
    hash varchar,
    status boolean
);
CREATE INDEX tx_status_by_hash_hash_index
  ON tx_status_by_hash
  USING hash
  (hash);
CREATE TABLE IF NOT EXISTS setting(
    setting_key text,
    setting_value text,
    PRIMARY KEY (setting_key)
);
CREATE TABLE IF NOT EXISTS engine_calls (
    call_id serial unique not null,
    tx_hash text,
    cmd_index bigint,
    engine_response text,
    callee varchar(40),
    created_address varchar(40),
    PRIMARY KEY (tx_hash, cmd_index)
);
CREATE TABLE IF NOT EXISTS burrow_account_data (
    address varchar(40),
    data text,
    PRIMARY KEY (address)
);
CREATE TABLE IF NOT EXISTS burrow_account_key_value (
    address varchar(40),
    key varchar(64),
    value text,
    PRIMARY KEY (address, key)
);
CREATE TABLE IF NOT EXISTS burrow_tx_logs (
    log_idx serial primary key,
    call_id integer references engine_calls(call_id),
    address varchar(40),
    data text
);
CREATE TABLE IF NOT EXISTS burrow_tx_logs_topics (
    topic varchar(64),
    log_idx integer references burrow_tx_logs(log_idx)
);
CREATE INDEX IF NOT EXISTS burrow_tx_logs_topics_log_idx
    ON burrow_tx_logs_topics
    USING btree
    (log_idx ASC);
".
[2021-03-18 09:51:24.796840000][th:537268][ error  ][Init]: Failed to initialize storage
*** 1616053884.988757000    410822000 123145337696256 master_thread_run:18646: stopping workers
*** 1616053884.988868000       111000 123145337810944 worker_thread_run:18462: exiting
*** 1616053884.988876000         8000 123145337925632 worker_thread_run:18462: exiting
*** 1616053884.988919000        43000 123145337696256 master_thread_run:18685: exiting

Then irohad->storage results to unchecked uninitialized nullptr and is dereferenced, then results to SIGSEGV. I fixed this. But dbname is still ignored.

But sql shows:

$ psql iroha_noda2
iroha_noda2=# \dt
Did not find any relations.

or the same

$ psql iroha_noda2 -c'\dt'
Did not find any relations.

config.json

{
  "block_store_path": "/Users/tanya/devel/iroha/kuvaldini/noda2_state/",
  "torii_port": 50052,
  "internal_port": 10002,
  "--pg_opt" : "host=localhost port=5432 user=postgres password=mysecretpassword",
  "database": {
    "host": "localhost",
    "port": 5432,
    "user": "iroha_user",
    "password": "",
    "working database": "iroha_noda2",
    "maintenance database": "postgres"
  },
  "max_proposal_size": 1000,
  "proposal_delay": 5000,
  "vote_delay": 5000,
  "mst_enable" : true,
  "mst_expiration_time" : 1440,
  "max_rounds_delay": 3000,
  "stale_stream_max_rounds": 2,
  "log" : {
    "level": "debug"
  },
  "metrics": "127.0.0.1:5552"
}

Evidence:

[2021-03-18 11:47:25.562096000][th:572631][ error  ][Irohad]: Storage initialization failed: Could not connect to maintenance database 'host=localhost port=5432 user=iroha_noda2 password= dbname=postgres': Cannot establish connection to the database.
FATAL:  database "iroha_noda2" does not exist

dbname=postgres but cannot establish connection to the database. database "iroha_noda2" does not exist

Initializing new iroha node

TL;DR all in one

initdb ~/iroha/noda3_db/
postgres -D ~/iroha/noda3_db/ -d1 -p5432 &
createuser -s iroha_user -p5432
createdb iroha_user -p5434
createdb iroha_default -p5434
irohad --YOUR-PARAMETERS --drop-state --overwrite-ledger

First of all init database

initdb ~/iroha/noda3_db/

Start Postgres database instance. Port must correspond to your config.

postgres -D ~/iroha/noda3_db/ -d1 -p5432 &

Create user. Must correspond to your iroha config

createuser -s iroha_user -p5432
createdb iroha_user -p5434
createdb iroha_default -p5434

Metrics endpoint

Add flag --metrics_port <port number> which opens a port for requesting metrics of Iroha

Iroha Postgres Installation failed

Hello all,

I am trying to deploy single instance Iroha using the following docker compose script

`version: '3.4'

services:

services:

postgres:
image: postgres:10
hostname: postgres
restart: always
ports:
- 5432:5432
volumes:
- iroha-db:/var/lib/postgresql/data
environment:
POSTGRES_USER: iroha
POSTGRES_PASSWORD: mysecretpassword
command: -c 'max_prepared_transactions=100'
networks:
- iroha-network

iroha:
image: hyperledger/iroha:latest
hostname: iroha
restart: always
ports:
- 50051:50051
volumes:
- blockstore2:/tmp/block_store
- C:\Users\user\Desktop\iroha\example:/opt/iroha_data
environment:
IROHA_POSTGRES_HOST: postgres
IROHA_POSTGRES_PORT: 5432
IROHA_POSTGRES_USER: iroha
IROHA_POSTGRES_PASSWORD: mysecretpassword
KEY: node0
command: -c 'max_prepared_transactions=100'
depends_on:
- postgres
networks:
- iroha-network

networks:
iroha-network:
driver: bridge

volumes:
blockstore2:
iroha-db:`

Postgres container was initialized correctly but Iroha container failed and the logs are the following:

NOTE: IROHA_POSTGRES_HOST should match 'host' option in config file wait-for-it.sh: waiting 30 seconds for postgres:5432 wait-for-it.sh: postgres:5432 is available after 0 seconds [2019-11-07 21:31:21.320422700][I][Init]: Irohad version: 1.0.1 [2019-11-07 21:31:21.320478000][I][Init]: config initialized [2019-11-07 21:31:21.327511700][I][Irohad]: created [2019-11-07 21:31:21.327586300][I][Irohad/Storage]: Start storage creation [2019-11-07 21:31:21.327644900][I][Irohad/Storage]: block store created [2019-11-07 21:31:23.010715500][E][Init]: Failed to initialize storage

Any thoughts and ideas would be helpful. Thanks in Advance

irohad silently exits with 1 if config file does not exist

$ ./build-aclang/bin/irohad --config does/not/exist.json --genesis_block kuvaldini/genesis.block --keypair_name kuvaldini/noda2@kyb
$ echo $?
1

I'd like to see error message "Cannot open blah.json. Check if file exists and user have acess rights"

Guix package: apply_visitor_unary.hpp:98:61: error: no match for call to...

I'm trying to build an Iroha package for Guix. The configure phase goes well, but then the build fails with:

[ 18%] Building CXX object shared_model/backend/protobuf/CMakeFiles/shared_model_proto_backend.dir/impl/block.o
cd /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/build/shared_model/backend/protobuf && /gnu/store/x3jx25cd3q363mr7nbgzrhrv1vza6cf7-gcc-7.4.0/bin/c++  -DBOOST_NO_RTTI -DFMT_HEADER_ONLY -I/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/irohad -I/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/libs -I/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model -I/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/../libs -I/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/build/schema -isystem /gnu/store/hqqshnwv31v8fddk0b2x3cmya82sxj4n-protobuf-3.11.3/include -isystem /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include -isystem /gnu/store/hrn0pncp1k7ch8hi12s2w2x0xvl6hkq0-hyperledger-iroha-ed25519-2.0.2/include -isystem /gnu/store/b68ysbyaxhxayj0vc39r0d42c3yi82vp-fmt-5.3.0/include -isystem /gnu/store/d2siv6zv3x0byq9fi12yc0zlwgb5knxd-spdlog-1.3.1/include  -std=c++14 -Wall -fdiagnostics-color=always -O2 -g -DNDEBUG -fPIC   -o CMakeFiles/shared_model_proto_backend.dir/impl/block.o -c /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp
In file included from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/apply_visitor.hpp:16:0,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/hash_variant.hpp:22,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:34,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant.hpp:17,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/trivial_proto.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp:9:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp: In instantiation of ‘struct boost::detail::variant::result_multideduce1<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>, boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&> >::deduce_impl<boost::mpl::l_iter<boost::mpl::l_item<mpl_::long_<2>, iroha::protocol::Signature, boost::mpl::l_item<mpl_::long_<1>, iroha::protocol::Signature&, boost::mpl::l_end> > >, void>’:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:108:50:   required from ‘struct boost::detail::variant::result_multideduce1<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>, boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&> >’
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:114:66:   required from ‘struct boost::detail::variant::result_wrapper1<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>, boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&> >’
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:135:98:   required from ‘decltype(auto) boost::apply_visitor(Visitor&&, Visitable&&, typename boost::disable_if<boost::detail::variant::has_result_type<Visitor> >::type*) [with Visitor = shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>; Visitable = boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&>&; typename boost::disable_if<boost::detail::variant::has_result_type<Visitor> >::type = void]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:41:37:   required from ‘shared_model::detail::ReferenceHolder<T>::PointerType shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:37:19:   required from ‘shared_model::detail::ReferenceHolder<T>::PointerType shared_model::detail::ReferenceHolder<T>::operator->() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:39:46:   required from here
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:98:61: error: no match for call to ‘(shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>) (iroha::protocol::Signature)’
         typedef decltype(true ? boost::declval< Visitor& >()( boost::declval< value_t >() )
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/trivial_proto.hpp:9:0,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp:9:
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:42:32: note: candidate: shared_model::detail::ReferenceHolder<T>::ptr()::<lambda(auto:4&)> [with auto:4 = iroha::protocol::Signature; T = iroha::protocol::Signature] <near match>
             [](auto &value) -> decltype(auto) { return (value); }, variant_);
                                ^~~~~~~~
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:42:32: note:   conversion of argument 1 would be ill-formed:
In file included from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/apply_visitor.hpp:16:0,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/hash_variant.hpp:22,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:34,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant.hpp:17,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/trivial_proto.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp:9:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:98:61: error: cannot bind non-const lvalue reference of type ‘iroha::protocol::Signature&’ to an rvalue of type ‘iroha::protocol::Signature’
         typedef decltype(true ? boost::declval< Visitor& >()( boost::declval< value_t >() )
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp: In instantiation of ‘struct boost::detail::variant::result_multideduce1<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>, boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&> >::deduce_impl<boost::mpl::l_iter<boost::mpl::l_item<mpl_::long_<1>, iroha::protocol::Signature&, boost::mpl::l_end> >, void>’:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:99:33:   required from ‘struct boost::detail::variant::result_multideduce1<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>, boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&> >::deduce_impl<boost::mpl::l_iter<boost::mpl::l_item<mpl_::long_<2>, iroha::protocol::Signature, boost::mpl::l_item<mpl_::long_<1>, iroha::protocol::Signature&, boost::mpl::l_end> > >, void>’
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:108:50:   required from ‘struct boost::detail::variant::result_multideduce1<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>, boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&> >’
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:114:66:   required from ‘struct boost::detail::variant::result_wrapper1<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>, boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&> >’
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:135:98:   required from ‘decltype(auto) boost::apply_visitor(Visitor&&, Visitable&&, typename boost::disable_if<boost::detail::variant::has_result_type<Visitor> >::type*) [with Visitor = shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>; Visitable = boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&>&; typename boost::disable_if<boost::detail::variant::has_result_type<Visitor> >::type = void]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:41:37:   required from ‘shared_model::detail::ReferenceHolder<T>::PointerType shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:37:19:   required from ‘shared_model::detail::ReferenceHolder<T>::PointerType shared_model::detail::ReferenceHolder<T>::operator->() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:39:46:   required from here
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:105:54: error: use of ‘shared_model::detail::ReferenceHolder<T>::ptr()::<lambda(auto:4&)> [with auto:4 = iroha::protocol::Signature; T = iroha::protocol::Signature]’ before deduction of ‘auto’
         typedef decltype(boost::declval< Visitor& >()( boost::declval< value_t >() )) type;
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/apply_visitor.hpp:16:0,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/hash_variant.hpp:22,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:34,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant.hpp:17,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/trivial_proto.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp:9:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp: In instantiation of ‘decltype(auto) boost::apply_visitor(Visitor&&, Visitable&&, typename boost::disable_if<boost::detail::variant::has_result_type<Visitor> >::type*) [with Visitor = shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>; Visitable = boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&>&; typename boost::disable_if<boost::detail::variant::has_result_type<Visitor> >::type = void]’:
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:41:37:   required from ‘shared_model::detail::ReferenceHolder<T>::PointerType shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:37:19:   required from ‘shared_model::detail::ReferenceHolder<T>::PointerType shared_model::detail::ReferenceHolder<T>::operator->() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:39:46:   required from here
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:136:74: error: no matching function for call to ‘boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&>::apply_visitor(boost::detail::variant::result_wrapper1<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>, boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&> >&)’
     return ::boost::forward<Visitable>(visitable).apply_visitor(cpp14_vis);
                                                                          ^
In file included from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant.hpp:17:0,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/trivial_proto.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp:9:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:2365:5: note: candidate: template<class Visitor> typename Visitor::result_type boost::variant<T0, TN>::apply_visitor(Visitor&) && [with Visitor = Visitor; T0_ = iroha::protocol::Signature; TN = {iroha::protocol::Signature&}]
     apply_visitor(Visitor& visitor) &&
     ^~~~~~~~~~~~~
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:2365:5: note:   template argument deduction/substitution failed:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:2373:5: note: candidate: template<class Visitor> typename Visitor::result_type boost::variant<T0, TN>::apply_visitor(Visitor&) const && [with Visitor = Visitor; T0_ = iroha::protocol::Signature; TN = {iroha::protocol::Signature&}]
     apply_visitor(Visitor& visitor) const&&
     ^~~~~~~~~~~~~
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:2373:5: note:   template argument deduction/substitution failed:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:2383:5: note: candidate: template<class Visitor> typename Visitor::result_type boost::variant<T0, TN>::apply_visitor(Visitor&) & [with Visitor = Visitor; T0_ = iroha::protocol::Signature; TN = {iroha::protocol::Signature&}]
     apply_visitor(Visitor& visitor)
     ^~~~~~~~~~~~~
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:2383:5: note:   template argument deduction/substitution failed:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:2394:5: note: candidate: template<class Visitor> typename Visitor::result_type boost::variant<T0, TN>::apply_visitor(Visitor&) const & [with Visitor = Visitor; T0_ = iroha::protocol::Signature; TN = {iroha::protocol::Signature&}]
     apply_visitor(Visitor& visitor) const
     ^~~~~~~~~~~~~
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:2394:5: note:   template argument deduction/substitution failed:
In file included from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/trivial_proto.hpp:9:0,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp:9:
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp: In instantiation of ‘shared_model::detail::ReferenceHolder<T>::PointerType shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]’:
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:37:19:   required from ‘shared_model::detail::ReferenceHolder<T>::PointerType shared_model::detail::ReferenceHolder<T>::operator->() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]’
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:39:46:   required from here
/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:41:16: error: lvalue required as unary ‘&’ operand
         return &boost::apply_visitor(
                ^~~~~~~~~~~~~~~~~~~~~~
             [](auto &value) -> decltype(auto) { return (value); }, variant_);
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/move/utility.hpp:29:0,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/optional/optional.hpp:53,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/optional.hpp:15,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/interfaces/base/signable.hpp:12,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/interfaces/iroha_internal/block.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/block.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp:6:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/move/utility_core.hpp:248:37: error: ‘T&& boost::forward(typename boost::move_detail::remove_reference<T>::type&) [with T = shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>; typename boost::move_detail::remove_reference<T>::type = shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>]’, declared using local type ‘boost::move_detail::remove_reference<shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)> >::type {aka shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>}’, is used but never defined [-fpermissive]
          BOOST_MOVE_FORCEINLINE T&& forward(typename ::boost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT
                                     ^~~~~~~
In file included from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/apply_visitor.hpp:16:0,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/hash_variant.hpp:22,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/variant.hpp:34,
                 from /gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant.hpp:17,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/utils/reference_holder.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/trivial_proto.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/common_objects/signature.hpp:9,
                 from /tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/source/shared_model/backend/protobuf/impl/block.cpp:9:
/gnu/store/f5g4av3mwn7zr81yqr1gn9hpb5d2c4m4-boost-1.70.0/include/boost/variant/detail/apply_visitor_unary.hpp:117:14: error: ‘boost::detail::variant::result_wrapper1<Visitor, Variant>::result_wrapper1(Visitor&&) [with Visitor = shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>; Variant = boost::variant<iroha::protocol::Signature, iroha::protocol::Signature&>]’, declared using local type ‘shared_model::detail::ReferenceHolder<T>::ptr() [with T = iroha::protocol::Signature; shared_model::detail::ReferenceHolder<T>::PointerType = iroha::protocol::Signature*]::<lambda(auto:4&)>’, is used but never defined [-fpermissive]
     explicit result_wrapper1(Visitor&& visitor) BOOST_NOEXCEPT
              ^~~~~~~~~~~~~~~
make[2]: *** [shared_model/backend/protobuf/CMakeFiles/shared_model_proto_backend.dir/build.make:66: shared_model/backend/protobuf/CMakeFiles/shared_model_proto_backend.dir/impl/block.o] Error 1
make[2]: Leaving directory '/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/build'
make[1]: *** [CMakeFiles/Makefile2:3110: shared_model/backend/protobuf/CMakeFiles/shared_model_proto_backend.dir/all] Error 2
make[1]: Leaving directory '/tmp/guix-build-hyperledger-iroha-1.1.1.drv-0/build'
make: *** [Makefile:144: all] Error 2
command "make" failed with status 2

For now, the package recipe is:

(define-public hyperledger-iroha
  (package
    (name "hyperledger-iroha")
    (version "1.1.1")
    (home-page "https://github.com/hyperledger/iroha")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url home-page)
                    (commit version)))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "014mbwq059yxwihw0mq8zgns53fsw8ckczi1lw8q9pz3pk86pa9b"))))
    (build-system cmake-build-system)
    ;; See https://iroha.readthedocs.io/en/latest/build/index.html.
    (native-inputs
     `(("googletest" ,googletest)))
    (inputs
     `(("spdlog" ,spdlog)
       ("protobuf" ,protobuf)
       ("grpc" ,grpc)
       ("rapidjson" ,rapidjson)
       ("gflags" ,gflags)
       ("rxcpp" ,rxcpp)
       ("tbb" ,tbb)
       ("boost" ,boost)
       ("hyperledger-iroha-ed25519" ,hyperledger-iroha-ed25519)
       ("fmt" ,fmt-5)
       ("postgresql" ,postgresql)
       ("soci" ,soci)))
    (synopsis "Simple, decentralized ledger")
    (description "Iroha is a distributed ledger technology (DLT).  Iroha has
essential functionality for your asset, information and identity management
needs, at the same time being a crash fault-tolerant tool.

Iroha has the following features:

@itemize
@item Creation and management of custom fungible assets, such as currencies, kilos of gold, etc.
@item Management of user accounts
@item Taxonomy of accounts based on domains in the system
@item The system of rights and verification of user permissions for the execution of transactions and queries in the system
@item Validation of business rules for transactions and queries in the system
@item Multisignature transactions
@end itemize\n")
    (license license:asl2.0)))

The main thing I'm unsure about is the hyperledger-iroha-ed25519 package, which I've packaged with -DEDIMPL=ref10.
Any clue?

P.S.: Is it possible to create an account on the Hypledger Jira without having to contact the administrator?

Is BFT now supported in 1.0?

the youtube channel say:

V1.0
Will contain only CFT solution

after 1.0 release
• We are going to work on BFT implementation. 1.1v should include BFT implementation.

is this true?

iroha-cli on macos causes unhandled exception on any transaction transmission

MacOS BigSur

I tried several transactions. All lead the same error.


./build-aclang/bin/iroha-cli -account_name noda2@kyb --key_path kuvaldini
Welcome to Iroha-Cli.
Choose what to do:
1. New transaction (tx)
2. New query (qry)
3. New transaction status request (st)
> : 2021-03-19 11:18:59.940 EET [51605] DEBUG:  autovacuum: processing database "iroha_user"
2021-03-19 11:19:20.249 EET [51608] DEBUG:  autovacuum: processing database "postgres"
2021-03-19 11:19:39.947 EET [51611] DEBUG:  autovacuum: processing database "template1"
2021-03-19 11:19:59.940 EET [51614] DEBUG:  autovacuum: processing database "iroha_user"
2021-03-19 11:20:20.249 EET [51617] DEBUG:  autovacuum: processing database "postgres"
1
Forming a new transactions, choose command to add:
1. Add Signatory to Account (add_sign)
2. Grant permission over your account (grant_perm)
3. Set account key/value detail (set_acc_kv)
4. Create Account (crt_acc)
5. Create Domain (crt_dmn)
6. Create Asset (crt_ast)
7. Remove Signatory (rem_sign)
8. Detach role from account (detach)
9. Set Account Quorum (set_qrm)
10. Subtract Assets Quantity (sub_ast_qty)
11. Add Peer to Iroha Network (add_peer)
12. Transfer Assets (tran_ast)
13. Add new role to account (apnd_role)
14. Create new role (crt_role)
15. Add Asset Quantity (add_ast_qty)
16. Revoke permission from account (revoke_perm)
0. Back (b)
> : 2
Account Id: node1@k2021-03-19 11:20:40.046 EET [51620] DEBUG:  autovacuum: processing database "template1"
yb
Permission name: admin
Command is formed. Choose what to do:
1. Save as json file (save)
2. Send to Iroha peer (send)
3. Add one more command to the transaction (add)
4. Go back and start a new transaction (b)
> : 2
Peer address (127.0.0.1):
Peer port (50051):
libc++abi.dylib: terminating with uncaught exception of type boost::wrapexcept<std::out_of_range>: bimap<>: invalid key

getting_started with python is malformed

I followed https://iroha.readthedocs.io/en/master/getting_started/python-guide.html

from iroha import Iroha, IrohaGrpc
from iroha import IrohaCrypto

from iroha.primitive_pb2 import can_set_my_account_detail


noda1_priv_key = '4213d74608724a5d17774f7282b0342ca8756041b901af523491a0f3e39bfac8⏎'
admin_private_key = 'f101537e319568c765b2cc89698325604991dca57b9716b58016b253506cab70'
user_private_key = IrohaCrypto.private_key()
user_public_key = IrohaCrypto.derive_public_key(user_private_key)
iroha = Iroha('admin@test')
net = IrohaGrpc()

def create_domain_and_asset():
    commands = [
        iroha.command('CreateDomain', domain_id='domain', default_role='user'),
        iroha.command('CreateAsset', asset_name='coin',
                      domain_id='domain', precision=2)
    ]
    tx = IrohaCrypto.sign_transaction(
        iroha.transaction(commands), admin_private_key)
    send_transaction_and_print_status(tx)

create_domain_and_asset()

result is

python3 ./kuvaldini/test-metrics.py
Traceback (most recent call last):
  File "/Users/tanya/devel/iroha/./kuvaldini/test-metrics.py", line 24, in <module>
    create_domain_and_asset()
  File "/Users/tanya/devel/iroha/./kuvaldini/test-metrics.py", line 22, in create_domain_and_asset
    send_transaction_and_print_status(tx)
NameError: name 'send_transaction_and_print_status' is not defined

Measure total number of transactions

Return total number of applied transactions.
We can get total number of transactions when node starts and then update in cache its number whenever there is a new block

Docker build failures

Your docker build instructions found at https://iroha.readthedocs.io/en/1.0.1/guides/build.html don't work. I've tried building master and your 1.2 stable branch, but neither works. I get cmake configure errors all over the place. I'm slowly working through the errors manually specifying the location of various libraries, since cmake can't find anything.
Right now I'm stuck on this one:
-- Found Python3: /usr/bin/python3.6 (found version "3.6.9") found components: Interpreter
CMake Error at irohad/ametsuchi/data_models/CMakeLists.txt:9 (find_package):
Could not find a package configuration file provided by "pybind11" with any
of the following names:

pybind11Config.cmake
pybind11-config.cmake

Add the installation prefix of "pybind11" to CMAKE_PREFIX_PATH or set
"pybind11_DIR" to a directory containing one of the above files. If
"pybind11" provides a separate development package or SDK, be sure it has
been installed.

Could you update your build instructions to actually work with the current docker ubuntu image?

Does iroha require postgres?

Is it possible to use iroha and just store the DHT on a plain old filesystem rather than a postgres database? I've an embedded case where installing postgres isn't really an option.

Testing: Building of 1.2.0-rc3 failed

Reproducable test environment (built in Docker container), how-to (*nix, Docker required):

  1. get branch "build-1.2.0rc3", like: git clone -b build-1.2.0rc3 https://github.com/diva-exchange/iroha
  2. cd iroha && bin/iroha-build-bin.sh

Result:

FAILED: libs/crypto/CMakeFiles/keys_manager.dir/keys_manager_impl.o
/usr/bin/c++ -DBOOST_NO_RTTI -DFMT_LOCALE -DSPDLOG_COMPILED_LIB -DSPDLOG_FMT_EXTERNAL -I../shared_model -I../irohad -I../libs -isystem /root/vcpkg/installed/x64-linux/include -Wall -fdiagnostics-color=always -g -g -Wextra -Wno-unused-parameter -Wno-deprecated-declarations -O0 -fPIC -Ded25519_EXPORTS -std=gnu++17 -MD -MT libs/crypto/CMakeFiles/keys_manager.dir/keys_manager_impl.o -MF libs/crypto/CMakeFiles/keys_manager.dir/keys_manager_impl.o.d -o libs/crypto/CMakeFiles/keys_manager.dir/keys_manager_impl.o -c ../libs/crypto/keys_manager_impl.cpp
In file included from ../libs/common/hexutils.hpp:13,
from ../libs/common/blob.hpp:15,
from ../libs/common/byteutils.hpp:16,
from ../libs/crypto/keys_manager_impl.cpp:11:
../libs/common/result.hpp:455:46: internal compiler error: canonical types differ for identical types 'std::enable_if<(! std::is_same<decltype (f()), void>::value), ReturnType>' and 'std::enable_if<(! std::is_same<decltype (f()), void>::value), ReturnType>'
455 | ReturnType>::type {
| ^~~~
0xc9248b comptypes(tree_node*, tree_node*, int)
../../src/gcc/cp/typeck.c:1561
0xc91eed structural_comptypes
../../src/gcc/cp/typeck.c:1410
0xb22823 decls_match(tree_node*, tree_node*, bool)
../../src/gcc/cp/decl.c:1009
0xb22d92 duplicate_decls(tree_node*, tree_node*, bool)
../../src/gcc/cp/decl.c:1441
0xba2870 do_pushdecl
../../src/gcc/cp/name-lookup.c:3050
0xba4873 pushdecl(tree_node*, bool)
../../src/gcc/cp/name-lookup.c:3179
0xba4873 do_pushdecl_with_scope
../../src/gcc/cp/name-lookup.c:3861
0xba4a51 pushdecl_namespace_level(tree_node*, bool)
../../src/gcc/cp/name-lookup.c:5085
0xc3eab1 push_template_decl_real(tree_node*, bool)
../../src/gcc/cp/pt.c:5997
0xb1fee7 start_preparsed_function(tree_node*, tree_node*, int)
../../src/gcc/cp/decl.c:16165
0xb33fff start_function(cp_decl_specifier_seq*, cp_declarator const*, tree_node*)
../../src/gcc/cp/decl.c:16500
0xbe5d2e cp_parser_function_definition_from_specifiers_and_declarator
../../src/gcc/cp/parser.c:28893
0xbe5d2e cp_parser_init_declarator
../../src/gcc/cp/parser.c:20680
0xbeca54 cp_parser_single_declaration
../../src/gcc/cp/parser.c:29512
0xbecbcc cp_parser_template_declaration_after_parameters
../../src/gcc/cp/parser.c:29084
0xbed320 cp_parser_explicit_template_declaration
../../src/gcc/cp/parser.c:29350
0xbf03d9 cp_parser_declaration
../../src/gcc/cp/parser.c:13387
0xbeffc2 cp_parser_toplevel_declaration
../../src/gcc/cp/parser.c:13466
0xbeffc2 cp_parser_declaration_seq_opt
../../src/gcc/cp/parser.c:13314
0xbeffc2 cp_parser_namespace_body
../../src/gcc/cp/parser.c:19727
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See file:///usr/share/doc/gcc-10/README.Bugs for instructions.
ninja: build stopped: subcommand failed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.