From 6024ce0056a7177b72df9ffcd1c933d89c2c28f5 Mon Sep 17 00:00:00 2001 From: Samuel Manzanera Date: Mon, 3 Aug 2020 17:07:21 +0200 Subject: [PATCH] Move from umbrella to classical phoenix app to ease the versioning and hot reload --- .dockerignore | 14 +- .gitignore | 21 +- apps/uniris_core/Makefile => Makefile | 0 README.md | 4 +- apps/uniris_core/.formatter.exs | 4 - apps/uniris_core/.gitignore | 30 --- apps/uniris_core/config/config.exs | 25 --- apps/uniris_core/config/dev.exs | 73 ------- apps/uniris_core/config/prod.exs | 74 ------- apps/uniris_core/config/test.exs | 79 -------- .../lib/mix/tasks/clean_priv_dir.ex | 14 -- .../lib/uniris_core/application.ex | 44 ----- .../lib/uniris_core/crypto/supervisor.ex | 28 --- .../uniris_core/p2p/node_view_supervisor.ex | 29 --- .../lib/uniris_core/p2p/supervisor.ex | 38 ---- apps/uniris_core/mix.exs | 42 ---- apps/uniris_core/test/test_helper.exs | 7 - .../beacon/slot/node_info_test.exs | 4 - .../beacon/slot/transaction_info_test.exs | 4 - .../test/uniris_core/beacon/slot_test.exs | 4 - .../test/uniris_core/interpreter_test.exs | 4 - .../transaction/data/ledger/transfer_test.exs | 5 - .../transaction/data/ledger_test.exs | 6 - .../uniris_core/transaction/input_test.exs | 4 - .../ledger_operations/node_movement_test.exs | 5 - .../transaction_movement_test.exs | 5 - .../ledger_operations/unspent_output_test.exs | 5 - apps/uniris_core/test/uniris_core_test.exs | 3 - apps/uniris_web/.formatter.exs | 4 - apps/uniris_web/.gitignore | 33 ---- apps/uniris_web/README.md | 18 -- apps/uniris_web/assets/js/app.js | 48 ----- apps/uniris_web/config/config.exs | 31 --- apps/uniris_web/config/dev.exs | 56 ------ apps/uniris_web/config/prod.exs | 64 ------ apps/uniris_web/config/test.exs | 10 - apps/uniris_web/lib/uniris_web/application.ex | 26 --- .../uniris_web/templates/layout/app.html.eex | 1 - apps/uniris_web/mix.exs | 53 ----- apps/uniris_web/test/test_helper.exs | 1 - .../uniris_web/assets => assets}/css/app.css | 2 + assets/css/code_proposal.css | 37 ++++ assets/css/code_viewer.css | 9 + .../assets => assets}/css/explorer.css | 0 assets/js/app.js | 136 +++++++++++++ .../uniris_web/assets => assets}/js/socket.js | 0 .../assets => assets}/package-lock.json | 187 +++++++++++++++--- .../uniris_web/assets => assets}/package.json | 9 +- .../assets => assets}/static/favicon.ico | Bin .../assets => assets}/static/images/logo.svg | 0 .../assets => assets}/static/robots.txt | 0 .../assets => assets}/webpack.config.js | 0 config/config.exs | 53 ++++- config/dev.exs | 131 ++++++++++++ config/prod.exs | 99 ++++++++++ config/test.exs | 89 +++++++++ create_release | 26 --- docker_release | 21 -- lib/mix/tasks/clean_priv_dir.ex | 14 ++ .../lib/uniris_core.ex => lib/uniris.ex | 2 +- lib/uniris/application.ex | 63 ++++++ .../lib/uniris_core => lib/uniris}/beacon.ex | 30 +-- .../uniris_core => lib/uniris}/beacon/slot.ex | 26 +-- .../uniris}/beacon/slot/node_info.ex | 16 +- .../uniris}/beacon/slot/transaction_info.ex | 16 +- .../uniris}/beacon/slot_timer.ex | 8 +- .../uniris}/beacon/subset.ex | 16 +- .../uniris}/beacon/subsets.ex | 2 +- .../uniris}/beacon/supervisor.ex | 18 +- .../uniris_core => lib/uniris}/bootstrap.ex | 40 ++-- .../uniris}/bootstrap/ip_lookup.ex | 8 +- .../uniris}/bootstrap/ip_lookup/env_impl.ex | 4 +- .../uniris}/bootstrap/ip_lookup/impl.ex | 2 +- .../uniris}/bootstrap/ip_lookup/ipfy_impl.ex | 4 +- .../uniris}/bootstrap/ip_lookup/local_impl.ex | 6 +- .../uniris}/bootstrap/network_init.ex | 42 ++-- .../lib/uniris_core => lib/uniris}/crypto.ex | 74 +++---- .../uniris}/crypto/ecdsa.ex | 2 +- .../uniris}/crypto/ed25519.ex | 4 +- .../uniris_core => lib/uniris}/crypto/id.ex | 10 +- .../uniris}/crypto/keystore.ex | 10 +- .../uniris}/crypto/keystore/impl.ex | 14 +- .../uniris}/crypto/keystore/software_impl.ex | 8 +- .../uniris}/crypto/libsodium_port.ex | 6 +- lib/uniris/crypto/supervisor.ex | 28 +++ .../uniris}/crypto/transaction_loader.ex | 16 +- .../uniris_core => lib/uniris}/election.ex | 10 +- .../uniris}/election/constraints.ex | 14 +- .../uniris}/election/constraints/storage.ex | 4 +- .../election/constraints/validation.ex | 4 +- .../uniris}/election/supervisor.ex | 4 +- lib/uniris/governance.ex | 107 ++++++++++ .../uniris_core => lib/uniris}/interpreter.ex | 12 +- .../uniris}/interpreter/ast.ex | 2 +- .../uniris}/interpreter/contract.ex | 8 +- .../uniris}/interpreter/std.ex | 2 +- .../uniris}/interpreter/supervisor.ex | 11 +- .../uniris}/interpreter/transaction_loader.ex | 12 +- .../lib/uniris_core => lib/uniris}/mining.ex | 28 +-- .../uniris}/mining/binary_sequence.ex | 4 +- .../uniris}/mining/context.ex | 46 ++--- .../uniris_core => lib/uniris}/mining/fee.ex | 14 +- .../uniris}/mining/malicious_detection.ex | 4 +- .../uniris}/mining/proof_of_integrity.ex | 8 +- .../uniris}/mining/proof_of_work.ex | 14 +- .../uniris}/mining/replication.ex | 63 ++++-- .../uniris}/mining/supervisor.ex | 6 +- .../uniris}/mining/worker.ex | 48 ++--- .../lib/uniris_core => lib/uniris}/p2p.ex | 12 +- .../uniris}/p2p/bootstraping_seeds.ex | 8 +- .../p2p/node => lib/uniris/p2p}/client.ex | 10 +- .../node => lib/uniris/p2p}/client/impl.ex | 2 +- .../uniris/p2p}/client/tcp_impl.ex | 6 +- .../server.ex => lib/uniris/p2p/endpoint.ex | 102 +++++----- .../uniris}/p2p/geo_patch.ex | 6 +- .../uniris_core => lib/uniris}/p2p/message.ex | 30 +-- .../p2p/message/acknowledge_storage.ex | 4 +- .../uniris}/p2p/message/add_context.ex | 6 +- .../uniris}/p2p/message/add_node_info.ex | 4 +- .../uniris}/p2p/message/balance.ex | 2 +- .../uniris}/p2p/message/beacon_slot_list.ex | 4 +- .../uniris}/p2p/message/bootstraping_nodes.ex | 4 +- .../uniris}/p2p/message/cross_validate.ex | 6 +- .../p2p/message/cross_validation_done.ex | 6 +- .../p2p/message/encrypted_storage_nonce.ex | 2 +- .../uniris}/p2p/message/get_balance.ex | 4 +- .../uniris}/p2p/message/get_beacon_slots.ex | 2 +- .../p2p/message/get_bootstraping_nodes.ex | 2 +- .../p2p/message/get_last_transaction.ex | 4 +- .../p2p/message/get_proof_of_integrity.ex | 4 +- .../uniris}/p2p/message/get_storage_nonce.ex | 4 +- .../uniris}/p2p/message/get_transaction.ex | 4 +- .../p2p/message/get_transaction_chain.ex | 4 +- .../message/get_transaction_chain_length.ex | 4 +- .../p2p/message/get_transaction_history.ex | 4 +- .../p2p/message/get_transaction_inputs.ex | 4 +- .../p2p/message/get_unspent_outputs.ex | 4 +- .../uniris}/p2p/message/list_nodes.ex | 2 +- .../uniris}/p2p/message/new_transaction.ex | 4 +- .../uniris}/p2p/message/node_list.ex | 4 +- .../uniris}/p2p/message/not_found.ex | 2 +- .../uniris}/p2p/message/ok.ex | 2 +- .../uniris}/p2p/message/proof_of_integrity.ex | 4 +- .../p2p/message/replicate_transaction.ex | 4 +- .../uniris}/p2p/message/start_mining.ex | 6 +- .../p2p/message/transaction_chain_length.ex | 2 +- .../p2p/message/transaction_history.ex | 6 +- .../p2p/message/transaction_input_list.ex | 4 +- .../uniris}/p2p/message/transaction_list.ex | 4 +- .../p2p/message/unspent_output_list.ex | 4 +- .../uniris_core => lib/uniris}/p2p/node.ex | 50 ++--- lib/uniris/p2p/node_view_supervisor.ex | 27 +++ lib/uniris/p2p/supervisor.ex | 33 ++++ .../uniris}/p2p/transaction_loader.ex | 18 +- .../lib/uniris_core => lib/uniris}/pub_sub.ex | 8 +- .../transfer.ex => lib/uniris/release_task.ex | 37 +++- .../uniris_core => lib/uniris}/self_repair.ex | 38 ++-- .../uniris}/shared_secrets.ex | 18 +- .../uniris}/shared_secrets/cache.ex | 15 +- .../uniris}/shared_secrets/node_renewal.ex | 20 +- .../uniris}/shared_secrets/supervisor.ex | 14 +- .../shared_secrets/transaction_loader.ex | 14 +- .../lib/uniris_core => lib/uniris}/storage.ex | 72 ++++--- .../uniris}/storage/backend.ex | 8 +- .../uniris}/storage/backend/cassandra.ex | 28 +-- .../cassandra/chain_query/supervisor.ex | 4 +- .../backend/cassandra/chain_query/worker.ex | 4 +- .../backend/cassandra/schema_migrator.ex | 2 +- .../storage/backend/cassandra/supervisor.ex | 9 +- .../uniris}/storage/backend/file_impl.ex | 30 ++- .../uniris}/storage/backend/impl.ex | 2 +- .../uniris}/storage/cache.ex | 185 ++++++++++------- .../uniris}/storage/supervisor.ex | 8 +- .../uniris_core => lib/uniris}/transaction.ex | 55 +++--- .../transaction/cross_validation_stamp.ex | 12 +- .../uniris}/transaction/data.ex | 20 +- .../uniris}/transaction/data/keys.ex | 14 +- .../uniris}/transaction/data/ledger.ex | 18 +- .../transaction/data/ledger/transfer.ex | 10 +- .../uniris}/transaction/data/ledger/uco.ex | 20 +- .../uniris}/transaction/input.ex | 16 +- .../uniris}/transaction/validation_stamp.ex | 26 +-- .../validation_stamp/ledger_operations.ex | 42 ++-- .../ledger_operations/node_movement.ex | 12 +- .../ledger_operations/transaction_movement.ex | 12 +- .../ledger_operations/unspent_output.ex | 12 +- .../lib/uniris_core => lib/uniris}/utils.ex | 10 +- {apps/uniris_web/lib => lib}/uniris_web.ex | 0 .../uniris_web/channels/user_socket.ex | 0 .../controllers/explorer_controller.ex | 16 +- .../uniris_web/controllers/node_controller.ex | 10 +- .../uniris_web/controllers/root_controller.ex | 0 .../controllers/transaction_controller.ex | 87 +++++++- .../lib => lib}/uniris_web/endpoint.ex | 6 +- .../lib => lib}/uniris_web/graphql_schema.ex | 42 ++-- .../uniris_web/graphql_schema/address_type.ex | 2 +- .../uniris_web/graphql_schema/content_type.ex | 0 .../graphql_schema/datetime_type.ex | 0 .../uniris_web/graphql_schema/hex_type.ex | 0 .../graphql_schema/transaction_type.ex | 10 +- .../uniris_web/live/top_node_live.ex | 6 +- .../uniris_web/live/top_transactions_live.ex | 6 +- .../live/transaction_details_live.ex | 17 +- .../uniris_web/live/transaction_list_live.ex | 6 +- .../lib => lib}/uniris_web/router.ex | 4 + lib/uniris_web/supervisor.ex | 24 +++ .../templates/code/viewer.html.leex | 32 +++ .../uniris_web/templates/error/404.html.eex | 0 lib/uniris_web/templates/error/500.html.eex | 3 + .../templates/explorer/404.html.eex | 0 .../templates/explorer/chain.html.eex | 0 .../templates/explorer/index.html.eex | 0 .../explorer/top_node_list.html.leex | 0 .../explorer/top_transactions.html.leex | 0 .../explorer/transaction_details.html.leex | 2 +- .../explorer/transaction_list.html.leex | 0 lib/uniris_web/templates/layout/app.html.eex | 1 + .../templates/layout/live.html.leex | 0 .../uniris_web/templates/layout/root.html.eex | 2 + .../uniris_web/templates/node/index.html.eex | 0 .../uniris_web/templates/node/show.html.eex | 0 .../uniris_web/transaction_subscriber.ex | 2 +- .../uniris_web/views/error_helpers.ex | 0 .../uniris_web/views/error_view.ex | 2 + .../uniris_web/views/explorer_view.ex | 0 .../uniris_web/views/layout_helpers.ex | 0 .../uniris_web/views/layout_view.ex | 1 + .../lib => lib}/uniris_web/views/node_view.ex | 1 + mix.exs | 48 ++++- package-lock.json | 3 + .../p2p/IP2LOCATION-LITE-DB5.BIN | Bin {apps/uniris_core/priv => priv}/p2p/seeds | 0 rel/config.exs | 7 +- rel/runtime_config.exs | 17 +- run.sh | 83 ++++++++ {apps/uniris_core/src => src}/c/ed25519.c | 0 .../uniris_core/src => src}/c/stdio_helpers.c | 0 .../uniris_core/src => src}/c/stdio_helpers.h | 0 {apps/uniris_core/src => src}/ip2location.erl | 0 .../test => test}/support/channel_case.ex | 0 .../test => test}/support/conn_case.ex | 5 +- .../test => test}/support/template.ex | 14 +- test/test_helper.exs | 7 + test/uniris/beacon/slot/node_info_test.exs | 4 + .../beacon/slot/transaction_info_test.exs | 4 + test/uniris/beacon/slot_test.exs | 4 + .../uniris}/beacon/slot_timer_test.exs | 8 +- .../uniris}/beacon/subset_test.exs | 14 +- .../uniris}/beacon_test.exs | 22 +-- .../uniris}/bootstrap/network_init_test.exs | 58 +++--- .../uniris}/bootstrap_test.exs | 50 ++--- .../uniris}/crypto/ecdsa_test.exs | 4 +- .../uniris}/crypto/ed25519_test.exs | 4 +- .../crypto/transaction_loader_test.exs | 14 +- .../uniris}/crypto_test.exs | 4 +- .../uniris}/election/constraints_test.exs | 18 +- .../uniris}/election_test.exs | 16 +- test/uniris/interpreter_test.exs | 4 + .../uniris}/mining/binary_sequence_test.exs | 6 +- .../uniris}/mining/context_test.exs | 52 ++--- .../uniris}/mining/fee_test.exs | 8 +- .../mining/proof_of_integrity_test.exs | 14 +- .../uniris}/mining/proof_of_work_test.exs | 18 +- .../uniris}/mining/replication_test.exs | 54 ++--- .../uniris}/mining/worker_test.exs | 58 +++--- .../uniris/p2p/client}/tcp_client_test.exs | 10 +- .../uniris/p2p/endpoint_test.exs | 13 +- .../uniris}/p2p/messages_test.exs | 118 +++++------ .../uniris}/p2p/node_test.exs | 6 +- .../uniris}/p2p/transaction_loader_test.exs | 45 +++-- .../uniris_core => test/uniris}/p2p_test.exs | 12 +- .../uniris}/self_repair_test.exs | 40 ++-- .../uniris}/shared_secrets/cache_test.exs | 6 +- .../shared_secrets/node_renewal_test.exs | 18 +- .../uniris}/shared_secrets_test.exs | 12 +- .../uniris}/storage/cache_test.exs | 80 +++----- .../cross_validation_stamp_test.exs | 12 +- .../uniris}/transaction/data/keys_test.exs | 8 +- .../transaction/data/ledger/transfer_test.exs | 5 + .../data/ledger/uco_ledger_test.exs | 6 +- test/uniris/transaction/data/ledger_test.exs | 6 + .../uniris}/transaction/data_test.exs | 14 +- test/uniris/transaction/input_test.exs | 4 + .../ledger_operations/node_movement_test.exs | 5 + .../transaction_movement_test.exs | 5 + .../ledger_operations/unspent_output_test.exs | 5 + .../ledger_operations_test.exs | 22 +-- .../transaction/validation_stamp_test.exs | 30 +-- .../uniris}/transaction_test.exs | 14 +- .../uniris}/utils_test.exs | 6 +- test/uniris_test.exs | 3 + .../uniris_web/views/error_view_test.exs | 0 292 files changed, 2880 insertions(+), 2391 deletions(-) rename apps/uniris_core/Makefile => Makefile (100%) delete mode 100644 apps/uniris_core/.formatter.exs delete mode 100644 apps/uniris_core/.gitignore delete mode 100755 apps/uniris_core/config/config.exs delete mode 100755 apps/uniris_core/config/dev.exs delete mode 100755 apps/uniris_core/config/prod.exs delete mode 100755 apps/uniris_core/config/test.exs delete mode 100644 apps/uniris_core/lib/mix/tasks/clean_priv_dir.ex delete mode 100644 apps/uniris_core/lib/uniris_core/application.ex delete mode 100755 apps/uniris_core/lib/uniris_core/crypto/supervisor.ex delete mode 100644 apps/uniris_core/lib/uniris_core/p2p/node_view_supervisor.ex delete mode 100644 apps/uniris_core/lib/uniris_core/p2p/supervisor.ex delete mode 100644 apps/uniris_core/mix.exs delete mode 100644 apps/uniris_core/test/test_helper.exs delete mode 100644 apps/uniris_core/test/uniris_core/beacon/slot/node_info_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/beacon/slot/transaction_info_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/beacon/slot_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/interpreter_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/transaction/data/ledger/transfer_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/transaction/data/ledger_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/transaction/input_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/node_movement_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/transaction_movement_test.exs delete mode 100644 apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/unspent_output_test.exs delete mode 100644 apps/uniris_core/test/uniris_core_test.exs delete mode 100644 apps/uniris_web/.formatter.exs delete mode 100644 apps/uniris_web/.gitignore delete mode 100644 apps/uniris_web/README.md delete mode 100644 apps/uniris_web/assets/js/app.js delete mode 100644 apps/uniris_web/config/config.exs delete mode 100644 apps/uniris_web/config/dev.exs delete mode 100644 apps/uniris_web/config/prod.exs delete mode 100644 apps/uniris_web/config/test.exs delete mode 100644 apps/uniris_web/lib/uniris_web/application.ex delete mode 100644 apps/uniris_web/lib/uniris_web/templates/layout/app.html.eex delete mode 100644 apps/uniris_web/mix.exs delete mode 100644 apps/uniris_web/test/test_helper.exs rename {apps/uniris_web/assets => assets}/css/app.css (62%) create mode 100644 assets/css/code_proposal.css create mode 100644 assets/css/code_viewer.css rename {apps/uniris_web/assets => assets}/css/explorer.css (100%) create mode 100644 assets/js/app.js rename {apps/uniris_web/assets => assets}/js/socket.js (100%) rename {apps/uniris_web/assets => assets}/package-lock.json (97%) rename {apps/uniris_web/assets => assets}/package.json (71%) rename {apps/uniris_web/assets => assets}/static/favicon.ico (100%) rename {apps/uniris_web/assets => assets}/static/images/logo.svg (100%) rename {apps/uniris_web/assets => assets}/static/robots.txt (100%) rename {apps/uniris_web/assets => assets}/webpack.config.js (100%) create mode 100755 config/dev.exs create mode 100755 config/prod.exs create mode 100755 config/test.exs delete mode 100755 create_release delete mode 100755 docker_release create mode 100644 lib/mix/tasks/clean_priv_dir.ex rename apps/uniris_core/lib/uniris_core.ex => lib/uniris.ex (99%) create mode 100644 lib/uniris/application.ex rename {apps/uniris_core/lib/uniris_core => lib/uniris}/beacon.ex (87%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/beacon/slot.ex (89%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/beacon/slot/node_info.ex (84%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/beacon/slot/transaction_info.ex (90%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/beacon/slot_timer.ex (92%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/beacon/subset.ex (94%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/beacon/subsets.ex (82%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/beacon/supervisor.ex (55%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/bootstrap.ex (91%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/bootstrap/ip_lookup.ex (54%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/bootstrap/ip_lookup/env_impl.ex (69%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/bootstrap/ip_lookup/impl.ex (58%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/bootstrap/ip_lookup/ipfy_impl.ex (70%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/bootstrap/ip_lookup/local_impl.ex (72%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/bootstrap/network_init.ex (82%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto.ex (88%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto/ecdsa.ex (98%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto/ed25519.ex (93%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto/id.ex (76%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto/keystore.ex (95%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto/keystore/impl.ex (84%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto/keystore/software_impl.ex (98%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto/libsodium_port.ex (94%) create mode 100755 lib/uniris/crypto/supervisor.ex rename {apps/uniris_core/lib/uniris_core => lib/uniris}/crypto/transaction_loader.ex (93%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/election.ex (98%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/election/constraints.ex (94%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/election/constraints/storage.ex (77%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/election/constraints/validation.ex (73%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/election/supervisor.ex (75%) create mode 100644 lib/uniris/governance.ex rename {apps/uniris_core/lib/uniris_core => lib/uniris}/interpreter.ex (89%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/interpreter/ast.ex (99%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/interpreter/contract.ex (97%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/interpreter/std.ex (73%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/interpreter/supervisor.ex (53%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/interpreter/transaction_loader.ex (75%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining.ex (88%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/binary_sequence.ex (97%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/context.ex (91%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/fee.ex (87%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/malicious_detection.ex (80%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/proof_of_integrity.ex (89%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/proof_of_work.ex (93%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/replication.ex (88%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/supervisor.ex (54%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/mining/worker.ex (95%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p.ex (92%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/bootstraping_seeds.ex (92%) rename {apps/uniris_core/lib/uniris_core/p2p/node => lib/uniris/p2p}/client.ex (67%) rename {apps/uniris_core/lib/uniris_core/p2p/node => lib/uniris/p2p}/client/impl.ex (78%) rename {apps/uniris_core/lib/uniris_core/p2p/node => lib/uniris/p2p}/client/tcp_impl.ex (84%) rename apps/uniris_core/lib/uniris_core/p2p/server.ex => lib/uniris/p2p/endpoint.ex (76%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/geo_patch.ex (95%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message.ex (96%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/acknowledge_storage.ex (78%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/add_context.ex (81%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/add_node_info.ex (81%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/balance.ex (78%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/beacon_slot_list.ex (74%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/bootstraping_nodes.ex (78%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/cross_validate.ex (76%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/cross_validation_done.ex (76%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/encrypted_storage_nonce.ex (83%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_balance.ex (75%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_beacon_slots.ex (87%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_bootstraping_nodes.ex (84%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_last_transaction.ex (73%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_proof_of_integrity.ex (80%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_storage_nonce.ex (76%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_transaction.ex (72%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_transaction_chain.ex (72%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_transaction_chain_length.ex (74%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_transaction_history.ex (81%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_transaction_inputs.ex (74%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/get_unspent_outputs.ex (74%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/list_nodes.ex (66%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/new_transaction.ex (76%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/node_list.ex (68%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/not_found.ex (68%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/ok.ex (63%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/proof_of_integrity.ex (74%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/replicate_transaction.ex (72%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/start_mining.ex (83%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/transaction_chain_length.ex (76%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/transaction_history.ex (66%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/transaction_input_list.ex (56%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/transaction_list.ex (69%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/message/unspent_output_list.ex (60%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/node.ex (91%) create mode 100644 lib/uniris/p2p/node_view_supervisor.ex create mode 100644 lib/uniris/p2p/supervisor.ex rename {apps/uniris_core/lib/uniris_core => lib/uniris}/p2p/transaction_loader.ex (92%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/pub_sub.ex (93%) rename apps/uniris_core/lib/release_tasks/transfer.ex => lib/uniris/release_task.ex (68%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/self_repair.ex (94%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/shared_secrets.ex (88%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/shared_secrets/cache.ex (68%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/shared_secrets/node_renewal.ex (90%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/shared_secrets/supervisor.ex (54%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/shared_secrets/transaction_loader.ex (92%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage.ex (71%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/backend.ex (85%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/backend/cassandra.ex (93%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/backend/cassandra/chain_query/supervisor.ex (73%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/backend/cassandra/chain_query/worker.ex (90%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/backend/cassandra/schema_migrator.ex (98%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/backend/cassandra/supervisor.ex (56%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/backend/file_impl.ex (89%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/backend/impl.ex (92%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/cache.ex (66%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/storage/supervisor.ex (59%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction.ex (95%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/cross_validation_stamp.ex (95%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/data.ex (90%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/data/keys.ex (94%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/data/ledger.ex (78%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/data/ledger/transfer.ex (87%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/data/ledger/uco.ex (79%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/input.ex (87%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/validation_stamp.ex (92%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/validation_stamp/ledger_operations.ex (91%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/validation_stamp/ledger_operations/node_movement.ex (80%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/validation_stamp/ledger_operations/transaction_movement.ex (79%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/transaction/validation_stamp/ledger_operations/unspent_output.ex (79%) rename {apps/uniris_core/lib/uniris_core => lib/uniris}/utils.ex (82%) rename {apps/uniris_web/lib => lib}/uniris_web.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/channels/user_socket.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/controllers/explorer_controller.ex (75%) rename {apps/uniris_web/lib => lib}/uniris_web/controllers/node_controller.ex (77%) rename {apps/uniris_web/lib => lib}/uniris_web/controllers/root_controller.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/controllers/transaction_controller.ex (56%) rename {apps/uniris_web/lib => lib}/uniris_web/endpoint.ex (93%) rename {apps/uniris_web/lib => lib}/uniris_web/graphql_schema.ex (80%) rename {apps/uniris_web/lib => lib}/uniris_web/graphql_schema/address_type.ex (97%) rename {apps/uniris_web/lib => lib}/uniris_web/graphql_schema/content_type.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/graphql_schema/datetime_type.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/graphql_schema/hex_type.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/graphql_schema/transaction_type.ex (95%) rename {apps/uniris_web/lib => lib}/uniris_web/live/top_node_live.ex (91%) rename {apps/uniris_web/lib => lib}/uniris_web/live/top_transactions_live.ex (90%) rename {apps/uniris_web/lib => lib}/uniris_web/live/transaction_details_live.ex (80%) rename {apps/uniris_web/lib => lib}/uniris_web/live/transaction_list_live.ex (90%) rename {apps/uniris_web/lib => lib}/uniris_web/router.ex (88%) create mode 100644 lib/uniris_web/supervisor.ex create mode 100644 lib/uniris_web/templates/code/viewer.html.leex rename {apps/uniris_web/lib => lib}/uniris_web/templates/error/404.html.eex (100%) create mode 100644 lib/uniris_web/templates/error/500.html.eex rename {apps/uniris_web/lib => lib}/uniris_web/templates/explorer/404.html.eex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/explorer/chain.html.eex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/explorer/index.html.eex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/explorer/top_node_list.html.leex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/explorer/top_transactions.html.leex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/explorer/transaction_details.html.leex (99%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/explorer/transaction_list.html.leex (100%) create mode 100644 lib/uniris_web/templates/layout/app.html.eex rename {apps/uniris_web/lib => lib}/uniris_web/templates/layout/live.html.leex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/layout/root.html.eex (87%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/node/index.html.eex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/templates/node/show.html.eex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/transaction_subscriber.ex (95%) rename {apps/uniris_web/lib => lib}/uniris_web/views/error_helpers.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/views/error_view.ex (96%) rename {apps/uniris_web/lib => lib}/uniris_web/views/explorer_view.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/views/layout_helpers.ex (100%) rename {apps/uniris_web/lib => lib}/uniris_web/views/layout_view.ex (76%) rename {apps/uniris_web/lib => lib}/uniris_web/views/node_view.ex (75%) create mode 100644 package-lock.json rename {apps/uniris_core/priv => priv}/p2p/IP2LOCATION-LITE-DB5.BIN (100%) rename {apps/uniris_core/priv => priv}/p2p/seeds (100%) create mode 100755 run.sh rename {apps/uniris_core/src => src}/c/ed25519.c (100%) rename {apps/uniris_core/src => src}/c/stdio_helpers.c (100%) rename {apps/uniris_core/src => src}/c/stdio_helpers.h (100%) rename {apps/uniris_core/src => src}/ip2location.erl (100%) rename {apps/uniris_web/test => test}/support/channel_case.ex (100%) rename {apps/uniris_web/test => test}/support/conn_case.ex (95%) rename {apps/uniris_core/test => test}/support/template.ex (90%) create mode 100644 test/test_helper.exs create mode 100644 test/uniris/beacon/slot/node_info_test.exs create mode 100644 test/uniris/beacon/slot/transaction_info_test.exs create mode 100644 test/uniris/beacon/slot_test.exs rename {apps/uniris_core/test/uniris_core => test/uniris}/beacon/slot_timer_test.exs (73%) rename {apps/uniris_core/test/uniris_core => test/uniris}/beacon/subset_test.exs (93%) rename {apps/uniris_core/test/uniris_core => test/uniris}/beacon_test.exs (96%) rename {apps/uniris_core/test/uniris_core => test/uniris}/bootstrap/network_init_test.exs (81%) rename {apps/uniris_core/test/uniris_core => test/uniris}/bootstrap_test.exs (91%) rename {apps/uniris_core/test/uniris_core => test/uniris}/crypto/ecdsa_test.exs (94%) rename {apps/uniris_core/test/uniris_core => test/uniris}/crypto/ed25519_test.exs (92%) rename {apps/uniris_core/test/uniris_core => test/uniris}/crypto/transaction_loader_test.exs (91%) rename {apps/uniris_core/test/uniris_core => test/uniris}/crypto_test.exs (95%) rename {apps/uniris_core/test/uniris_core => test/uniris}/election/constraints_test.exs (89%) rename {apps/uniris_core/test/uniris_core => test/uniris}/election_test.exs (96%) create mode 100644 test/uniris/interpreter_test.exs rename {apps/uniris_core/test/uniris_core => test/uniris}/mining/binary_sequence_test.exs (93%) rename {apps/uniris_core/test/uniris_core => test/uniris}/mining/context_test.exs (90%) rename {apps/uniris_core/test/uniris_core => test/uniris}/mining/fee_test.exs (96%) rename {apps/uniris_core/test/uniris_core => test/uniris}/mining/proof_of_integrity_test.exs (93%) rename {apps/uniris_core/test/uniris_core => test/uniris}/mining/proof_of_work_test.exs (95%) rename {apps/uniris_core/test/uniris_core => test/uniris}/mining/replication_test.exs (94%) rename {apps/uniris_core/test/uniris_core => test/uniris}/mining/worker_test.exs (94%) rename {apps/uniris_core/test/uniris_core/p2p/node => test/uniris/p2p/client}/tcp_client_test.exs (76%) rename apps/uniris_core/test/uniris_core/p2p/server_test.exs => test/uniris/p2p/endpoint_test.exs (67%) rename {apps/uniris_core/test/uniris_core => test/uniris}/p2p/messages_test.exs (92%) rename {apps/uniris_core/test/uniris_core => test/uniris}/p2p/node_test.exs (98%) rename {apps/uniris_core/test/uniris_core => test/uniris}/p2p/transaction_loader_test.exs (78%) rename {apps/uniris_core/test/uniris_core => test/uniris}/p2p_test.exs (89%) rename {apps/uniris_core/test/uniris_core => test/uniris}/self_repair_test.exs (84%) rename {apps/uniris_core/test/uniris_core => test/uniris}/shared_secrets/cache_test.exs (88%) rename {apps/uniris_core/test/uniris_core => test/uniris}/shared_secrets/node_renewal_test.exs (80%) rename {apps/uniris_core/test/uniris_core => test/uniris}/shared_secrets_test.exs (73%) rename {apps/uniris_core/test/uniris_core => test/uniris}/storage/cache_test.exs (81%) rename {apps/uniris_core/test/uniris_core => test/uniris}/transaction/cross_validation_stamp_test.exs (93%) rename {apps/uniris_core/test/uniris_core => test/uniris}/transaction/data/keys_test.exs (91%) create mode 100644 test/uniris/transaction/data/ledger/transfer_test.exs rename {apps/uniris_core/test/uniris_core => test/uniris}/transaction/data/ledger/uco_ledger_test.exs (81%) create mode 100644 test/uniris/transaction/data/ledger_test.exs rename {apps/uniris_core/test/uniris_core => test/uniris}/transaction/data_test.exs (85%) create mode 100644 test/uniris/transaction/input_test.exs create mode 100644 test/uniris/transaction/validation_stamp/ledger_operations/node_movement_test.exs create mode 100644 test/uniris/transaction/validation_stamp/ledger_operations/transaction_movement_test.exs create mode 100644 test/uniris/transaction/validation_stamp/ledger_operations/unspent_output_test.exs rename {apps/uniris_core/test/uniris_core => test/uniris}/transaction/validation_stamp/ledger_operations_test.exs (95%) rename {apps/uniris_core/test/uniris_core => test/uniris}/transaction/validation_stamp_test.exs (91%) rename {apps/uniris_core/test/uniris_core => test/uniris}/transaction_test.exs (93%) rename {apps/uniris_core/test/uniris_core => test/uniris}/utils_test.exs (91%) create mode 100644 test/uniris_test.exs rename {apps/uniris_web/test => test}/uniris_web/views/error_view_test.exs (100%) diff --git a/.dockerignore b/.dockerignore index 0133f7a6b..d8793307e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,11 +11,13 @@ erl_crash.dump **/doc . -/apps/uniris_core/priv/crypto/c_dist -/apps/uniris_core/priv/crypto/storage_nonce -/apps/uniris_core/priv/storage -/apps/uniris_core/priv/last_sync -/apps/uniris_core/priv/p2p/test_seeds +/priv/crypto/c_dist +/priv/crypto/storage_nonce +/priv/storage +/priv/last_sync +/priv/p2p/test_seeds +/priv/static/* + +/assets/node_modules/* -/create_release.sh /docker \ No newline at end of file diff --git a/.gitignore b/.gitignore index ac0ff1bdb..9986bc2d8 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,23 @@ erl_crash.dump **/doc . -/rel/artifacts \ No newline at end of file +/rel/artifacts + +.DS_Store + +/priv/crypto/c_dist +/priv/crypto/storage_nonce +/priv/storage +/priv/p2p/last_sync +/priv/p2p/last_sync/* +/priv/p2p/test_seeds + +# Since we are building assets from assets/, +# we ignore priv/static. You may want to comment +# this depending on your deployment strategy. +/priv/static/* + +# Self signed cert are used for local and dev purposes +/priv/cert + +/assets/node_modules \ No newline at end of file diff --git a/apps/uniris_core/Makefile b/Makefile similarity index 100% rename from apps/uniris_core/Makefile rename to Makefile diff --git a/README.md b/README.md index 5af8b938f..94f064b09 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,8 @@ Uniris features: - Designed with a high level of security (ARCH consensus supporting 90% of maliciousness) - Adapative cryptographic algorithms (quantum resistant) - Decentralized Identity and Self Sovereign Identity -- Smart contract platform powered by a build-in interpreter -- Strong scalability with geo secured +- Smart contract platform powered by a built-in interpreter +- Strong scalability with geo secured sharding - Soft-Real-Time P2P view with supervised networking ## Development diff --git a/apps/uniris_core/.formatter.exs b/apps/uniris_core/.formatter.exs deleted file mode 100644 index d2cda26ed..000000000 --- a/apps/uniris_core/.formatter.exs +++ /dev/null @@ -1,4 +0,0 @@ -# Used by "mix format" -[ - inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] -] diff --git a/apps/uniris_core/.gitignore b/apps/uniris_core/.gitignore deleted file mode 100644 index 9f0ab478a..000000000 --- a/apps/uniris_core/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# The directory Mix will write compiled artifacts to. -/_build/ - -# If you run "mix test --cover", coverage assets end up here. -/cover/ - -# The directory Mix downloads your dependencies sources to. -/deps/ - -# Where third-party dependencies like ExDoc output generated docs. -/doc/ - -# Ignore .fetch files in case you like to edit your project deps locally. -/.fetch - -# If the VM crashes, it generates a dump, let's ignore it too. -erl_crash.dump - -# Also ignore archive artifacts (built via "mix archive.build"). -*.ez - -# Ignore package tarball (built via "mix hex.build"). -uniris_core-*.tar - -/priv/crypto/c_dist -/priv/crypto/storage_nonce -/priv/storage -/priv/p2p/last_sync -/priv/p2p/last_sync/* -/priv/p2p/test_seeds \ No newline at end of file diff --git a/apps/uniris_core/config/config.exs b/apps/uniris_core/config/config.exs deleted file mode 100755 index 3addfa42a..000000000 --- a/apps/uniris_core/config/config.exs +++ /dev/null @@ -1,25 +0,0 @@ -use Mix.Config - -config :uniris_core, UnirisCore.Crypto, - supported_curves: [ - :ed25519, - :secp256r1, - :secp256k1 - ], - supported_hashes: [ - :sha256, - :sha512, - :sha3_256, - :sha3_512, - :blake2b - ], - default_curve: :ed25519, - default_hash: :sha256 - -config :uniris_core, UnirisCore.P2P, - port: System.get_env("UNIRIS_P2P_PORT", "3002") |> String.to_integer(), - node_client: UnirisCore.P2P.NodeTCPClient - -# Import environment specific config. This must remain at the bottmo -# of this file so it overrides the configuration defined above. -import_config "#{Mix.env()}.exs" diff --git a/apps/uniris_core/config/dev.exs b/apps/uniris_core/config/dev.exs deleted file mode 100755 index de0b0a490..000000000 --- a/apps/uniris_core/config/dev.exs +++ /dev/null @@ -1,73 +0,0 @@ -use Mix.Config - -config :uniris_core, UnirisCore.Crypto, keystore: UnirisCore.Crypto.SoftwareKeystore - -config :uniris_core, UnirisCore.Crypto.SoftwareKeystore, - seed: System.get_env("UNIRIS_CRYPTO_SEED") - -config :uniris_core, UnirisCore.Storage, backend: UnirisCore.Storage.FileBackend - -config :uniris_core, UnirisCore.Bootstrap, - ip_lookup_provider: UnirisCore.Bootstrap.IPLookup.LocalImpl, - interface: "lo0" - -config :uniris_core, UnirisCore.P2P.BootstrapingSeeds, - # First node crypto seed is "node1" - seeds: "127.0.0.1:3002:00682FF302BFA84702A00D81D5F97610E02573C0487FBCD6D00A66CCBC0E0656E8" - -config :uniris_core, UnirisCore.Bootstrap.NetworkInit, - genesis_pools: [ - funding: [ - public_key: "002E354A95241E867C836E8BBBBF6F9BF2450860BA28B1CF24B734EF67FF49169E", - amount: 3.82e9 - ], - deliverable: [ - public_key: "00AD439F0CD4048576D4AFB812DCB1815C57EFC303BFF03696436B157C69547128", - amount: 2.36e9 - ], - enhancement: [ - public_key: "008C9309535A3853379D6367F67AB93E3DAF5BFAA41C68BD7C3C1F00AA8D5822FD", - amount: 9.0e8 - ], - team: [ - public_key: "00B1F862FF9E534DAC6A0AD32528E08F7BB0F3DD0DCB253B119900F4CE447C5CC4", - amount: 5.6e8 - ], - exchange: [ - public_key: "004CD06F40D2F75DA02B29D559A3CBD5E07580B1E65163A4F3256CDC8781B280E3", - amount: 3.4e8 - ], - marketing: [ - public_key: "00783510644E885FFAC82FE22FB3F33C5B0936B79B7A3D3A78D5D612341A0B3B9A", - amount: 3.4e8 - ], - foundation: [ - public_key: "00CD534224DE5AE2584163D69A8A99F36E6FAE506373B619736B511A58B804E311", - amount: 2.2e8 - ] - ] - -config :uniris_core, UnirisCore.BeaconSlotTimer, - interval: 60_000, - trigger_offset: 2_000 - -config :uniris_core, UnirisCore.SharedSecrets.NodeRenewal, - interval: 60_000, - trigger_offset: 10_000 - -config :uniris_core, UnirisCore.SelfRepair, - last_sync_file: "priv/p2p/last_sync/#{System.get_env("UNIRIS_CRYPTO_SEED")}", - interval: 60_000, - network_startup_date: %DateTime{ - year: DateTime.utc_now().year, - month: DateTime.utc_now().month, - day: DateTime.utc_now().day, - hour: DateTime.utc_now().hour - 1, - minute: 0, - second: 0, - microsecond: {0, 0}, - utc_offset: 0, - std_offset: 0, - time_zone: "Etc/UTC", - zone_abbr: "UTC" - } diff --git a/apps/uniris_core/config/prod.exs b/apps/uniris_core/config/prod.exs deleted file mode 100755 index 86aaa6d59..000000000 --- a/apps/uniris_core/config/prod.exs +++ /dev/null @@ -1,74 +0,0 @@ -use Mix.Config - -# TODO: specify the crypto implementation using hardware when developed -config :uniris_core, UnirisCore.Crypto, keystore: UnirisCore.Crypto.SoftwareKeystore - -config :uniris_core, UnirisCore.Storage, backend: UnirisCore.Storage.CassandraBackend - -config :uniris_core, UnirisCore.Storage.CassandraBackend, nodes: ["127.0.0.1:9042"] - -config :uniris_core, UnirisCore.Bootstrap, - ip_lookup_provider: UnirisCore.Bootstrap.IPLookup.IPFYImpl, - # seeds_file: "priv/p2p/seeds", - seeds: "127.0.0.1:3002:00682FF302BFA84702A00D81D5F97610E02573C0487FBCD6D00A66CCBC0E0656E8" - -config :uniris_core, UnirisCore.Bootstrap.NetworkInit, - # TODO: provide the true addresses for the genesis UCO distribution - genesis_pools: [ - funding: [ - public_key: "002E354A95241E867C836E8BBBBF6F9BF2450860BA28B1CF24B734EF67FF49169E", - amount: 3.82e9 - ], - deliverable: [ - public_key: "00AD439F0CD4048576D4AFB812DCB1815C57EFC303BFF03696436B157C69547128", - amount: 2.36e9 - ], - enhancement: [ - public_key: "008C9309535A3853379D6367F67AB93E3DAF5BFAA41C68BD7C3C1F00AA8D5822FD", - amount: 9.0e8 - ], - team: [ - public_key: "00B1F862FF9E534DAC6A0AD32528E08F7BB0F3DD0DCB253B119900F4CE447C5CC4", - amount: 5.6e8 - ], - exchange: [ - public_key: "004CD06F40D2F75DA02B29D559A3CBD5E07580B1E65163A4F3256CDC8781B280E3", - amount: 3.4e8 - ], - marketing: [ - public_key: "00783510644E885FFAC82FE22FB3F33C5B0936B79B7A3D3A78D5D612341A0B3B9A", - amount: 3.4e8 - ], - foundation: [ - public_key: "00CD534224DE5AE2584163D69A8A99F36E6FAE506373B619736B511A58B804E311", - amount: 2.2e8 - ] - ] - -config :uniris_core, UnirisCore.BeaconSlotTimer, - # TODO: change to 10 minute when the ready and beacon day summary implemented - interval: 60_000, - trigger_offset: 2_000 - -config :uniris_core, UnirisCore.SharedSecrets.NodeRenewal, - # TODO: change to day when the ready - interval: 60_000, - trigger_offset: 10_000 - -config :uniris_core, UnirisCore.SelfRepair, - # TODO: change to day when the ready - interval: 60_000, - # TODO: specify the real network startup date - network_startup_date: %DateTime{ - year: DateTime.utc_now().year, - month: DateTime.utc_now().month, - day: DateTime.utc_now().day, - hour: DateTime.utc_now().hour - 1, - minute: 0, - second: 0, - microsecond: {0, 0}, - utc_offset: 0, - std_offset: 0, - time_zone: "Etc/UTC", - zone_abbr: "UTC" - } diff --git a/apps/uniris_core/config/test.exs b/apps/uniris_core/config/test.exs deleted file mode 100755 index f94800aef..000000000 --- a/apps/uniris_core/config/test.exs +++ /dev/null @@ -1,79 +0,0 @@ -use Mix.Config - -config :uniris_core, UnirisCore.Crypto, keystore: MockCrypto - -config :uniris_core, UnirisCore.Crypto.SoftwareKeystore, seed: "fake seed" - -config :uniris_core, UnirisCore.Crypto.Keystore, enabled: false -config :uniris_core, UnirisCore.Crypto.TransactionLoader, enabled: false - -config :uniris_core, UnirisCore.Storage, backend: MockStorage -config :uniris_core, UnirisCore.Storage.FileBackend, enabled: false -config :uniris_core, UnirisCore.Storage.CassandraBackend, enabled: false -config :uniris_core, MockStorage, enabled: false -config :uniris_core, UnirisCore.Storage.Cache, enabled: false - -config :uniris_core, UnirisCore.P2P, - port: 10_000, - node_client: MockNodeClient - -config :uniris_core, UnirisCore.P2P.TransactionLoader, enabled: false - -config :uniris_core, UnirisCore.BeaconSubset, enabled: false - -config :uniris_core, UnirisCore.BeaconSlotTimer, - enabled: false, - interval: 0, - trigger_offset: 0 - -config :uniris_core, UnirisCore.SharedSecrets.TransactionLoader, enabled: false - -config :uniris_core, UnirisCore.SharedSecrets.NodeRenewal, - enabled: false, - trigger_interval: 0, - interval: 0 - -config :uniris_core, UnirisCore.SelfRepair, - enabled: false, - interval: 0, - network_startup_date: DateTime.utc_now() - -config :uniris_core, UnirisCore.Bootstrap, - ip_lookup_provider: MockIPLookup, - enabled: false - -config :uniris_core, UnirisCore.Bootstrap.NetworkInit, - genesis_pools: [ - funding: [ - public_key: "002E354A95241E867C836E8BBBBF6F9BF2450860BA28B1CF24B734EF67FF49169E", - amount: 3.82e9 - ], - deliverable: [ - public_key: "00AD439F0CD4048576D4AFB812DCB1815C57EFC303BFF03696436B157C69547128", - amount: 2.36e9 - ], - enhancement: [ - public_key: "008C9309535A3853379D6367F67AB93E3DAF5BFAA41C68BD7C3C1F00AA8D5822FD", - amount: 9.0e8 - ], - team: [ - public_key: "00B1F862FF9E534DAC6A0AD32528E08F7BB0F3DD0DCB253B119900F4CE447C5CC4", - amount: 5.6e8 - ], - exchange: [ - public_key: "004CD06F40D2F75DA02B29D559A3CBD5E07580B1E65163A4F3256CDC8781B280E3", - amount: 3.4e8 - ], - marketing: [ - public_key: "00783510644E885FFAC82FE22FB3F33C5B0936B79B7A3D3A78D5D612341A0B3B9A", - amount: 3.4e8 - ], - foundation: [ - public_key: "00CD534224DE5AE2584163D69A8A99F36E6FAE506373B619736B511A58B804E311", - amount: 2.2e8 - ] - ] - -config :uniris_core, UnirisCore.Interpreter.TransactionLoader, enabled: false - -config :uniris_core, UnirisCore.P2P.BootstrapingSeeds, enabled: false diff --git a/apps/uniris_core/lib/mix/tasks/clean_priv_dir.ex b/apps/uniris_core/lib/mix/tasks/clean_priv_dir.ex deleted file mode 100644 index 9c7859807..000000000 --- a/apps/uniris_core/lib/mix/tasks/clean_priv_dir.ex +++ /dev/null @@ -1,14 +0,0 @@ -defmodule Mix.Tasks.CleanPrivDir do - @moduledoc """ - Task to clean the dev environment to reset the filestorage, last synchronization date - and storage nonce - """ - use Mix.Task - - @shortdoc "Clean the uniris_core priv folder for development phase" - def run(_) do - File.rm_rf!(Application.app_dir(:uniris_core, "priv/storage")) - File.rm_rf!(Application.app_dir(:uniris_core, "priv/p2p/last_sync")) - File.rm(Application.app_dir(:uniris_core, "priv/crypto/storage_nonce")) - end -end diff --git a/apps/uniris_core/lib/uniris_core/application.ex b/apps/uniris_core/lib/uniris_core/application.ex deleted file mode 100644 index af6cd423b..000000000 --- a/apps/uniris_core/lib/uniris_core/application.ex +++ /dev/null @@ -1,44 +0,0 @@ -defmodule UnirisCore.Application do - @moduledoc false - - use Application - - alias UnirisCore.Utils - - def start(_type, _args) do - repair_interval = - :uniris_core - |> Application.get_env(UnirisCore.SelfRepair) - |> Keyword.get(:interval) - - last_sync_file = - :uniris_core - |> Application.get_env(UnirisCore.SelfRepair) - |> Keyword.get(:last_sync_file) - - children = - [ - {Task.Supervisor, name: UnirisCore.TaskSupervisor}, - {Registry, keys: :duplicate, name: UnirisCore.PubSubRegistry}, - UnirisCore.StorageSupervisor, - UnirisCore.CryptoSupervisor, - UnirisCore.ElectionSupervisor, - UnirisCore.P2PSupervisor, - UnirisCore.SharedSecretsSupervisor, - UnirisCore.MiningSupervisor, - UnirisCore.InterpreterSupervisor, - UnirisCore.BeaconSupervisor - ] ++ - Utils.configurable_children([ - {UnirisCore.SelfRepair, [interval: repair_interval, last_sync_file: last_sync_file], - []}, - {UnirisCore.Bootstrap, - [ - port: Application.get_env(:uniris_core, UnirisCore.P2P)[:port] - ], []} - ]) - - opts = [strategy: :rest_for_one, name: UnirisCore.Supervisor] - Supervisor.start_link(children, opts) - end -end diff --git a/apps/uniris_core/lib/uniris_core/crypto/supervisor.ex b/apps/uniris_core/lib/uniris_core/crypto/supervisor.ex deleted file mode 100755 index ec5991a70..000000000 --- a/apps/uniris_core/lib/uniris_core/crypto/supervisor.ex +++ /dev/null @@ -1,28 +0,0 @@ -defmodule UnirisCore.CryptoSupervisor do - @moduledoc false - use Supervisor - - alias UnirisCore.Utils - - def start_link(opts) do - Supervisor.start_link(__MODULE__, opts, name: __MODULE__) - end - - def init(_opts) do - renewal_interval = - :uniris_core - |> Application.get_env(UnirisCore.SharedSecrets.NodeRenewal) - |> Keyword.fetch!(:interval) - - children = - [ - UnirisCore.Crypto.LibSodiumPort - ] ++ - Utils.configurable_children([ - {UnirisCore.Crypto.Keystore, [], []}, - {UnirisCore.Crypto.TransactionLoader, [renewal_interval: renewal_interval], []} - ]) - - Supervisor.init(children, strategy: :rest_for_one) - end -end diff --git a/apps/uniris_core/lib/uniris_core/p2p/node_view_supervisor.ex b/apps/uniris_core/lib/uniris_core/p2p/node_view_supervisor.ex deleted file mode 100644 index 410378ff5..000000000 --- a/apps/uniris_core/lib/uniris_core/p2p/node_view_supervisor.ex +++ /dev/null @@ -1,29 +0,0 @@ -defmodule UnirisCore.P2P.NodeViewSupervisor do - @moduledoc false - - use Supervisor - - alias UnirisCore.Utils - - def start_link(opts) do - Supervisor.start_link(__MODULE__, opts, name: __MODULE__) - end - - def init(_opts) do - renewal_interval = - :uniris_core - |> Application.get_env(UnirisCore.SharedSecrets.NodeRenewal) - |> Keyword.fetch!(:interval) - - Supervisor.init( - [ - {Registry, keys: :unique, name: UnirisCore.P2P.NodeRegistry}, - {DynamicSupervisor, name: UnirisCore.P2P.NodeSupervisor, strategy: :one_for_one} - ] ++ - Utils.configurable_children([ - {UnirisCore.P2P.TransactionLoader, [renewal_interval: renewal_interval], []} - ]), - strategy: :rest_for_one - ) - end -end diff --git a/apps/uniris_core/lib/uniris_core/p2p/supervisor.ex b/apps/uniris_core/lib/uniris_core/p2p/supervisor.ex deleted file mode 100644 index d7fa6291b..000000000 --- a/apps/uniris_core/lib/uniris_core/p2p/supervisor.ex +++ /dev/null @@ -1,38 +0,0 @@ -defmodule UnirisCore.P2PSupervisor do - @moduledoc false - - alias UnirisCore.P2P.BootstrapingSeeds - alias UnirisCore.P2P.GeoPatch - alias UnirisCore.P2P.NodeViewSupervisor - - alias UnirisCore.P2PServer - alias UnirisCore.Utils - - use Supervisor - - def start_link(opts) do - Supervisor.start_link(__MODULE__, opts, name: __MODULE__) - end - - def init(_opts) do - port = Application.get_env(:uniris_core, UnirisCore.P2P) |> Keyword.fetch!(:port) - - bootstraping_seeds_file = - :uniris_core - |> Application.get_env(BootstrapingSeeds, []) - |> Keyword.get(:file, "priv/p2p/seeds") - - children = - [ - {P2PServer, port: port}, - GeoPatch, - NodeViewSupervisor - ] ++ - Utils.configurable_children([ - {BootstrapingSeeds, [file: Application.app_dir(:uniris_core, bootstraping_seeds_file)], - []} - ]) - - Supervisor.init(children, strategy: :one_for_one) - end -end diff --git a/apps/uniris_core/mix.exs b/apps/uniris_core/mix.exs deleted file mode 100644 index 86a59dd8e..000000000 --- a/apps/uniris_core/mix.exs +++ /dev/null @@ -1,42 +0,0 @@ -defmodule UnirisCore.MixProject do - use Mix.Project - - def project do - [ - app: :uniris_core, - version: "0.6.1", - build_path: "../../_build", - config_path: "../../config/config.exs", - deps_path: "../../deps", - lockfile: "../../mix.lock", - elixir: "~> 1.10", - start_permanent: Mix.env() == :prod, - compilers: [:elixir_make] ++ Mix.compilers(), - elixirc_paths: elixirc_paths(Mix.env()), - deps: deps() - ] - end - - # Run "mix help compile.app" to learn about applications. - def application do - [ - extra_applications: [:logger, :inets], - mod: {UnirisCore.Application, []} - ] - end - - defp elixirc_paths(:test), do: ["lib", "test/support"] - defp elixirc_paths(_), do: ["lib"] - - # Run "mix help deps" to learn about dependencies. - defp deps do - [ - {:flow, "~> 1.0"}, - {:elixir_make, "~> 0.6.0"}, - {:ex_doc, "~> 0.21.2", only: [:dev]}, - {:mox, "~> 0.5.2", only: [:test]}, - {:stream_data, "~> 0.4.3", only: [:test]}, - {:xandra, "~> 0.11"} - ] - end -end diff --git a/apps/uniris_core/test/test_helper.exs b/apps/uniris_core/test/test_helper.exs deleted file mode 100644 index 3398d2a1f..000000000 --- a/apps/uniris_core/test/test_helper.exs +++ /dev/null @@ -1,7 +0,0 @@ -Mix.Tasks.CleanPrivDir.run([]) - -ExUnit.start() - -Mox.defmock(MockNodeClient, for: UnirisCore.P2P.NodeClientImpl) -Mox.defmock(MockCrypto, for: UnirisCore.Crypto.KeystoreImpl) -Mox.defmock(MockStorage, for: UnirisCore.Storage.BackendImpl) diff --git a/apps/uniris_core/test/uniris_core/beacon/slot/node_info_test.exs b/apps/uniris_core/test/uniris_core/beacon/slot/node_info_test.exs deleted file mode 100644 index a15519421..000000000 --- a/apps/uniris_core/test/uniris_core/beacon/slot/node_info_test.exs +++ /dev/null @@ -1,4 +0,0 @@ -defmodule UnirisCore.BeaconSlot.NodeInfoTest do - use ExUnit.Case - doctest UnirisCore.BeaconSlot.NodeInfo -end diff --git a/apps/uniris_core/test/uniris_core/beacon/slot/transaction_info_test.exs b/apps/uniris_core/test/uniris_core/beacon/slot/transaction_info_test.exs deleted file mode 100644 index dcd4de66a..000000000 --- a/apps/uniris_core/test/uniris_core/beacon/slot/transaction_info_test.exs +++ /dev/null @@ -1,4 +0,0 @@ -defmodule UnirisCore.BeaconSlot.TransactionInfoTest do - use ExUnit.Case - doctest UnirisCore.BeaconSlot.TransactionInfo -end diff --git a/apps/uniris_core/test/uniris_core/beacon/slot_test.exs b/apps/uniris_core/test/uniris_core/beacon/slot_test.exs deleted file mode 100644 index 84b222605..000000000 --- a/apps/uniris_core/test/uniris_core/beacon/slot_test.exs +++ /dev/null @@ -1,4 +0,0 @@ -defmodule UnirisCore.BeaconSlotTest do - use ExUnit.Case - doctest UnirisCore.BeaconSlot -end diff --git a/apps/uniris_core/test/uniris_core/interpreter_test.exs b/apps/uniris_core/test/uniris_core/interpreter_test.exs deleted file mode 100644 index 1bf2edb60..000000000 --- a/apps/uniris_core/test/uniris_core/interpreter_test.exs +++ /dev/null @@ -1,4 +0,0 @@ -defmodule UnirisCore.InterepreterTest do - use ExUnit.Case - doctest UnirisCore.Interpreter -end diff --git a/apps/uniris_core/test/uniris_core/transaction/data/ledger/transfer_test.exs b/apps/uniris_core/test/uniris_core/transaction/data/ledger/transfer_test.exs deleted file mode 100644 index 875d91add..000000000 --- a/apps/uniris_core/test/uniris_core/transaction/data/ledger/transfer_test.exs +++ /dev/null @@ -1,5 +0,0 @@ -defmodule UnirisCore.TransactionData.Ledger.TransferTest do - use ExUnit.Case - - doctest UnirisCore.TransactionData.Ledger.Transfer -end diff --git a/apps/uniris_core/test/uniris_core/transaction/data/ledger_test.exs b/apps/uniris_core/test/uniris_core/transaction/data/ledger_test.exs deleted file mode 100644 index 2467d0e92..000000000 --- a/apps/uniris_core/test/uniris_core/transaction/data/ledger_test.exs +++ /dev/null @@ -1,6 +0,0 @@ -defmodule UnirisCore.TransactionData.LedgerTest do - use ExUnit.Case - - alias UnirisCore.TransactionData.Ledger - doctest Ledger -end diff --git a/apps/uniris_core/test/uniris_core/transaction/input_test.exs b/apps/uniris_core/test/uniris_core/transaction/input_test.exs deleted file mode 100644 index 7686c8479..000000000 --- a/apps/uniris_core/test/uniris_core/transaction/input_test.exs +++ /dev/null @@ -1,4 +0,0 @@ -defmodule UnirisCore.TransactionInputTest do - use ExUnit.Case - doctest UnirisCore.TransactionInput -end diff --git a/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/node_movement_test.exs b/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/node_movement_test.exs deleted file mode 100644 index f1720afa0..000000000 --- a/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/node_movement_test.exs +++ /dev/null @@ -1,5 +0,0 @@ -defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovementTest do - use ExUnit.Case - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement - doctest NodeMovement -end diff --git a/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/transaction_movement_test.exs b/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/transaction_movement_test.exs deleted file mode 100644 index 76940f234..000000000 --- a/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/transaction_movement_test.exs +++ /dev/null @@ -1,5 +0,0 @@ -defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovementTest do - use ExUnit.Case - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement - doctest TransactionMovement -end diff --git a/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/unspent_output_test.exs b/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/unspent_output_test.exs deleted file mode 100644 index 173ce63a0..000000000 --- a/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations/unspent_output_test.exs +++ /dev/null @@ -1,5 +0,0 @@ -defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutputTest do - use ExUnit.Case - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - doctest UnspentOutput -end diff --git a/apps/uniris_core/test/uniris_core_test.exs b/apps/uniris_core/test/uniris_core_test.exs deleted file mode 100644 index 8b843f7d0..000000000 --- a/apps/uniris_core/test/uniris_core_test.exs +++ /dev/null @@ -1,3 +0,0 @@ -defmodule UnirisCoreTest do - use ExUnit.Case -end diff --git a/apps/uniris_web/.formatter.exs b/apps/uniris_web/.formatter.exs deleted file mode 100644 index 47616780b..000000000 --- a/apps/uniris_web/.formatter.exs +++ /dev/null @@ -1,4 +0,0 @@ -[ - import_deps: [:phoenix], - inputs: ["*.{ex,exs}", "{config,lib,test}/**/*.{ex,exs}"] -] diff --git a/apps/uniris_web/.gitignore b/apps/uniris_web/.gitignore deleted file mode 100644 index f098095dc..000000000 --- a/apps/uniris_web/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -# The directory Mix will write compiled artifacts to. -/_build/ - -# If you run "mix test --cover", coverage assets end up here. -/cover/ - -# The directory Mix downloads your dependencies sources to. -/deps/ - -# Where 3rd-party dependencies like ExDoc output generated docs. -/doc/ - -# Ignore .fetch files in case you like to edit your project deps locally. -/.fetch - -# If the VM crashes, it generates a dump, let's ignore it too. -erl_crash.dump - -# Also ignore archive artifacts (built via "mix archive.build"). -*.ez - -# Ignore package tarball (built via "mix hex.build"). -uniris_web-*.tar - -# Since we are building assets from assets/, -# we ignore priv/static. You may want to comment -# this depending on your deployment strategy. -/priv/static/* - -# Self signed cert are used for local and dev purposes -/priv/cert - -/assets/node_modules diff --git a/apps/uniris_web/README.md b/apps/uniris_web/README.md deleted file mode 100644 index b6a31bff8..000000000 --- a/apps/uniris_web/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# UnirisWeb - -To start your Phoenix server: - - * Install dependencies with `mix deps.get` - * Start Phoenix endpoint with `mix phx.server` - -Now you can visit [`localhost:4000`](http://localhost:4000) from your browser. - -Ready to run in production? Please [check our deployment guides](https://hexdocs.pm/phoenix/deployment.html). - -## Learn more - - * Official website: https://www.phoenixframework.org/ - * Guides: https://hexdocs.pm/phoenix/overview.html - * Docs: https://hexdocs.pm/phoenix - * Forum: https://elixirforum.com/c/phoenix-forum - * Source: https://github.com/phoenixframework/phoenix diff --git a/apps/uniris_web/assets/js/app.js b/apps/uniris_web/assets/js/app.js deleted file mode 100644 index e348e37ef..000000000 --- a/apps/uniris_web/assets/js/app.js +++ /dev/null @@ -1,48 +0,0 @@ -// We need to import the CSS so that webpack will load it. -// The MiniCssExtractPlugin is used to separate it out into -// its own CSS file. -import css from "../css/app.css" - -// webpack automatically bundles all modules in your -// entry points. Those entry points can be configured - - -import {Socket} from "phoenix" -import LiveSocket from "phoenix_live_view" - -let Hooks = {} - -let scrollAt = () => { - let scrollTop = document.documentElement.scrollTop || document.body.scrollTop - let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight - let clientHeight = document.documentElement.clientHeight - - return scrollTop / (scrollHeight - clientHeight) * 100 -} - -Hooks.InfiniteScroll = { - page() { return this.el.dataset.page }, - mounted(){ - this.pending = this.page() - window.addEventListener("scroll", e => { - if(this.pending == this.page() && scrollAt() > 90){ - this.pending = this.page() + 1 - this.pushEvent("load-more", {}) - } - - }) - }, - reconnected(){ this.pending = this.page() }, - updated(){ this.pending = this.page() } -} - -let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content"); -let liveSocket = new LiveSocket("/live", Socket, {hooks: Hooks, params: {_csrf_token: csrfToken}}); - -// connect if there are any LiveViews on the page -liveSocket.connect() - -// expose liveSocket on window for web console debug logs and latency simulation: -// >> liveSocket.enableDebug() -// >> liveSocket.enableLatencySim(1000) -window.liveSocket = liveSocket \ No newline at end of file diff --git a/apps/uniris_web/config/config.exs b/apps/uniris_web/config/config.exs deleted file mode 100644 index 6e6a3d15b..000000000 --- a/apps/uniris_web/config/config.exs +++ /dev/null @@ -1,31 +0,0 @@ -# This file is responsible for configuring your application -# and its dependencies with the aid of the Mix.Config module. -# -# This configuration file is loaded before any dependency and -# is restricted to this project. - -# General application configuration -use Mix.Config - -# Configures the endpoint -config :uniris_web, UnirisWeb.Endpoint, - url: [host: "localhost"], - secret_key_base: "5mFu4p5cPMY5Ii0HvjkLfhYZYtC0JAJofu70bzmi5x3xzFIJNlXFgIY5g8YdDPMf", - render_errors: [view: UnirisWeb.ErrorView, accepts: ~w(json)], - pubsub: [name: UnirisWeb.PubSub, adapter: Phoenix.PubSub.PG2], - live_view: [ - signing_salt: "3D6jYvx3", - layout: {UnirisWeb.LayoutView, "live.html"} - ] - -# Configures Elixir's Logger -config :logger, :console, - format: "$time $metadata[$level] $message\n", - metadata: [:request_id] - -# Use Jason for JSON parsing in Phoenix -config :phoenix, :json_library, Jason - -# Import environment specific config. This must remain at the bottom -# of this file so it overrides the configuration defined above. -import_config "#{Mix.env()}.exs" diff --git a/apps/uniris_web/config/dev.exs b/apps/uniris_web/config/dev.exs deleted file mode 100644 index 31c5943ae..000000000 --- a/apps/uniris_web/config/dev.exs +++ /dev/null @@ -1,56 +0,0 @@ -use Mix.Config - -# For development, we disable any cache and enable -# debugging and code reloading. -# -# The watchers configuration can be used to run external -# watchers to your application. For example, we use it -# with webpack to recompile .js and .css sources. -config :uniris_web, UnirisWeb.Endpoint, - http: [port: 4000], - debug_errors: true, - code_reloader: true, - check_origin: false, - watchers: [ - node: [ - "node_modules/webpack/bin/webpack.js", - "--mode", - "development", - "--watch-stdin", - cd: Path.expand("../assets", __DIR__) - ] - ] - -# ## SSL Support -# -# In order to use HTTPS in development, a self-signed -# certificate can be generated by running the following -# Mix task: -# -# mix phx.gen.cert -# -# Note that this task requires Erlang/OTP 20 or later. -# Run `mix help phx.gen.cert` for more information. -# -# The `http:` config above can be replaced with: -# -# https: [ -# port: 4001, -# cipher_suite: :strong, -# keyfile: "priv/cert/selfsigned_key.pem", -# certfile: "priv/cert/selfsigned.pem" -# ], -# -# If desired, both `http:` and `https:` keys can be -# configured to run both http and https servers on -# different ports. - -# Do not include metadata nor timestamps in development logs -config :logger, :console, format: "[$level] $message\n" - -# Set a higher stacktrace during development. Avoid configuring such -# in production as building large stacktraces may be expensive. -config :phoenix, :stacktrace_depth, 20 - -# Initialize plugs at runtime for faster development compilation -config :phoenix, :plug_init_mode, :runtime diff --git a/apps/uniris_web/config/prod.exs b/apps/uniris_web/config/prod.exs deleted file mode 100644 index 1b0b2fe48..000000000 --- a/apps/uniris_web/config/prod.exs +++ /dev/null @@ -1,64 +0,0 @@ -use Mix.Config - -# For production, don't forget to configure the url host -# to something meaningful, Phoenix uses this information -# when generating URLs. -# -# Note we also include the path to a cache manifest -# containing the digested version of static files. This -# manifest is generated by the `mix phx.digest` task, -# which you should run after static files are built and -# before starting your production server. -config :uniris_web, UnirisWeb.Endpoint, - http: [:inet6, port: 80], - url: [host: "*", port: 443], - cache_static_manifest: "priv/static/cache_manifest.json", - server: true, - root: ".", - version: Application.spec(:phoenix_app, :vsn), - check_origin: false, - https: [ - port: 443, - cipher_suite: :strong, - keyfile: System.get_env("UNIRIS_WEB_SSL_KEY_PATH"), - certfile: System.get_env("UNIRIS_WEB_SSL_CERT_PATH"), - transport_options: [socket_opts: [:inet6]] - ], - force_ssl: [hsts: true] - -# Do not print debug messages in production -config :logger, level: :info - -# ## SSL Support -# -# To get SSL working, you will need to add the `https` key -# to the previous section and set your `:url` port to 443: -# -# config :uniris_web, UnirisWeb.Endpoint, -# ... -# url: [host: "example.com", port: 443], -# https: [ -# port: 443, -# cipher_suite: :strong, -# keyfile: System.get_env("SOME_APP_SSL_KEY_PATH"), -# certfile: System.get_env("SOME_APP_SSL_CERT_PATH"), -# transport_options: [socket_opts: [:inet6]] -# ] -# -# The `cipher_suite` is set to `:strong` to support only the -# latest and more secure SSL ciphers. This means old browsers -# and clients may not be supported. You can set it to -# `:compatible` for wider support. -# -# `:keyfile` and `:certfile` expect an absolute path to the key -# and cert in disk or a relative path inside priv, for example -# "priv/ssl/server.key". For all supported SSL configuration -# options, see https://hexdocs.pm/plug/Plug.SSL.html#configure/1 -# -# We also recommend setting `force_ssl` in your endpoint, ensuring -# no data is ever sent via http, always redirecting to https: -# -# config :uniris_web, UnirisWeb.Endpoint, -# force_ssl: [hsts: true] -# -# Check `Plug.SSL` for all available options in `force_ssl`. diff --git a/apps/uniris_web/config/test.exs b/apps/uniris_web/config/test.exs deleted file mode 100644 index 6aa53f4e3..000000000 --- a/apps/uniris_web/config/test.exs +++ /dev/null @@ -1,10 +0,0 @@ -use Mix.Config - -# We don't run a server during test. If one is required, -# you can enable the server option below. -config :uniris_web, UnirisWeb.Endpoint, - http: [port: 4002], - server: false - -# Print only warnings and errors during test -config :logger, level: :warn diff --git a/apps/uniris_web/lib/uniris_web/application.ex b/apps/uniris_web/lib/uniris_web/application.ex deleted file mode 100644 index 345084df9..000000000 --- a/apps/uniris_web/lib/uniris_web/application.ex +++ /dev/null @@ -1,26 +0,0 @@ -defmodule UnirisWeb.Application do - @moduledoc false - - use Application - - alias UnirisWeb.Endpoint - - def start(_type, _args) do - children = [ - # Start the endpoint when the application starts - Endpoint, - {Absinthe.Subscription, Endpoint}, - UnirisWeb.TransactionSubscriber - ] - - opts = [strategy: :one_for_one, name: UnirisWeb.Supervisor] - Supervisor.start_link(children, opts) - end - - # Tell Phoenix to update the endpoint configuration - # whenever the application is updated. - def config_change(changed, _new, removed) do - Endpoint.config_change(changed, removed) - :ok - end -end diff --git a/apps/uniris_web/lib/uniris_web/templates/layout/app.html.eex b/apps/uniris_web/lib/uniris_web/templates/layout/app.html.eex deleted file mode 100644 index 5b4d7aa3f..000000000 --- a/apps/uniris_web/lib/uniris_web/templates/layout/app.html.eex +++ /dev/null @@ -1 +0,0 @@ -<%= render @view_module, @view_template, assigns %> diff --git a/apps/uniris_web/mix.exs b/apps/uniris_web/mix.exs deleted file mode 100644 index 877b2bf8f..000000000 --- a/apps/uniris_web/mix.exs +++ /dev/null @@ -1,53 +0,0 @@ -defmodule UnirisWeb.MixProject do - use Mix.Project - - def project do - [ - app: :uniris_web, - version: "0.6.1", - build_path: "../../_build", - config_path: "../../config/config.exs", - deps_path: "../../deps", - lockfile: "../../mix.lock", - elixir: "~> 1.5", - elixirc_paths: elixirc_paths(Mix.env()), - compilers: [:phoenix] ++ Mix.compilers(), - start_permanent: Mix.env() == :prod, - deps: deps() - ] - end - - # Configuration for the OTP application. - # - # Type `mix help compile.app` for more information. - def application do - [ - mod: {UnirisWeb.Application, []}, - extra_applications: [:logger, :runtime_tools, :os_mon] - ] - end - - # Specifies which paths to compile per environment. - defp elixirc_paths(:test), do: ["lib", "test/support"] - defp elixirc_paths(_), do: ["lib"] - - # Specifies your project dependencies. - # - # Type `mix help deps` for examples and options. - defp deps do - [ - {:uniris_core, in_umbrella: true}, - {:phoenix, "~> 1.5"}, - {:phoenix_pubsub, "~> 2.0"}, - {:phoenix_html, "~> 2.14"}, - {:phoenix_live_view, "~> 0.14.0"}, - {:jason, "~> 1.0"}, - {:plug_cowboy, "~> 2.3"}, - {:absinthe, "~> 1.5.0"}, - {:absinthe_plug, "~> 1.5"}, - {:absinthe_phoenix, "~> 2.0"}, - {:cors_plug, "~> 1.5"}, - {:phoenix_live_dashboard, "~> 0.2.7"} - ] - end -end diff --git a/apps/uniris_web/test/test_helper.exs b/apps/uniris_web/test/test_helper.exs deleted file mode 100644 index 869559e70..000000000 --- a/apps/uniris_web/test/test_helper.exs +++ /dev/null @@ -1 +0,0 @@ -ExUnit.start() diff --git a/apps/uniris_web/assets/css/app.css b/assets/css/app.css similarity index 62% rename from apps/uniris_web/assets/css/app.css rename to assets/css/app.css index 886208df8..ad188f492 100644 --- a/apps/uniris_web/assets/css/app.css +++ b/assets/css/app.css @@ -1,6 +1,8 @@ /* This file is for your main application css. */ @import "./explorer.css"; +@import "./code_viewer.css"; +@import "./code_proposal.css"; body { margin: 0; diff --git a/assets/css/code_proposal.css b/assets/css/code_proposal.css new file mode 100644 index 000000000..6f4aef3ef --- /dev/null +++ b/assets/css/code_proposal.css @@ -0,0 +1,37 @@ +@import "../node_modules/diff2html/bundles/css/diff2html.min.css"; +@import "../node_modules/highlight.js/styles/github.css"; + +.modal { + display: none; /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 1; /* Sit on top */ + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + background-color: rgb(0,0,0); /* Fallback color */ + background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ +} + +.modal .modal-content { + background-color: #fefefe; + margin: 15% auto; /* 15% from the top and centered */ + padding: 20px; + border: 1px solid #888; + width: 80%; /* Could be more or less, depending on screen size */ +} + +.modal .modal-content .close { + color: #aaa; + float: right; + font-size: 28px; + font-weight: bold; + } + +.modal .modal-content .close:hover, +.modal .modal-content .close:focus { + color: black; + text-decoration: none; + cursor: pointer; +} \ No newline at end of file diff --git a/assets/css/code_viewer.css b/assets/css/code_viewer.css new file mode 100644 index 000000000..804ae7cdd --- /dev/null +++ b/assets/css/code_viewer.css @@ -0,0 +1,9 @@ +.code_viewer_subdir { + padding-left: 20px!important; + border-left: thin solid #ccc; + margin-left: 10px!important; +} + +.code_viewer_file:hover { + cursor: pointer; +} \ No newline at end of file diff --git a/apps/uniris_web/assets/css/explorer.css b/assets/css/explorer.css similarity index 100% rename from apps/uniris_web/assets/css/explorer.css rename to assets/css/explorer.css diff --git a/assets/js/app.js b/assets/js/app.js new file mode 100644 index 000000000..76085800d --- /dev/null +++ b/assets/js/app.js @@ -0,0 +1,136 @@ +// We need to import the CSS so that webpack will load it. +// The MiniCssExtractPlugin is used to separate it out into +// its own CSS file. +import css from "../css/app.css" + +// webpack automatically bundles all modules in your +// entry points. Those entry points can be configured + + +import {Socket} from "phoenix" +import LiveSocket from "phoenix_live_view" +import { html } from "diff2html" +import { getTransactionIndex, newTransactionBuilder, derivateAddress } from "uniris" + +let Hooks = {} + +let scrollAt = () => { + let scrollTop = document.documentElement.scrollTop || document.body.scrollTop + let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight + let clientHeight = document.documentElement.clientHeight + + return scrollTop / (scrollHeight - clientHeight) * 100 +} + +Hooks.InfiniteScroll = { + page() { return this.el.dataset.page }, + mounted(){ + this.pending = this.page() + window.addEventListener("scroll", e => { + if(this.pending == this.page() && scrollAt() > 90){ + this.pending = this.page() + 1 + this.pushEvent("load-more", {}) + } + + }) + }, + reconnected(){ this.pending = this.page() }, + updated(){ this.pending = this.page() } +} + +Hooks.Diff = { + mounted() { + const diff = this.el.innerText + const diffHtml = diff2html(diff, { + drawFileList: true, + matching: 'lines', + outputFormat: 'side-by-side', + highlight: true + }); + document.querySelector('#diff').innerHTML = diffHtml; + } +} + +let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content"); +let liveSocket = new LiveSocket("/live", Socket, {hooks: Hooks, params: {_csrf_token: csrfToken}}); + +// connect if there are any LiveViews on the page +liveSocket.connect() + +// expose liveSocket on window for web console debug logs and latency simulation: +// >> liveSocket.enableDebug() +// >> liveSocket.enableLatencySim(1000) +window.liveSocket = liveSocket + +window.diff2html = html + +window.openApprovalConfirmation = function() { + document.querySelector("#proposal_approval_modal").style.display = "block" +} + +window.closeApprovalConfirmation = function() { + document.querySelector("#proposal_approval_modal").style.display = "none"; + document.querySelector("#tx_json").value = "" + document.querySelector("#tx_index").value = 0 + document.querySelector("#tx_seed").value = "" + document.querySelector("#form_sign_approval").style.display = "none"; +} + +window.confirmApproval = function() { + document.querySelector("#tx_form").style.display = "block"; +} + +const endpoint = window.location.origin + +window.show_form_sign_approval = function() { + document.querySelector("#form_sign_approval").style.display = "block"; + document.querySelector("#confirmation").style.display = "none"; +} + +window.signProposalApprovalTransaction = function(e) { + e.preventDefault() + + const proposalAddress = document.querySelector("#proposal_address").value + const seed = document.querySelector("#tx_seed").value + const index = document.querySelector("#tx_index").value + + const txJSON = newTransactionBuilder("code_approval") + .addRecipient(proposalAddress) + .build(seed, parseInt(index)) + .toJSON() + + document.querySelector("#tx_viewer").innerText = JSON.stringify(JSON.parse(txJSON), 0, 2) + document.querySelector("#tx_viewer").style.display = "block" + document.querySelector("#tx_json").value = txJSON + document.querySelector("#btn_send_approval").style.display = "inline" + document.querySelector("#btn_sign_approval").style.display = "none" +} + +window.fetchTransactionIndex = function() { + const seed = document.querySelector("#tx_seed").value + const firstAddress = derivateAddress(seed, 0) + getTransactionIndex(firstAddress, endpoint).then((index) => { + document.querySelector("#tx_index").value = index + + const address = derivateAddress(seed, index + 1) + document.querySelector("#tx_address").innerText = address + document.querySelector("#tx_address_info").style.display = "block" + document.querySelector("#btn_sign_approval").style.display = "block" + }) +} + +window.sendApprovalTransaction = function()  { + const txJSON = document.querySelector("#tx_json").value + fetch(endpoint + "/api/transaction", { + method: "POST", + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + body: txJSON + }) + .then(() => { + closeApprovalConfirmation() + }) + .catch(console.error) +} \ No newline at end of file diff --git a/apps/uniris_web/assets/js/socket.js b/assets/js/socket.js similarity index 100% rename from apps/uniris_web/assets/js/socket.js rename to assets/js/socket.js diff --git a/apps/uniris_web/assets/package-lock.json b/assets/package-lock.json similarity index 97% rename from apps/uniris_web/assets/package-lock.json rename to assets/package-lock.json index 31e606611..b66c2380c 100644 --- a/apps/uniris_web/assets/package-lock.json +++ b/assets/package-lock.json @@ -1143,6 +1143,11 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "acorn": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", @@ -1445,8 +1450,7 @@ "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "big.js": { "version": "5.2.2", @@ -1454,6 +1458,14 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, + "bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "requires": { + "bindings": "^1.3.0" + } + }, "binary-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", @@ -1465,12 +1477,27 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, "requires": { "file-uri-to-path": "1.0.0" } }, + "blake2b": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", + "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", + "requires": { + "blake2b-wasm": "^1.1.0", + "nanoassert": "^1.0.0" + } + }, + "blake2b-wasm": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", + "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", + "requires": { + "nanoassert": "^1.0.0" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1531,8 +1558,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "browserify-aes": { "version": "1.2.0", @@ -2491,6 +2517,29 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "diff2html": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/diff2html/-/diff2html-3.1.10.tgz", + "integrity": "sha512-VrJsr//rGa/D1R9xwffGQwnpg+wdLMjiayZ1hOWFcansoC5qQksijy6OHTYutJPc5cl+IbVA/fvqO9+FRsmhSA==", + "requires": { + "diff": "4.0.2", + "highlight.js": "10.0.2", + "hogan.js": "3.0.2" + }, + "dependencies": { + "highlight.js": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.0.2.tgz", + "integrity": "sha512-2gMT2MHU6/2OjAlnaOE2LFdr9dwviDN3Q2lSw7Ois3/5uTtahbgYTkr4EPoY828ps+2eQWiixPTF8+phU6Ofkg==", + "optional": true + } + } + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -2920,9 +2969,7 @@ "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, "fill-range": { "version": "4.0.0", @@ -3272,7 +3319,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -3284,17 +3330,37 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "highlight.js": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.1.2.tgz", + "integrity": "sha512-Q39v/Mn5mfBlMff9r+zzA+gWxRsCRKwEMvYTiisLr/XUiFI/4puWt0Ojdko3R3JCNWGdOWaA5g/Yxqa23kC5AA==" + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, + "hogan.js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", + "integrity": "sha1-TNnhq9QpQUbnZ55B14mHMrAse/0=", + "requires": { + "mkdirp": "0.3.0", + "nopt": "1.0.10" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=" + } + } + }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -3340,8 +3406,7 @@ "ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "iferr": { "version": "0.1.5", @@ -3412,8 +3477,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -3808,6 +3872,19 @@ "leven": "^3.1.0" } }, + "libsodium": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.6.tgz", + "integrity": "sha512-hPb/04sEuLcTRdWDtd+xH3RXBihpmbPCsKW/Jtf4PsvdyKh+D6z2D2gvp/5BfoxseP+0FCOg66kE+0oGUE/loQ==" + }, + "libsodium-wrappers": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.6.tgz", + "integrity": "sha512-OUO2CWW5bHdLr6hkKLHIKI4raEkZrf3QHkhXsJ1yCh6MZ3JDA7jFD3kCATNquuGSG6MjjPHQIQms0y0gBDzjQg==", + "requires": { + "libsodium": "0.7.6" + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -4037,14 +4114,12 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { "version": "3.0.4", @@ -4180,6 +4255,11 @@ "dev": true, "optional": true }, + "nanoassert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", + "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=" + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -4256,6 +4336,14 @@ "integrity": "sha512-EVo605FhWLygH8a64TjgpjyHYOihkxECwX1bHHr8tETJKWEiWS2YJjPbvsX2jFjnjTNEgBCmk9mLjKG1Mf11cw==", "dev": true }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4606,19 +4694,20 @@ } }, "phoenix": { - "version": "file:../../../deps/phoenix" + "version": "file:../deps/phoenix" }, "phoenix_html": { - "version": "file:../../../deps/phoenix_html" + "version": "file:../deps/phoenix_html" }, "phoenix_live_view": { - "version": "file:../../../deps/phoenix_live_view" + "version": "file:../deps/phoenix_live_view" }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true + "dev": true, + "optional": true }, "pify": { "version": "4.0.1", @@ -5706,6 +5795,25 @@ "safe-buffer": "^5.0.1" } }, + "sha3": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.3.tgz", + "integrity": "sha512-Io53D4o9qOmf3Ow9p/DoGLQiQHhtuR0ulbyambvRSG+OX5yXExk2yYfvjHtb7AtOyk6K6+sPeK/qaowWc/E/GA==", + "requires": { + "buffer": "5.6.0" + }, + "dependencies": { + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + } + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -6470,6 +6578,39 @@ "imurmurhash": "^0.1.4" } }, + "uniris": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uniris/-/uniris-1.1.0.tgz", + "integrity": "sha512-vAYv5uylQiePcq54EKOvUe8uOdXU/eK7CHjlZoxhH/3EL/CsNCNC2VNmyeRHacRWlUcqMOTHs2tvEnXa7oOzSg==", + "requires": { + "bigint-buffer": "^1.1.5", + "blake2b": "^2.1.3", + "elliptic": "^6.5.3", + "libsodium-wrappers": "^0.7.6", + "sha3": "^2.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + } + } + }, "unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", diff --git a/apps/uniris_web/assets/package.json b/assets/package.json similarity index 71% rename from apps/uniris_web/assets/package.json rename to assets/package.json index db9c4cb95..a081a6174 100644 --- a/apps/uniris_web/assets/package.json +++ b/assets/package.json @@ -6,9 +6,12 @@ "watch": "webpack --mode development --watch" }, "dependencies": { - "phoenix": "file:../../../deps/phoenix", - "phoenix_html": "file:../../../deps/phoenix_html", - "phoenix_live_view": "file:../../../deps/phoenix_live_view" + "diff2html": "^3.1.10", + "highlight.js": "^10.1.2", + "phoenix": "file:../deps/phoenix", + "phoenix_html": "file:../deps/phoenix_html", + "phoenix_live_view": "file:../deps/phoenix_live_view", + "uniris": "^1.1.0" }, "devDependencies": { "@babel/core": "^7.0.0", diff --git a/apps/uniris_web/assets/static/favicon.ico b/assets/static/favicon.ico similarity index 100% rename from apps/uniris_web/assets/static/favicon.ico rename to assets/static/favicon.ico diff --git a/apps/uniris_web/assets/static/images/logo.svg b/assets/static/images/logo.svg similarity index 100% rename from apps/uniris_web/assets/static/images/logo.svg rename to assets/static/images/logo.svg diff --git a/apps/uniris_web/assets/static/robots.txt b/assets/static/robots.txt similarity index 100% rename from apps/uniris_web/assets/static/robots.txt rename to assets/static/robots.txt diff --git a/apps/uniris_web/assets/webpack.config.js b/assets/webpack.config.js similarity index 100% rename from apps/uniris_web/assets/webpack.config.js rename to assets/webpack.config.js diff --git a/config/config.exs b/config/config.exs index 75436df18..6dc6fed94 100644 --- a/config/config.exs +++ b/config/config.exs @@ -1,14 +1,18 @@ use Mix.Config -import_config "../apps/*/config/config.exs" - -config :logger, :console, format: "\n$time $metadata[$level] $levelpad$message\n" +# Configures Elixir's Logger +config :logger, :console, + format: "$time $metadata[$level] $message\n", + metadata: [:request_id] config :logger, utc_log: true, handle_otp_reports: true, handle_sasl_reports: false +# Use Jason for JSON parsing in Phoenix +config :phoenix, :json_library, Jason + if Mix.env() != :prod do config :git_hooks, auto_install: true, @@ -19,13 +23,48 @@ if Mix.env() != :prod do "mix format", "mix clean", "mix compile --warnings-as-errors", - "mix xref deprecated --abort-if-any", - "mix xref unreachable --abort-if-any", - "mix format --check-formatted", "mix credo --strict", - # "mix doctor --summary", "mix test" ] ] ] end + +config :uniris, :src_dir, File.cwd!() + +config :uniris, Uniris.Crypto, + supported_curves: [ + :ed25519, + :secp256r1, + :secp256k1 + ], + supported_hashes: [ + :sha256, + :sha512, + :sha3_256, + :sha3_512, + :blake2b + ], + default_curve: :ed25519, + default_hash: :sha256 + +config :uniris, Uniris.P2P.Endpoint, + port: System.get_env("UNIRIS_P2P_PORT", "3002") |> String.to_integer() + +config :uniris, Uniris.P2P, node_client: Uniris.P2P.TCPClient + +config :uniris, Uniris.P2P.BootstrapingSeeds, file: "priv/p2p/seeds" + +# Configure the endpoint +config :uniris, UnirisWeb.Endpoint, + secret_key_base: "5mFu4p5cPMY5Ii0HvjkLfhYZYtC0JAJofu70bzmi5x3xzFIJNlXFgIY5g8YdDPMf", + render_errors: [view: UnirisWeb.ErrorView, accepts: ~w(json)], + pubsub: [name: UnirisWeb.PubSub, adapter: Phoenix.PubSub.PG2], + live_view: [ + signing_salt: "3D6jYvx3", + layout: {UnirisWeb.LayoutView, "live.html"} + ] + +# Import environment specific config. This must remain at the bottmo +# of this file so it overrides the configuration defined above. +import_config "#{Mix.env()}.exs" diff --git a/config/dev.exs b/config/dev.exs new file mode 100755 index 000000000..f57762a0e --- /dev/null +++ b/config/dev.exs @@ -0,0 +1,131 @@ +use Mix.Config + +# Do not include metadata nor timestamps in development logs +config :logger, :console, format: "[$level] $message\n" + +# Set a higher stacktrace during development. Avoid configuring such +# in production as building large stacktraces may be expensive. +config :phoenix, :stacktrace_depth, 20 + +# Initialize plugs at runtime for faster development compilation +config :phoenix, :plug_init_mode, :runtime + +config :uniris, Uniris.Crypto, keystore: Uniris.Crypto.SoftwareKeystore + +config :uniris, Uniris.Crypto.SoftwareKeystore, seed: System.get_env("UNIRIS_CRYPTO_SEED") + +config :uniris, Uniris.Storage, backend: Uniris.Storage.FileBackend + +config :uniris, Uniris.Storage.FileBackend, + root_dir: "priv/storage/#{System.get_env("UNIRIS_CRYPTO_SEED", "node1")}" + +config :uniris, Uniris.Bootstrap, + ip_lookup_provider: Uniris.Bootstrap.IPLookup.LocalImpl, + interface: "lo0" + +config :uniris, Uniris.P2P.BootstrapingSeeds, + # First node crypto seed is "node1" + seeds: + System.get_env( + "UNIRIS_P2P_SEEDS", + "127.0.0.1:3002:00682FF302BFA84702A00D81D5F97610E02573C0487FBCD6D00A66CCBC0E0656E8" + ) + +config :uniris, Uniris.Bootstrap.NetworkInit, + genesis_pools: [ + funding: [ + public_key: "002E354A95241E867C836E8BBBBF6F9BF2450860BA28B1CF24B734EF67FF49169E", + amount: 3.82e9 + ], + deliverable: [ + public_key: "00AD439F0CD4048576D4AFB812DCB1815C57EFC303BFF03696436B157C69547128", + amount: 2.36e9 + ], + enhancement: [ + public_key: "008C9309535A3853379D6367F67AB93E3DAF5BFAA41C68BD7C3C1F00AA8D5822FD", + amount: 9.0e8 + ], + team: [ + public_key: "00B1F862FF9E534DAC6A0AD32528E08F7BB0F3DD0DCB253B119900F4CE447C5CC4", + amount: 5.6e8 + ], + exchange: [ + public_key: "004CD06F40D2F75DA02B29D559A3CBD5E07580B1E65163A4F3256CDC8781B280E3", + amount: 3.4e8 + ], + marketing: [ + public_key: "00783510644E885FFAC82FE22FB3F33C5B0936B79B7A3D3A78D5D612341A0B3B9A", + amount: 3.4e8 + ], + foundation: [ + public_key: "00CD534224DE5AE2584163D69A8A99F36E6FAE506373B619736B511A58B804E311", + amount: 2.2e8 + ] + ] + +config :uniris, Uniris.BeaconSlotTimer, + interval: 60_000, + trigger_offset: 2_000 + +config :uniris, Uniris.SharedSecrets.NodeRenewal, + interval: 60_000, + trigger_offset: 10_000 + +config :uniris, Uniris.SelfRepair, + last_sync_file: "priv/p2p/last_sync/#{System.get_env("UNIRIS_CRYPTO_SEED")}", + interval: 60_000, + network_startup_date: %DateTime{ + year: DateTime.utc_now().year, + month: DateTime.utc_now().month, + day: DateTime.utc_now().day, + hour: DateTime.utc_now().hour - 1, + minute: 0, + second: 0, + microsecond: {0, 0}, + utc_offset: 0, + std_offset: 0, + time_zone: "Etc/UTC", + zone_abbr: "UTC" + } + +# For development, we disable any cache and enable +# debugging and code reloading. +# +# The watchers configuration can be used to run external +# watchers to your application. For example, we use it +# with webpack to recompile .js and .css sources. +config :uniris, UnirisWeb.Endpoint, + http: [port: 4000], + debug_errors: true, + code_reloader: true, + check_origin: false, + watchers: [ + node: [ + "node_modules/webpack/bin/webpack.js", + "--mode", + "development", + "--watch-stdin", + cd: Path.expand("../assets", __DIR__) + ] + ] + +# For development, we disable any cache and enable +# debugging and code reloading. +# +# The watchers configuration can be used to run external +# watchers to your application. For example, we use it +# with webpack to recompile .js and .css sources. +config :uniris, UnirisWeb.Endpoint, + http: [port: 4000], + debug_errors: true, + code_reloader: true, + check_origin: false, + watchers: [ + node: [ + "node_modules/webpack/bin/webpack.js", + "--mode", + "development", + "--watch-stdin", + cd: Path.expand("../assets", __DIR__) + ] + ] diff --git a/config/prod.exs b/config/prod.exs new file mode 100755 index 000000000..07f3f09b2 --- /dev/null +++ b/config/prod.exs @@ -0,0 +1,99 @@ +use Mix.Config + +# Do not print debug messages in production +config :logger, level: :info + +# TODO: specify the crypto implementation using hardware when developed +config :uniris, Uniris.Crypto, keystore: Uniris.Crypto.SoftwareKeystore + +config :uniris, Uniris.Storage, backend: Uniris.Storage.CassandraBackend + +config :uniris, Uniris.Storage.CassandraBackend, nodes: ["127.0.0.1:9042"] +config :uniris, Uniris.Storage.FileBackend, root_dir: "priv/storage" + +config :uniris, Uniris.Bootstrap, ip_lookup_provider: Uniris.Bootstrap.IPLookup.IPFYImpl + +config :uniris, Uniris.Bootstrap.NetworkInit, + # TODO: provide the true addresses for the genesis UCO distribution + genesis_pools: [ + funding: [ + public_key: "002E354A95241E867C836E8BBBBF6F9BF2450860BA28B1CF24B734EF67FF49169E", + amount: 3.82e9 + ], + deliverable: [ + public_key: "00AD439F0CD4048576D4AFB812DCB1815C57EFC303BFF03696436B157C69547128", + amount: 2.36e9 + ], + enhancement: [ + public_key: "008C9309535A3853379D6367F67AB93E3DAF5BFAA41C68BD7C3C1F00AA8D5822FD", + amount: 9.0e8 + ], + team: [ + public_key: "00B1F862FF9E534DAC6A0AD32528E08F7BB0F3DD0DCB253B119900F4CE447C5CC4", + amount: 5.6e8 + ], + exchange: [ + public_key: "004CD06F40D2F75DA02B29D559A3CBD5E07580B1E65163A4F3256CDC8781B280E3", + amount: 3.4e8 + ], + marketing: [ + public_key: "00783510644E885FFAC82FE22FB3F33C5B0936B79B7A3D3A78D5D612341A0B3B9A", + amount: 3.4e8 + ], + foundation: [ + public_key: "00CD534224DE5AE2584163D69A8A99F36E6FAE506373B619736B511A58B804E311", + amount: 2.2e8 + ] + ] + +config :uniris, Uniris.BeaconSlotTimer, + interval: 600_000, + trigger_offset: 2_000 + +config :uniris, Uniris.SharedSecrets.NodeRenewal, + interval: 86_400_000, + trigger_offset: 10_000 + +config :uniris, Uniris.SelfRepair, + interval: 86_400_000, + last_sync_file: "priv/p2p/last_sync", + # TODO: specify the real network startup date + network_startup_date: %DateTime{ + year: DateTime.utc_now().year, + month: DateTime.utc_now().month, + day: DateTime.utc_now().day, + hour: 0, + minute: 0, + second: 0, + microsecond: {0, 0}, + utc_offset: 0, + std_offset: 0, + time_zone: "Etc/UTC", + zone_abbr: "UTC" + } + +# For production, don't forget to configure the url host +# to something meaningful, Phoenix uses this information +# when generating URLs. +# +# Note we also include the path to a cache manifest +# containing the digested version of static files. This +# manifest is generated by the `mix phx.digest` task, +# which you should run after static files are built and +# before starting your production server. +config :uniris, UnirisWeb.Endpoint, + http: [:inet6, port: 80], + url: [host: "*", port: 443], + cache_static_manifest: "priv/static/cache_manifest.json", + server: true, + root: ".", + version: Application.spec(:phoenix_app, :vsn), + check_origin: false, + https: [ + port: 443, + cipher_suite: :strong, + keyfile: System.get_env("UNIRIS_WEB_SSL_KEY_PATH"), + certfile: System.get_env("UNIRIS_WEB_SSL_CERT_PATH"), + transport_options: [socket_opts: [:inet6]] + ], + force_ssl: [hsts: true] diff --git a/config/test.exs b/config/test.exs new file mode 100755 index 000000000..419e8cc51 --- /dev/null +++ b/config/test.exs @@ -0,0 +1,89 @@ +use Mix.Config + +# Print only warnings and errors during test +config :logger, level: :info + +config :uniris, Uniris.Crypto, keystore: MockCrypto + +config :uniris, Uniris.Crypto.SoftwareKeystore, seed: "fake seed" + +config :uniris, Uniris.Crypto.Keystore, enabled: false +config :uniris, Uniris.Crypto.TransactionLoader, enabled: false + +config :uniris, Uniris.Storage, backend: MockStorage +config :uniris, Uniris.Storage.FileBackend, enabled: false +config :uniris, Uniris.Storage.CassandraBackend, enabled: false +config :uniris, MockStorage, enabled: false +config :uniris, Uniris.Storage.Cache, enabled: false + +config :uniris, Uniris.P2P, node_client: MockNodeClient + +config :uniris, Uniris.P2P.Endpoint, enabled: false + +config :uniris, Uniris.P2P.TransactionLoader, enabled: false + +config :uniris, Uniris.BeaconSubset, enabled: false + +config :uniris, Uniris.BeaconSlotTimer, + enabled: false, + interval: 0, + trigger_offset: 0 + +config :uniris, Uniris.SharedSecrets.TransactionLoader, enabled: false + +config :uniris, Uniris.SharedSecrets.NodeRenewal, + enabled: false, + trigger_interval: 0, + interval: 0 + +config :uniris, Uniris.SelfRepair, + enabled: false, + interval: 0, + last_sync_file: "priv/p2p/last_sync", + network_startup_date: DateTime.utc_now() + +config :uniris, Uniris.Bootstrap, + ip_lookup_provider: MockIPLookup, + enabled: false + +config :uniris, Uniris.Bootstrap.NetworkInit, + genesis_pools: [ + funding: [ + public_key: "002E354A95241E867C836E8BBBBF6F9BF2450860BA28B1CF24B734EF67FF49169E", + amount: 3.82e9 + ], + deliverable: [ + public_key: "00AD439F0CD4048576D4AFB812DCB1815C57EFC303BFF03696436B157C69547128", + amount: 2.36e9 + ], + enhancement: [ + public_key: "008C9309535A3853379D6367F67AB93E3DAF5BFAA41C68BD7C3C1F00AA8D5822FD", + amount: 9.0e8 + ], + team: [ + public_key: "00B1F862FF9E534DAC6A0AD32528E08F7BB0F3DD0DCB253B119900F4CE447C5CC4", + amount: 5.6e8 + ], + exchange: [ + public_key: "004CD06F40D2F75DA02B29D559A3CBD5E07580B1E65163A4F3256CDC8781B280E3", + amount: 3.4e8 + ], + marketing: [ + public_key: "00783510644E885FFAC82FE22FB3F33C5B0936B79B7A3D3A78D5D612341A0B3B9A", + amount: 3.4e8 + ], + foundation: [ + public_key: "00CD534224DE5AE2584163D69A8A99F36E6FAE506373B619736B511A58B804E311", + amount: 2.2e8 + ] + ] + +config :uniris, Uniris.Interpreter.TransactionLoader, enabled: false + +config :uniris, Uniris.P2P.BootstrapingSeeds, enabled: false + +# We don't run a server during test. If one is required, +# you can enable the server option below. +config :uniris, UnirisWeb.Endpoint, + http: [port: 4002], + server: false diff --git a/create_release b/create_release deleted file mode 100755 index 44317ab03..000000000 --- a/create_release +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -mkdir -p rel/artifacts - -# Install updated versions of hex/rebar -mix local.rebar --force -mix local.hex --if-missing --force - -export MIX_ENV=prod - -# Fetch deps and compile -mix deps.get - -# Run an explicit clean to remove any build artifacts from the host -rm -Rf _build/prod - -# Clean the updated files during the dev (last_sync, storage_nonce, file storage) -mix clean_priv_dir - -# Build the release -mix distillery.release - -# Copy tarball to output -cp "_build/prod/rel/uniris_node/releases/$VERSION/uniris_node.tar.gz" rel/artifacts/"uniris_node-$VERSION.tar.gz" - -exit 0 \ No newline at end of file diff --git a/docker_release b/docker_release deleted file mode 100755 index c503188c1..000000000 --- a/docker_release +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -# Check the arguments -if [[ $# -eq 0 ]] ; then - echo " - Missing version number - - Usage: - - ./docker_release [version_number] - " - exit 1 -fi - -VERSION=$1 - -# Build an image for the release with Elixir/Erlang and Libsodium -docker build -f docker/build.dockerfile -t uniris_release . - -# Run the create_release to generate the release with the given version -docker run -v $(pwd):/opt/build --rm -it --env VERSION=$VERSION uniris_release:latest ./create_release \ No newline at end of file diff --git a/lib/mix/tasks/clean_priv_dir.ex b/lib/mix/tasks/clean_priv_dir.ex new file mode 100644 index 000000000..f4028503a --- /dev/null +++ b/lib/mix/tasks/clean_priv_dir.ex @@ -0,0 +1,14 @@ +defmodule Mix.Tasks.CleanPrivDir do + @moduledoc """ + Task to clean the dev environment to reset the filestorage, last synchronization date + and storage nonce + """ + use Mix.Task + + @shortdoc "Clean the uniris priv folder for development phase" + def run(_) do + File.rm_rf!(Application.app_dir(:uniris, "priv/storage")) + File.rm_rf!(Application.app_dir(:uniris, "priv/p2p/last_sync")) + File.rm(Application.app_dir(:uniris, "priv/crypto/storage_nonce")) + end +end diff --git a/apps/uniris_core/lib/uniris_core.ex b/lib/uniris.ex similarity index 99% rename from apps/uniris_core/lib/uniris_core.ex rename to lib/uniris.ex index adfb853cf..2d0e04065 100644 --- a/apps/uniris_core/lib/uniris_core.ex +++ b/lib/uniris.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore do +defmodule Uniris do @moduledoc """ Provides high level functions serving the API and the Explorer """ diff --git a/lib/uniris/application.ex b/lib/uniris/application.ex new file mode 100644 index 000000000..3953b65af --- /dev/null +++ b/lib/uniris/application.ex @@ -0,0 +1,63 @@ +defmodule Uniris.Application do + @moduledoc false + + use Application + + alias Uniris.BeaconSupervisor + + alias Uniris.CryptoSupervisor + + alias Uniris.ElectionSupervisor + + alias Uniris.InterpreterSupervisor + alias Uniris.MiningSupervisor + + alias Uniris.P2PSupervisor + + alias Uniris.SelfRepair + alias Uniris.SharedSecretsSupervisor + alias Uniris.StorageSupervisor + + alias Uniris.Utils + + alias UnirisWeb.Endpoint, as: WebEndpoint + alias UnirisWeb.Supervisor, as: WebSupervisor + + def start(_type, _args) do + self_repair_conf = Application.get_env(:uniris, SelfRepair) + repair_interval = Keyword.fetch!(self_repair_conf, :interval) + last_sync_file = Keyword.fetch!(self_repair_conf, :last_sync_file) + + children = + [ + {Task.Supervisor, name: Uniris.TaskSupervisor}, + {Registry, keys: :duplicate, name: Uniris.PubSubRegistry}, + StorageSupervisor, + CryptoSupervisor, + ElectionSupervisor, + P2PSupervisor, + SharedSecretsSupervisor, + MiningSupervisor, + InterpreterSupervisor, + BeaconSupervisor, + WebSupervisor + ] ++ + Utils.configurable_children([ + {Uniris.SelfRepair, [interval: repair_interval, last_sync_file: last_sync_file], []}, + {Uniris.Bootstrap, + [ + port: Application.get_env(:uniris, Uniris.P2P.Endpoint)[:port] + ], []} + ]) + + opts = [strategy: :rest_for_one, name: Uniris.Supervisor] + Supervisor.start_link(children, opts) + end + + def config_change(changed, _new, removed) do + # Tell Phoenix to update the endpoint configuration + # whenever the application is updated. + WebEndpoint.config_change(changed, removed) + :ok + end +end diff --git a/apps/uniris_core/lib/uniris_core/beacon.ex b/lib/uniris/beacon.ex similarity index 87% rename from apps/uniris_core/lib/uniris_core/beacon.ex rename to lib/uniris/beacon.ex index a8c6e020f..39c80e01c 100644 --- a/apps/uniris_core/lib/uniris_core/beacon.ex +++ b/lib/uniris/beacon.ex @@ -1,27 +1,27 @@ -defmodule UnirisCore.Beacon do +defmodule Uniris.Beacon do @moduledoc """ Manage the beacon chain by providing functions to add to the subsets informations and to retrieve the beacon storage nodes involved. """ - alias UnirisCore.Crypto - alias UnirisCore.Election + alias Uniris.Crypto + alias Uniris.Election - alias UnirisCore.BeaconSlot - alias UnirisCore.BeaconSlot.NodeInfo - alias UnirisCore.BeaconSlot.TransactionInfo - alias UnirisCore.BeaconSlotTimer + alias Uniris.BeaconSlot + alias Uniris.BeaconSlot.NodeInfo + alias Uniris.BeaconSlot.TransactionInfo + alias Uniris.BeaconSlotTimer - alias UnirisCore.BeaconSubset - alias UnirisCore.BeaconSubsets + alias Uniris.BeaconSubset + alias Uniris.BeaconSubsets - alias UnirisCore.P2P + alias Uniris.P2P - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Utils + alias Uniris.Utils @doc """ List of all transaction subsets (255 subsets for a byte capacity) @@ -108,7 +108,7 @@ defmodule UnirisCore.Beacon do ## Examples - iex> UnirisCore.Beacon.subset_from_address(<<0, 44, 242, 77, 186, 95, 176, 163, + iex> Uniris.Beacon.subset_from_address(<<0, 44, 242, 77, 186, 95, 176, 163, ...> 14, 38, 232, 59, 42, 197, 185, 226, 158, 51, 98, 147, 139, 152, 36, ...> 27, 22, 30, 92, 31, 167, 66, 94, 115, 4, >>) <<44>> diff --git a/apps/uniris_core/lib/uniris_core/beacon/slot.ex b/lib/uniris/beacon/slot.ex similarity index 89% rename from apps/uniris_core/lib/uniris_core/beacon/slot.ex rename to lib/uniris/beacon/slot.ex index 4b5ca0638..dead772ab 100644 --- a/apps/uniris_core/lib/uniris_core/beacon/slot.ex +++ b/lib/uniris/beacon/slot.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.BeaconSlot do +defmodule Uniris.BeaconSlot do @moduledoc """ Represent a beacon chain slot generated after each synchronization interval with the transaction stored and nodes updates @@ -41,9 +41,9 @@ defmodule UnirisCore.BeaconSlot do ## Examples - iex> %UnirisCore.BeaconSlot{ + iex> %Uniris.BeaconSlot{ ...> transactions: [ - ...> %UnirisCore.BeaconSlot.TransactionInfo{ + ...> %Uniris.BeaconSlot.TransactionInfo{ ...> address: <<0, 234, 233, 156, 155, 114, 241, 116, 246, 27, 130, 162, 205, 249, 65, 232, 166, ...> 99, 207, 133, 252, 112, 223, 41, 12, 206, 162, 233, 28, 49, 204, 255, 12>>, ...> timestamp: ~U[2020-06-25 15:11:53Z], @@ -51,14 +51,14 @@ defmodule UnirisCore.BeaconSlot do ...> movements_addresses: [] ...> } ...> ], - ...> nodes: [ %UnirisCore.BeaconSlot.NodeInfo{ + ...> nodes: [ %Uniris.BeaconSlot.NodeInfo{ ...> public_key: <<0, 38, 105, 235, 147, 234, 114, 41, 1, 152, 148, 120, 31, 200, 255, 174, 190, 91, ...> 100, 169, 225, 113, 249, 125, 21, 168, 14, 196, 222, 140, 87, 143, 241>>, ...> timestamp: ~U[2020-06-25 15:11:53Z], ...> ready?: true ...> }] ...> } - ...> |> UnirisCore.BeaconSlot.serialize() + ...> |> Uniris.BeaconSlot.serialize() << # Nb transaction infos 0, 0, 0, 1, @@ -105,9 +105,9 @@ defmodule UnirisCore.BeaconSlot do ## Examples - iex> %UnirisCore.BeaconSlot{ + iex> %Uniris.BeaconSlot{ ...> transactions: [ - ...> %UnirisCore.BeaconSlot.TransactionInfo{ + ...> %Uniris.BeaconSlot.TransactionInfo{ ...> address: <<0, 234, 233, 156, 155, 114, 241, 116, 246, 27, 130, 162, 205, 249, 65, 232, 166, ...> 99, 207, 133, 252, 112, 223, 41, 12, 206, 162, 233, 28, 49, 204, 255, 12>>, ...> timestamp: ~U[2020-06-25 15:11:53Z], @@ -115,19 +115,19 @@ defmodule UnirisCore.BeaconSlot do ...> movements_addresses: [] ...> } ...> ], - ...> nodes: [ %UnirisCore.BeaconSlot.NodeInfo{ + ...> nodes: [ %Uniris.BeaconSlot.NodeInfo{ ...> public_key: <<0, 38, 105, 235, 147, 234, 114, 41, 1, 152, 148, 120, 31, 200, 255, 174, 190, 91, ...> 100, 169, 225, 113, 249, 125, 21, 168, 14, 196, 222, 140, 87, 143, 241>>, ...> timestamp: ~U[2020-06-25 15:11:53Z], ...> ready?: true ...> }] ...> } - ...> |> UnirisCore.BeaconSlot.serialize() - ...> |> UnirisCore.BeaconSlot.deserialize() + ...> |> Uniris.BeaconSlot.serialize() + ...> |> Uniris.BeaconSlot.deserialize() { - %UnirisCore.BeaconSlot{ + %Uniris.BeaconSlot{ transactions: [ - %UnirisCore.BeaconSlot.TransactionInfo{ + %Uniris.BeaconSlot.TransactionInfo{ address: <<0, 234, 233, 156, 155, 114, 241, 116, 246, 27, 130, 162, 205, 249, 65, 232, 166, 99, 207, 133, 252, 112, 223, 41, 12, 206, 162, 233, 28, 49, 204, 255, 12>>, timestamp: ~U[2020-06-25 15:11:53Z], @@ -135,7 +135,7 @@ defmodule UnirisCore.BeaconSlot do movements_addresses: [] } ], - nodes: [ %UnirisCore.BeaconSlot.NodeInfo{ + nodes: [ %Uniris.BeaconSlot.NodeInfo{ public_key: <<0, 38, 105, 235, 147, 234, 114, 41, 1, 152, 148, 120, 31, 200, 255, 174, 190, 91, 100, 169, 225, 113, 249, 125, 21, 168, 14, 196, 222, 140, 87, 143, 241>>, timestamp: ~U[2020-06-25 15:11:53Z], diff --git a/apps/uniris_core/lib/uniris_core/beacon/slot/node_info.ex b/lib/uniris/beacon/slot/node_info.ex similarity index 84% rename from apps/uniris_core/lib/uniris_core/beacon/slot/node_info.ex rename to lib/uniris/beacon/slot/node_info.ex index 599fdb17e..1d9849784 100644 --- a/apps/uniris_core/lib/uniris_core/beacon/slot/node_info.ex +++ b/lib/uniris/beacon/slot/node_info.ex @@ -1,14 +1,14 @@ -defmodule UnirisCore.BeaconSlot.NodeInfo do +defmodule Uniris.BeaconSlot.NodeInfo do @moduledoc """ Represents an information stored in the Beacon chain regarding a node involving either readyness of the node or the P2P network coordinates """ defstruct [:public_key, :ready?, :timestamp] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ - public_key: UnirisCore.Crypto.key(), + public_key: Crypto.key(), ready?: boolean(), timestamp: DateTime.t() } @@ -18,7 +18,7 @@ defmodule UnirisCore.BeaconSlot.NodeInfo do ## Examples - iex> UnirisCore.BeaconSlot.NodeInfo.serialize(%UnirisCore.BeaconSlot.NodeInfo{ + iex> Uniris.BeaconSlot.NodeInfo.serialize(%Uniris.BeaconSlot.NodeInfo{ ...> public_key: <<0, 27, 7, 231, 56, 158, 71, 37, 55, 178, 16, 94, 82, 36, 5, 33, 248, 1, 151, 236, ...> 81, 191, 35, 110, 247, 4, 87, 172, 199, 154, 209, 17, 94>>, ...> timestamp: ~U[2020-06-25 15:11:53Z], @@ -47,16 +47,16 @@ defmodule UnirisCore.BeaconSlot.NodeInfo do ## Examples - iex> %UnirisCore.BeaconSlot.NodeInfo{ + iex> %Uniris.BeaconSlot.NodeInfo{ ...> public_key: <<0, 27, 7, 231, 56, 158, 71, 37, 55, 178, 16, 94, 82, 36, 5, 33, 248, 1, 151, 236, ...> 81, 191, 35, 110, 247, 4, 87, 172, 199, 154, 209, 17, 94>>, ...> timestamp: ~U[2020-06-25 15:11:53Z], ...> ready?: true ...> } - ...> |> UnirisCore.BeaconSlot.NodeInfo.serialize() - ...> |> UnirisCore.BeaconSlot.NodeInfo.deserialize() + ...> |> Uniris.BeaconSlot.NodeInfo.serialize() + ...> |> Uniris.BeaconSlot.NodeInfo.deserialize() { - %UnirisCore.BeaconSlot.NodeInfo{ + %Uniris.BeaconSlot.NodeInfo{ public_key: <<0, 27, 7, 231, 56, 158, 71, 37, 55, 178, 16, 94, 82, 36, 5, 33, 248, 1, 151, 236, 81, 191, 35, 110, 247, 4, 87, 172, 199, 154, 209, 17, 94>>, timestamp: ~U[2020-06-25 15:11:53Z], diff --git a/apps/uniris_core/lib/uniris_core/beacon/slot/transaction_info.ex b/lib/uniris/beacon/slot/transaction_info.ex similarity index 90% rename from apps/uniris_core/lib/uniris_core/beacon/slot/transaction_info.ex rename to lib/uniris/beacon/slot/transaction_info.ex index 4bad873b8..06a5f2659 100644 --- a/apps/uniris_core/lib/uniris_core/beacon/slot/transaction_info.ex +++ b/lib/uniris/beacon/slot/transaction_info.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.BeaconSlot.TransactionInfo do +defmodule Uniris.BeaconSlot.TransactionInfo do @moduledoc """ Represents transaction information stored in the beacon chain """ defstruct [:timestamp, :address, :type, movements_addresses: []] - alias UnirisCore.Crypto - alias UnirisCore.Transaction + alias Uniris.Crypto + alias Uniris.Transaction @type t :: %__MODULE__{ timestamp: DateTime.t(), @@ -19,7 +19,7 @@ defmodule UnirisCore.BeaconSlot.TransactionInfo do ## Examples - iex> UnirisCore.BeaconSlot.TransactionInfo.serialize(%UnirisCore.BeaconSlot.TransactionInfo{ + iex> Uniris.BeaconSlot.TransactionInfo.serialize(%Uniris.BeaconSlot.TransactionInfo{ ...> address: <<0, 11, 4, 226, 118, 242, 59, 165, 128, 69, 40, 228, 121, 127, 37, 154, 199, ...> 168, 212, 53, 82, 220, 22, 56, 222, 223, 127, 16, 172, 142, 218, 41, 247>>, ...> timestamp: ~U[2020-06-25 15:11:53Z], @@ -59,7 +59,7 @@ defmodule UnirisCore.BeaconSlot.TransactionInfo do ## Example - iex> %UnirisCore.BeaconSlot.TransactionInfo{ + iex> %Uniris.BeaconSlot.TransactionInfo{ ...> address: <<0, 11, 4, 226, 118, 242, 59, 165, 128, 69, 40, 228, 121, 127, 37, 154, 199, ...> 168, 212, 53, 82, 220, 22, 56, 222, 223, 127, 16, 172, 142, 218, 41, 247>>, ...> timestamp: ~U[2020-06-25 15:11:53Z], @@ -69,10 +69,10 @@ defmodule UnirisCore.BeaconSlot.TransactionInfo do ...> 99, 207, 133, 252, 112, 223, 41, 12, 206, 162, 233, 28, 49, 204, 255, 12>> ...> ] ...> } - ...> |> UnirisCore.BeaconSlot.TransactionInfo.serialize() - ...> |> UnirisCore.BeaconSlot.TransactionInfo.deserialize() + ...> |> Uniris.BeaconSlot.TransactionInfo.serialize() + ...> |> Uniris.BeaconSlot.TransactionInfo.deserialize() { - %UnirisCore.BeaconSlot.TransactionInfo{ + %Uniris.BeaconSlot.TransactionInfo{ address: <<0, 11, 4, 226, 118, 242, 59, 165, 128, 69, 40, 228, 121, 127, 37, 154, 199, 168, 212, 53, 82, 220, 22, 56, 222, 223, 127, 16, 172, 142, 218, 41, 247>>, timestamp: ~U[2020-06-25 15:11:53Z], diff --git a/apps/uniris_core/lib/uniris_core/beacon/slot_timer.ex b/lib/uniris/beacon/slot_timer.ex similarity index 92% rename from apps/uniris_core/lib/uniris_core/beacon/slot_timer.ex rename to lib/uniris/beacon/slot_timer.ex index 8e314200e..531238bf5 100644 --- a/apps/uniris_core/lib/uniris_core/beacon/slot_timer.ex +++ b/lib/uniris/beacon/slot_timer.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.BeaconSlotTimer do +defmodule Uniris.BeaconSlotTimer do @moduledoc false use GenServer - alias UnirisCore.BeaconSubsetRegistry - alias UnirisCore.BeaconSubsets - alias UnirisCore.Utils + alias Uniris.BeaconSubsetRegistry + alias Uniris.BeaconSubsets + alias Uniris.Utils require Logger diff --git a/apps/uniris_core/lib/uniris_core/beacon/subset.ex b/lib/uniris/beacon/subset.ex similarity index 94% rename from apps/uniris_core/lib/uniris_core/beacon/subset.ex rename to lib/uniris/beacon/subset.ex index 61b5c4c73..22ad8dab9 100644 --- a/apps/uniris_core/lib/uniris_core/beacon/subset.ex +++ b/lib/uniris/beacon/subset.ex @@ -1,16 +1,16 @@ -defmodule UnirisCore.BeaconSubset do +defmodule Uniris.BeaconSubset do @moduledoc false - alias UnirisCore.BeaconSlot - alias UnirisCore.BeaconSlot.NodeInfo - alias UnirisCore.BeaconSlot.TransactionInfo + alias Uniris.BeaconSlot + alias Uniris.BeaconSlot.NodeInfo + alias Uniris.BeaconSlot.TransactionInfo - alias UnirisCore.BeaconSubsetRegistry + alias Uniris.BeaconSubsetRegistry - alias UnirisCore.PubSub + alias Uniris.PubSub - alias UnirisCore.Transaction - alias UnirisCore.TransactionData + alias Uniris.Transaction + alias Uniris.TransactionData use GenServer diff --git a/apps/uniris_core/lib/uniris_core/beacon/subsets.ex b/lib/uniris/beacon/subsets.ex similarity index 82% rename from apps/uniris_core/lib/uniris_core/beacon/subsets.ex rename to lib/uniris/beacon/subsets.ex index 4be7e24c6..9595d0bdd 100644 --- a/apps/uniris_core/lib/uniris_core/beacon/subsets.ex +++ b/lib/uniris/beacon/subsets.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.BeaconSubsets do +defmodule Uniris.BeaconSubsets do @moduledoc false use Agent diff --git a/apps/uniris_core/lib/uniris_core/beacon/supervisor.ex b/lib/uniris/beacon/supervisor.ex similarity index 55% rename from apps/uniris_core/lib/uniris_core/beacon/supervisor.ex rename to lib/uniris/beacon/supervisor.ex index 6ec7737b8..e447a2d91 100644 --- a/apps/uniris_core/lib/uniris_core/beacon/supervisor.ex +++ b/lib/uniris/beacon/supervisor.ex @@ -1,23 +1,23 @@ -defmodule UnirisCore.BeaconSupervisor do +defmodule Uniris.BeaconSupervisor do @moduledoc false use Supervisor - alias UnirisCore.BeaconSlotTimer - alias UnirisCore.BeaconSubset - alias UnirisCore.BeaconSubsetRegistry - alias UnirisCore.BeaconSubsets - alias UnirisCore.Utils + alias Uniris.BeaconSlotTimer + alias Uniris.BeaconSubset + alias Uniris.BeaconSubsetRegistry + alias Uniris.BeaconSubsets + alias Uniris.Utils def start_link(opts) do - Supervisor.start_link(__MODULE__, opts, name: UnirisBeaconSupervisor) + Supervisor.start_link(__MODULE__, opts, name: __MODULE__) end def init(_opts) do subsets = Enum.map(0..255, &:binary.encode_unsigned(&1)) - interval = Application.get_env(:uniris_core, BeaconSlotTimer)[:interval] - trigger_offset = Application.get_env(:uniris_core, BeaconSlotTimer)[:trigger_offset] + interval = Application.get_env(:uniris, BeaconSlotTimer)[:interval] + trigger_offset = Application.get_env(:uniris, BeaconSlotTimer)[:trigger_offset] children = [ diff --git a/apps/uniris_core/lib/uniris_core/bootstrap.ex b/lib/uniris/bootstrap.ex similarity index 91% rename from apps/uniris_core/lib/uniris_core/bootstrap.ex rename to lib/uniris/bootstrap.ex index 2650b12d8..5309a833f 100644 --- a/apps/uniris_core/lib/uniris_core/bootstrap.ex +++ b/lib/uniris/bootstrap.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Bootstrap do +defmodule Uniris.Bootstrap do @moduledoc """ Uniris node bootstraping @@ -15,30 +15,30 @@ defmodule UnirisCore.Bootstrap do require Logger - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Beacon - alias UnirisCore.BeaconSlot.NodeInfo + alias Uniris.Beacon + alias Uniris.BeaconSlot.NodeInfo alias __MODULE__.IPLookup alias __MODULE__.NetworkInit - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.AddNodeInfo - alias UnirisCore.P2P.Message.BootstrappingNodes - alias UnirisCore.P2P.Message.EncryptedStorageNonce - alias UnirisCore.P2P.Message.GetBootstrappingNodes - alias UnirisCore.P2P.Message.GetStorageNonce - alias UnirisCore.P2P.Message.ListNodes - alias UnirisCore.P2P.Message.NewTransaction - alias UnirisCore.P2P.Message.NodeList - alias UnirisCore.P2P.Node - - alias UnirisCore.SelfRepair - alias UnirisCore.Storage - - alias UnirisCore.Transaction - alias UnirisCore.TransactionData + alias Uniris.P2P + alias Uniris.P2P.Message.AddNodeInfo + alias Uniris.P2P.Message.BootstrappingNodes + alias Uniris.P2P.Message.EncryptedStorageNonce + alias Uniris.P2P.Message.GetBootstrappingNodes + alias Uniris.P2P.Message.GetStorageNonce + alias Uniris.P2P.Message.ListNodes + alias Uniris.P2P.Message.NewTransaction + alias Uniris.P2P.Message.NodeList + alias Uniris.P2P.Node + + alias Uniris.SelfRepair + alias Uniris.Storage + + alias Uniris.Transaction + alias Uniris.TransactionData def start_link(opts) do ip = IPLookup.get_ip() diff --git a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup.ex b/lib/uniris/bootstrap/ip_lookup.ex similarity index 54% rename from apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup.ex rename to lib/uniris/bootstrap/ip_lookup.ex index 183d978b8..b1dca001f 100644 --- a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup.ex +++ b/lib/uniris/bootstrap/ip_lookup.ex @@ -1,7 +1,7 @@ -defmodule UnirisCore.Bootstrap.IPLookup do +defmodule Uniris.Bootstrap.IPLookup do @moduledoc false - @behaviour UnirisCore.Bootstrap.IPLookupImpl + @behaviour Uniris.Bootstrap.IPLookupImpl @impl true @spec get_ip() :: :inet.ip_address() @@ -10,8 +10,8 @@ defmodule UnirisCore.Bootstrap.IPLookup do end defp impl do - :uniris_core - |> Application.get_env(UnirisCore.Bootstrap) + :uniris + |> Application.get_env(Uniris.Bootstrap) |> Keyword.fetch!(:ip_lookup_provider) end end diff --git a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/env_impl.ex b/lib/uniris/bootstrap/ip_lookup/env_impl.ex similarity index 69% rename from apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/env_impl.ex rename to lib/uniris/bootstrap/ip_lookup/env_impl.ex index d1b72a0ea..28cf89033 100644 --- a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/env_impl.ex +++ b/lib/uniris/bootstrap/ip_lookup/env_impl.ex @@ -1,7 +1,7 @@ -defmodule UnirisCore.Bootstrap.IPLookup.EnvImpl do +defmodule Uniris.Bootstrap.IPLookup.EnvImpl do @moduledoc false - @behaviour UnirisCore.Bootstrap.IPLookupImpl + @behaviour Uniris.Bootstrap.IPLookupImpl @impl true @spec get_ip() :: :inet.ip_address() diff --git a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/impl.ex b/lib/uniris/bootstrap/ip_lookup/impl.ex similarity index 58% rename from apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/impl.ex rename to lib/uniris/bootstrap/ip_lookup/impl.ex index 735fe2208..155ef8fff 100644 --- a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/impl.ex +++ b/lib/uniris/bootstrap/ip_lookup/impl.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Bootstrap.IPLookupImpl do +defmodule Uniris.Bootstrap.IPLookupImpl do @moduledoc false @callback get_ip() :: :inet.ip_address() diff --git a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/ipfy_impl.ex b/lib/uniris/bootstrap/ip_lookup/ipfy_impl.ex similarity index 70% rename from apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/ipfy_impl.ex rename to lib/uniris/bootstrap/ip_lookup/ipfy_impl.ex index 249b0a793..19724460a 100644 --- a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/ipfy_impl.ex +++ b/lib/uniris/bootstrap/ip_lookup/ipfy_impl.ex @@ -1,7 +1,7 @@ -defmodule UnirisCore.Bootstrap.IPLookup.IPFYImpl do +defmodule Uniris.Bootstrap.IPLookup.IPFYImpl do @moduledoc false - @behaviour UnirisCore.Bootstrap.IPLookupImpl + @behaviour Uniris.Bootstrap.IPLookupImpl @impl true @spec get_ip() :: :inet.ip_address() diff --git a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/local_impl.ex b/lib/uniris/bootstrap/ip_lookup/local_impl.ex similarity index 72% rename from apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/local_impl.ex rename to lib/uniris/bootstrap/ip_lookup/local_impl.ex index 83da6fb98..9d23e8fea 100644 --- a/apps/uniris_core/lib/uniris_core/bootstrap/ip_lookup/local_impl.ex +++ b/lib/uniris/bootstrap/ip_lookup/local_impl.ex @@ -1,13 +1,13 @@ -defmodule UnirisCore.Bootstrap.IPLookup.LocalImpl do +defmodule Uniris.Bootstrap.IPLookup.LocalImpl do @moduledoc false - @behaviour UnirisCore.Bootstrap.IPLookupImpl + @behaviour Uniris.Bootstrap.IPLookupImpl @impl true @spec get_ip() :: :inet.ip_address() def get_ip do local_interface = - Application.get_env(:uniris_core, UnirisCore.Bootstrap) + Application.get_env(:uniris, Uniris.Bootstrap) |> Keyword.fetch!(:interface) |> String.to_charlist() diff --git a/apps/uniris_core/lib/uniris_core/bootstrap/network_init.ex b/lib/uniris/bootstrap/network_init.ex similarity index 82% rename from apps/uniris_core/lib/uniris_core/bootstrap/network_init.ex rename to lib/uniris/bootstrap/network_init.ex index 02e0cad35..89e5e4538 100644 --- a/apps/uniris_core/lib/uniris_core/bootstrap/network_init.ex +++ b/lib/uniris/bootstrap/network_init.ex @@ -1,23 +1,23 @@ -defmodule UnirisCore.Bootstrap.NetworkInit do +defmodule Uniris.Bootstrap.NetworkInit do @moduledoc false - alias UnirisCore.Beacon - alias UnirisCore.Crypto - alias UnirisCore.Mining.Context - alias UnirisCore.P2P.Node + alias Uniris.Beacon + alias Uniris.Crypto + alias Uniris.Mining.Context + alias Uniris.P2P.Node - alias UnirisCore.SharedSecrets - alias UnirisCore.Storage + alias Uniris.SharedSecrets + alias Uniris.Storage - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger require Logger @@ -78,12 +78,12 @@ defmodule UnirisCore.Bootstrap.NetworkInit do @spec init_genesis_wallets(network_pool_address :: binary()) :: :ok def init_genesis_wallets(network_pool_address) do genesis_transfers = - Enum.map(Application.get_env(:uniris_core, __MODULE__)[:genesis_pools], fn {_, - [ - public_key: - public_key, - amount: amount - ]} -> + Enum.map(Application.get_env(:uniris, __MODULE__)[:genesis_pools], fn {_, + [ + public_key: + public_key, + amount: amount + ]} -> %Transfer{ to: public_key |> Base.decode16!() |> Crypto.hash(), amount: amount diff --git a/apps/uniris_core/lib/uniris_core/crypto.ex b/lib/uniris/crypto.ex similarity index 88% rename from apps/uniris_core/lib/uniris_core/crypto.ex rename to lib/uniris/crypto.ex index 22d2cfddd..5a1d6dba4 100755 --- a/apps/uniris_core/lib/uniris_core/crypto.ex +++ b/lib/uniris/crypto.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Crypto do +defmodule Uniris.Crypto do @moduledoc ~S""" Provide cryptographic operations for Uniris network. @@ -84,9 +84,9 @@ defmodule UnirisCore.Crypto do ## Examples - iex> {pub, _} = UnirisCore.Crypto.derivate_keypair("myseed", 1) - iex> {pub10, _} = UnirisCore.Crypto.derivate_keypair("myseed", 10) - iex> {pub_bis, _} = UnirisCore.Crypto.derivate_keypair("myseed", 1) + iex> {pub, _} = Uniris.Crypto.derivate_keypair("myseed", 1) + iex> {pub10, _} = Uniris.Crypto.derivate_keypair("myseed", 10) + iex> {pub_bis, _} = Uniris.Crypto.derivate_keypair("myseed", 1) iex> pub != pub10 and pub == pub_bis true """ @@ -98,7 +98,7 @@ defmodule UnirisCore.Crypto do def derivate_keypair( seed, index, - curve \\ Application.get_env(:uniris_core, __MODULE__)[:default_curve] + curve \\ Application.get_env(:uniris, __MODULE__)[:default_curve] ) when is_binary(seed) and is_integer(index) do seed @@ -117,7 +117,7 @@ defmodule UnirisCore.Crypto do The date can be either a specific datetime or a specific day """ @spec derivate_beacon_chain_address(subset :: binary(), date :: DateTime.t()) :: - UnirisCore.Crypto.key() + Uniris.Crypto.key() def derivate_beacon_chain_address(subset, date = %DateTime{}) when is_binary(subset) do Keystore.derivate_beacon_chain_address(subset, DateTime.to_unix(date)) end @@ -159,7 +159,7 @@ defmodule UnirisCore.Crypto do @doc """ Encrypt the storage nonce in the keystore using the given public key """ - @spec encrypt_storage_nonce(UnirisCore.Crypto.key()) :: binary() + @spec encrypt_storage_nonce(Uniris.Crypto.key()) :: binary() def encrypt_storage_nonce(public_key) when is_binary(public_key) do Keystore.encrypt_storage_nonce(public_key) end @@ -199,7 +199,7 @@ defmodule UnirisCore.Crypto do @doc """ Return the last node public key """ - @spec node_public_key() :: UnirisCore.Crypto.key() + @spec node_public_key() :: Uniris.Crypto.key() def node_public_key do Keystore.node_public_key() end @@ -209,13 +209,13 @@ defmodule UnirisCore.Crypto do ## Examples - iex> pub0 = UnirisCore.Crypto.node_public_key(0) - iex> pub10 = UnirisCore.Crypto.node_public_key(10) - iex> pub0_bis = UnirisCore.Crypto.node_public_key(0) + iex> pub0 = Uniris.Crypto.node_public_key(0) + iex> pub10 = Uniris.Crypto.node_public_key(10) + iex> pub0_bis = Uniris.Crypto.node_public_key(0) iex> pub0 != pub10 and pub0 == pub0_bis true """ - @spec node_public_key(index :: number()) :: UnirisCore.Crypto.key() + @spec node_public_key(index :: number()) :: Uniris.Crypto.key() def node_public_key(index) do Keystore.node_public_key(index) end @@ -223,7 +223,7 @@ defmodule UnirisCore.Crypto do @doc """ Return the the node shared secrets public key using the node shared secret transaction seed """ - @spec node_shared_secrets_public_key(index :: number()) :: UnirisCore.Crypto.key() + @spec node_shared_secrets_public_key(index :: number()) :: Uniris.Crypto.key() def node_shared_secrets_public_key(index) do Keystore.node_shared_secrets_public_key(index) end @@ -267,12 +267,12 @@ defmodule UnirisCore.Crypto do ## Examples - iex> {pub, _} = UnirisCore.Crypto.generate_deterministic_keypair("myseed") + iex> {pub, _} = Uniris.Crypto.generate_deterministic_keypair("myseed") iex> pub <<0, 195, 217, 87, 74, 44, 143, 133, 202, 49, 24, 21, 172, 125, 120, 229, 214, 229, 203, 0, 171, 137, 3, 53, 26, 206, 212, 108, 55, 78, 175, 52, 104>> - iex> {pub, _} = UnirisCore.Crypto.generate_deterministic_keypair("myseed", :secp256r1) + iex> {pub, _} = Uniris.Crypto.generate_deterministic_keypair("myseed", :secp256r1) iex> pub <<1, 4, 71, 234, 56, 77, 247, 36, 202, 205, 0, 115, 85, 40, 74, 90, 107, 180, 162, 184, 168, 248, 179, 160, 69, 68, 159, 128, 0, 23, 81, 29, 122, 89, 51, @@ -286,7 +286,7 @@ defmodule UnirisCore.Crypto do ) :: {public_key :: key(), private_key :: key()} def generate_deterministic_keypair( seed, - curve \\ Application.get_env(:uniris_core, __MODULE__)[:default_curve] + curve \\ Application.get_env(:uniris, __MODULE__)[:default_curve] ) when is_binary(seed) do do_generate_deterministic_keypair(curve, seed) @@ -311,8 +311,8 @@ defmodule UnirisCore.Crypto do ## Examples - iex> {pub, pv} = UnirisCore.Crypto.generate_deterministic_keypair("myseed") - iex> UnirisCore.Crypto.sign("myfakedata", pv) + iex> {pub, pv} = Uniris.Crypto.generate_deterministic_keypair("myseed") + iex> Uniris.Crypto.sign("myfakedata", pv) <<134, 75, 169, 39, 40, 35, 4, 109, 28, 62, 145, 46, 45, 77, 191, 123, 29, 101, 180, 36, 66, 91, 161, 126, 70, 126, 30, 211, 24, 76, 95, 8, 229, 20, 121, 19, 151, 44, 109, 111, 189, 183, 201, 77, 90, 254, 53, 197, 139, 58, 190, 118, 73, @@ -371,15 +371,15 @@ defmodule UnirisCore.Crypto do ## Examples - iex> {pub, pv} = UnirisCore.Crypto.generate_deterministic_keypair("myseed") - iex> sig = UnirisCore.Crypto.sign("myfakedata", pv) - iex> UnirisCore.Crypto.verify(sig, "myfakedata", pub) + iex> {pub, pv} = Uniris.Crypto.generate_deterministic_keypair("myseed") + iex> sig = Uniris.Crypto.sign("myfakedata", pv) + iex> Uniris.Crypto.verify(sig, "myfakedata", pub) true Returns an error when the signature is invalid - iex> {pub, _} = UnirisCore.Crypto.generate_deterministic_keypair("myseed") + iex> {pub, _} = Uniris.Crypto.generate_deterministic_keypair("myseed") iex> sig = <<1, 48, 69, 2, 33, 0, 185, 231, 7, 86, 207, 253, 8, 230, 199, 94, 251, 33, 42, 172, 95, 93, 7, 209, 175, 69, 216, 121, 239, 24, 17, 21, 41, 129, 255, 49, 153, 116, 2, 32, 85, 1, 212, 69, 182, 98, 174, 213, 79, 154, 69, 84, 149, 126, 169, 44, 98, 64, 21, 211, 20, 235, 165, 97, 61, 8, 239, 194, 196, 177, 46, 199>> - iex> UnirisCore.Crypto.verify(sig, "myfakedata", pub) + iex> Uniris.Crypto.verify(sig, "myfakedata", pub) false """ @spec verify(signature :: binary(), data :: iodata(), public_key :: key()) :: boolean() @@ -407,8 +407,8 @@ defmodule UnirisCore.Crypto do ## Examples ``` - pub = {pub, _} = UnirisCore.Crypto.generate_deterministic_keypair("myseed") - UnirisCore.Crypto.ec_encrypt("myfakedata", pub) + pub = {pub, _} = Uniris.Crypto.generate_deterministic_keypair("myseed") + Uniris.Crypto.ec_encrypt("myfakedata", pub) <<0, 0, 0, 0, 58, 138, 57, 196, 76, 95, 222, 131, 128, 248, 50, 146, 221, 145, 152, 20, 45, 164, 221, 166, 242, 172, 237, 36, 238, 150, 238, 127, 53, 160, 43, 159, 91, 6, 234, 99, 42, 174, 193, 165, 203, 74, 99, 179, 225, 137, 159, @@ -439,15 +439,15 @@ defmodule UnirisCore.Crypto do ## Examples iex> cipher = <<0, 0, 0, 58, 16, 25, 106, 181, 34, 80, 25, 136, 170, 141, 8, 112, 178, 140, 1, 180, 192, 35, 141, 241, 149, 179, 111, 154, 57, 244, 88, 102, 57, 95, 240, 17, 121, 194, 181, 224, 45, 68, 115, 111, 19, 136, 156, 91, 231, 53, 171, 79, 231, 226, 122, 76, 38, 129, 81, 79, 43, 133>> - iex> {pub, pv} = UnirisCore.Crypto.generate_deterministic_keypair("myseed") - iex> UnirisCore.Crypto.ec_decrypt!(cipher, pv) + iex> {pub, pv} = Uniris.Crypto.generate_deterministic_keypair("myseed") + iex> Uniris.Crypto.ec_decrypt!(cipher, pv) "myfakedata" Invalid message to decrypt or key return an error: ``` - UnirisCore.Crypto.generate_deterministic_keypair("myseed", :node) - UnirisCore.Crypto.ec_decrypt!(<<0, 0, 0>>, :node) + Uniris.Crypto.generate_deterministic_keypair("myseed", :node) + Uniris.Crypto.ec_decrypt!(<<0, 0, 0>>, :node) ** (RuntimeError) Decryption failed ``` """ @@ -492,15 +492,15 @@ defmodule UnirisCore.Crypto do iex> key = <<234, 210, 202, 129, 91, 76, 68, 14, 17, 212, 197, 49, 66, 168, 52, 111, 176, ...> 182, 227, 156, 5, 32, 24, 105, 41, 152, 67, 191, 187, 209, 101, 36>> - iex> ciphertext = UnirisCore.Crypto.aes_encrypt("sensitive data", key) - iex> UnirisCore.Crypto.aes_decrypt!(ciphertext, key) + iex> ciphertext = Uniris.Crypto.aes_encrypt("sensitive data", key) + iex> Uniris.Crypto.aes_decrypt!(ciphertext, key) "sensitive data" Return an error when the key is invalid ``` - ciphertext = UnirisCore.Crypto.aes_encrypt("sensitive data", :crypto.strong_rand_bytes(32)) - UnirisCore.Crypto.aes_decrypt!(ciphertext, :crypto.strong_rand_bytes(32)) + ciphertext = Uniris.Crypto.aes_encrypt("sensitive data", :crypto.strong_rand_bytes(32)) + Uniris.Crypto.aes_decrypt!(ciphertext, :crypto.strong_rand_bytes(32)) ** (RuntimeError) Decryption failed ``` @@ -531,22 +531,22 @@ defmodule UnirisCore.Crypto do ## Examples - iex> UnirisCore.Crypto.hash("myfakedata", :sha256) + iex> Uniris.Crypto.hash("myfakedata", :sha256) <<0, 78, 137, 232, 16, 150, 235, 9, 199, 74, 41, 189, 246, 110, 65, 252, 17, 139, 109, 23, 172, 84, 114, 35, 202, 102, 41, 167, 23, 36, 230, 159, 35>> - iex> UnirisCore.Crypto.hash("myfakedata", :blake2b) + iex> Uniris.Crypto.hash("myfakedata", :blake2b) <<4, 244, 16, 24, 144, 16, 67, 113, 164, 214, 115, 237, 113, 126, 130, 76, 128, 99, 78, 223, 60, 179, 158, 62, 239, 245, 85, 4, 156, 10, 2, 94, 95, 19, 166, 170, 147, 140, 117, 1, 169, 132, 113, 202, 217, 193, 56, 112, 193, 62, 134, 145, 233, 114, 41, 228, 164, 180, 225, 147, 2, 33, 192, 42, 184>> - iex> UnirisCore.Crypto.hash("myfakedata", :sha3_256) + iex> Uniris.Crypto.hash("myfakedata", :sha3_256) <<2, 157, 219, 54, 234, 186, 251, 4, 122, 216, 105, 185, 228, 211, 94, 44, 94, 104, 147, 182, 189, 45, 28, 219, 218, 236, 19, 66, 87, 121, 240, 249, 218>> """ @spec hash(data :: iodata(), algo :: supported_hash()) :: versioned_hash() - def hash(data, algo \\ Application.get_env(:uniris_core, __MODULE__)[:default_hash]) + def hash(data, algo \\ Application.get_env(:uniris, __MODULE__)[:default_hash]) def hash(data, algo) when is_bitstring(data) or is_list(data) do hash_algo_id = ID.id_from_hash(algo) diff --git a/apps/uniris_core/lib/uniris_core/crypto/ecdsa.ex b/lib/uniris/crypto/ecdsa.ex similarity index 98% rename from apps/uniris_core/lib/uniris_core/crypto/ecdsa.ex rename to lib/uniris/crypto/ecdsa.ex index 8455abdca..57c9eccb5 100755 --- a/apps/uniris_core/lib/uniris_core/crypto/ecdsa.ex +++ b/lib/uniris/crypto/ecdsa.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Crypto.ECDSA do +defmodule Uniris.Crypto.ECDSA do @moduledoc false def generate_keypair(curve, seed) do diff --git a/apps/uniris_core/lib/uniris_core/crypto/ed25519.ex b/lib/uniris/crypto/ed25519.ex similarity index 93% rename from apps/uniris_core/lib/uniris_core/crypto/ed25519.ex rename to lib/uniris/crypto/ed25519.ex index 84e344b81..2a07b0c7c 100755 --- a/apps/uniris_core/lib/uniris_core/crypto/ed25519.ex +++ b/lib/uniris/crypto/ed25519.ex @@ -1,5 +1,5 @@ -defmodule UnirisCore.Crypto.Ed25519 do - alias UnirisCore.Crypto.LibSodiumPort +defmodule Uniris.Crypto.Ed25519 do + alias Uniris.Crypto.LibSodiumPort @moduledoc false diff --git a/apps/uniris_core/lib/uniris_core/crypto/id.ex b/lib/uniris/crypto/id.ex similarity index 76% rename from apps/uniris_core/lib/uniris_core/crypto/id.ex rename to lib/uniris/crypto/id.ex index dc4d3f921..405213bdd 100755 --- a/apps/uniris_core/lib/uniris_core/crypto/id.ex +++ b/lib/uniris/crypto/id.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.Crypto.ID do +defmodule Uniris.Crypto.ID do @moduledoc false @doc """ Get an identification from a elliptic curve name """ - @spec id_from_curve(UnirisCore.Crypto.supported_curve()) :: integer() + @spec id_from_curve(Uniris.Crypto.supported_curve()) :: integer() def id_from_curve(:ed25519), do: 0 def id_from_curve(:secp256r1), do: 1 def id_from_curve(:secp256k1), do: 2 @@ -12,7 +12,7 @@ defmodule UnirisCore.Crypto.ID do @doc """ Get a curve name from an curve ID """ - @spec curve_from_id(integer()) :: UnirisCore.Crypto.supported_curve() + @spec curve_from_id(integer()) :: Uniris.Crypto.supported_curve() def curve_from_id(0), do: :ed25519 def curve_from_id(1), do: :secp256r1 def curve_from_id(2), do: :secp256k1 @@ -20,7 +20,7 @@ defmodule UnirisCore.Crypto.ID do @doc """ Get an identification from an hash algorithm """ - @spec id_from_hash(UnirisCore.Crypto.supported_hash()) :: integer() + @spec id_from_hash(Uniris.Crypto.supported_hash()) :: integer() def id_from_hash(:sha256), do: 0 def id_from_hash(:sha512), do: 1 def id_from_hash(:sha3_256), do: 2 @@ -28,7 +28,7 @@ defmodule UnirisCore.Crypto.ID do def id_from_hash(:blake2b), do: 4 @spec identify_keypair({binary(), binary()}, integer()) :: - {UnirisCore.Crypto.key(), UnirisCore.Crypto.key()} + {Uniris.Crypto.key(), Uniris.Crypto.key()} def identify_keypair({public_key, private_key}, id) do { [<>, public_key] |> :binary.list_to_bin(), diff --git a/apps/uniris_core/lib/uniris_core/crypto/keystore.ex b/lib/uniris/crypto/keystore.ex similarity index 95% rename from apps/uniris_core/lib/uniris_core/crypto/keystore.ex rename to lib/uniris/crypto/keystore.ex index 2b27ad18a..eabc45fe8 100755 --- a/apps/uniris_core/lib/uniris_core/crypto/keystore.ex +++ b/lib/uniris/crypto/keystore.ex @@ -1,9 +1,9 @@ -defmodule UnirisCore.Crypto.Keystore do +defmodule Uniris.Crypto.Keystore do @moduledoc false - @behaviour UnirisCore.Crypto.KeystoreImpl + @behaviour Uniris.Crypto.KeystoreImpl - @default_impl UnirisCore.Crypto.SoftwareKeystore + @default_impl Uniris.Crypto.SoftwareKeystore defdelegate child_spec(opts), to: @default_impl @impl true @@ -154,8 +154,8 @@ defmodule UnirisCore.Crypto.Keystore do end defp impl do - :uniris_core - |> Application.get_env(UnirisCore.Crypto, + :uniris + |> Application.get_env(Uniris.Crypto, keystore: @default_impl ) |> Keyword.fetch!(:keystore) diff --git a/apps/uniris_core/lib/uniris_core/crypto/keystore/impl.ex b/lib/uniris/crypto/keystore/impl.ex similarity index 84% rename from apps/uniris_core/lib/uniris_core/crypto/keystore/impl.ex rename to lib/uniris/crypto/keystore/impl.ex index e103f082a..956a9102d 100755 --- a/apps/uniris_core/lib/uniris_core/crypto/keystore/impl.ex +++ b/lib/uniris/crypto/keystore/impl.ex @@ -1,21 +1,23 @@ -defmodule UnirisCore.Crypto.KeystoreImpl do +defmodule Uniris.Crypto.KeystoreImpl do @moduledoc false + alias Uniris.Crypto + @callback sign_with_node_key(data :: binary()) :: binary() @callback sign_with_node_key(data :: binary(), index :: number()) :: binary() @callback sign_with_node_shared_secrets_key(data :: binary()) :: binary() @callback sign_with_node_shared_secrets_key(data :: binary(), index :: number()) :: binary() @callback hash_with_daily_nonce(data :: binary()) :: binary() @callback hash_with_storage_nonce(data :: binary()) :: binary() - @callback node_public_key() :: UnirisCore.Crypto.key() - @callback node_public_key(index :: number()) :: UnirisCyrpto.key() - @callback node_shared_secrets_public_key(index :: number()) :: UnirisCore.Crypto.key() + @callback node_public_key() :: Crypto.key() + @callback node_public_key(index :: number()) :: Crypto.key() + @callback node_shared_secrets_public_key(index :: number()) :: Crypto.key() @callback increment_number_of_generate_node_keys() :: :ok @callback increment_number_of_generate_node_shared_secrets_keys() :: :ok @callback decrypt_with_node_key!(cipher :: binary()) :: term() @callback decrypt_with_node_key!(cipher :: binary(), index :: non_neg_integer()) :: term() @callback derivate_beacon_chain_address(subset :: binary(), date :: non_neg_integer()) :: - UnirisCore.Crypto.key() + Crypto.key() @callback number_of_node_keys() :: index :: non_neg_integer() @callback number_of_node_shared_secrets_keys() :: non_neg_integer() @@ -31,7 +33,7 @@ defmodule UnirisCore.Crypto.KeystoreImpl do ) :: :ok @callback decrypt_and_set_storage_nonce(encrypted_nonce :: binary()) :: :ok - @callback encrypt_storage_nonce(public_key :: UnirisCore.Crypto.key()) :: binary() + @callback encrypt_storage_nonce(public_key :: Crypto.key()) :: binary() @callback decrypt_and_set_node_shared_secrets_network_pool_seed( encrypted_seed :: binary(), encrypted_aes_key :: binary() diff --git a/apps/uniris_core/lib/uniris_core/crypto/keystore/software_impl.ex b/lib/uniris/crypto/keystore/software_impl.ex similarity index 98% rename from apps/uniris_core/lib/uniris_core/crypto/keystore/software_impl.ex rename to lib/uniris/crypto/keystore/software_impl.ex index d9fcf4050..779e5d871 100755 --- a/apps/uniris_core/lib/uniris_core/crypto/keystore/software_impl.ex +++ b/lib/uniris/crypto/keystore/software_impl.ex @@ -1,13 +1,13 @@ -defmodule UnirisCore.Crypto.SoftwareKeystore do +defmodule Uniris.Crypto.SoftwareKeystore do @moduledoc false use GenServer - alias UnirisCore.Crypto, as: Crypto + alias Uniris.Crypto require Logger - @behaviour UnirisCore.Crypto.KeystoreImpl + @behaviour Uniris.Crypto.KeystoreImpl def start_link(opts) do GenServer.start_link(__MODULE__, opts, name: __MODULE__) @@ -33,7 +33,7 @@ defmodule UnirisCore.Crypto.SoftwareKeystore do end defp storage_nonce_file do - Application.app_dir(:uniris_core, "priv/crypto/storage_nonce") + Application.app_dir(:uniris, "priv/crypto/storage_nonce") end @impl true diff --git a/apps/uniris_core/lib/uniris_core/crypto/libsodium_port.ex b/lib/uniris/crypto/libsodium_port.ex similarity index 94% rename from apps/uniris_core/lib/uniris_core/crypto/libsodium_port.ex rename to lib/uniris/crypto/libsodium_port.ex index 59e59aa43..f1c6b2bd0 100755 --- a/apps/uniris_core/lib/uniris_core/crypto/libsodium_port.ex +++ b/lib/uniris/crypto/libsodium_port.ex @@ -1,16 +1,18 @@ -defmodule UnirisCore.Crypto.LibSodiumPort do +defmodule Uniris.Crypto.LibSodiumPort do @moduledoc false use GenServer require Logger + @libsodium_exec_file Application.app_dir(:uniris, "/priv/crypto/c_dist/libsodium") + def start_link(opts) do GenServer.start_link(__MODULE__, opts, name: __MODULE__) end def init(_opts) do port = - Port.open({:spawn, Application.app_dir(:uniris_core, "/priv/crypto/c_dist/libsodium")}, [ + Port.open({:spawn, @libsodium_exec_file}, [ :binary, :exit_status, {:packet, 4} diff --git a/lib/uniris/crypto/supervisor.ex b/lib/uniris/crypto/supervisor.ex new file mode 100755 index 000000000..adfeba124 --- /dev/null +++ b/lib/uniris/crypto/supervisor.ex @@ -0,0 +1,28 @@ +defmodule Uniris.CryptoSupervisor do + @moduledoc false + use Supervisor + + alias Uniris.Crypto.Keystore + alias Uniris.Crypto.LibSodiumPort + alias Uniris.Crypto.TransactionLoader + + alias Uniris.SharedSecrets.NodeRenewal + alias Uniris.Utils + + def start_link(opts) do + Supervisor.start_link(__MODULE__, opts, name: __MODULE__) + end + + def init(_opts) do + renewal_interval = Application.get_env(:uniris, NodeRenewal)[:interval] + + children = + [LibSodiumPort] ++ + Utils.configurable_children([ + {Keystore, [], []}, + {TransactionLoader, [renewal_interval: renewal_interval], []} + ]) + + Supervisor.init(children, strategy: :rest_for_one) + end +end diff --git a/apps/uniris_core/lib/uniris_core/crypto/transaction_loader.ex b/lib/uniris/crypto/transaction_loader.ex similarity index 93% rename from apps/uniris_core/lib/uniris_core/crypto/transaction_loader.ex rename to lib/uniris/crypto/transaction_loader.ex index a36b87a54..997a9e9e3 100644 --- a/apps/uniris_core/lib/uniris_core/crypto/transaction_loader.ex +++ b/lib/uniris/crypto/transaction_loader.ex @@ -1,15 +1,15 @@ -defmodule UnirisCore.Crypto.TransactionLoader do +defmodule Uniris.Crypto.TransactionLoader do @moduledoc false - alias UnirisCore.Crypto - alias UnirisCore.PubSub - alias UnirisCore.Storage + alias Uniris.Crypto + alias Uniris.PubSub + alias Uniris.Storage - alias UnirisCore.Transaction - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Keys + alias Uniris.Transaction + alias Uniris.TransactionData + alias Uniris.TransactionData.Keys - alias UnirisCore.Utils + alias Uniris.Utils require Logger diff --git a/apps/uniris_core/lib/uniris_core/election.ex b/lib/uniris/election.ex similarity index 98% rename from apps/uniris_core/lib/uniris_core/election.ex rename to lib/uniris/election.ex index 5f86b4c4c..2ffa3db6d 100755 --- a/apps/uniris_core/lib/uniris_core/election.ex +++ b/lib/uniris/election.ex @@ -1,19 +1,19 @@ -defmodule UnirisCore.Election do +defmodule Uniris.Election do @moduledoc """ Uniris provides a random and rotating node election based on heuristic algorithms and constraints to ensure a fair distributed processing and data storage among its network. """ - alias UnirisCore.Crypto + alias Uniris.Crypto alias __MODULE__.Constraints alias __MODULE__.StorageConstraints alias __MODULE__.ValidationConstraints - alias UnirisCore.P2P - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Node - alias UnirisCore.Transaction + alias Uniris.Transaction @doc """ Get the elected validation nodes for a given transaction and a list of nodes. diff --git a/apps/uniris_core/lib/uniris_core/election/constraints.ex b/lib/uniris/election/constraints.ex similarity index 94% rename from apps/uniris_core/lib/uniris_core/election/constraints.ex rename to lib/uniris/election/constraints.ex index ca8d721ec..8bc2f395a 100755 --- a/apps/uniris_core/lib/uniris_core/election/constraints.ex +++ b/lib/uniris/election/constraints.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Election.Constraints do +defmodule Uniris.Election.Constraints do @moduledoc """ Election algorithms are based on constrains with heuristics aims to the best case. @@ -8,13 +8,13 @@ defmodule UnirisCore.Election.Constraints do use GenServer - alias UnirisCore.Election.StorageConstraints - alias UnirisCore.Election.ValidationConstraints + alias Uniris.Election.StorageConstraints + alias Uniris.Election.ValidationConstraints - alias UnirisCore.Transaction - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.Transaction + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.UCOLedger @default_min_validations 3 diff --git a/apps/uniris_core/lib/uniris_core/election/constraints/storage.ex b/lib/uniris/election/constraints/storage.ex similarity index 77% rename from apps/uniris_core/lib/uniris_core/election/constraints/storage.ex rename to lib/uniris/election/constraints/storage.ex index afef1dd02..2d3f490a8 100755 --- a/apps/uniris_core/lib/uniris_core/election/constraints/storage.ex +++ b/lib/uniris/election/constraints/storage.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Election.StorageConstraints do +defmodule Uniris.Election.StorageConstraints do @moduledoc """ Represents the constraints for the storage nodes election """ @@ -7,7 +7,7 @@ defmodule UnirisCore.Election.StorageConstraints do @type min_geo_patch_fun() :: (() -> non_neg_integer()) @type min_geo_patch_avg_availability_fun() :: (() -> non_neg_integer()) - @type number_replicas_fun() :: (nonempty_list(UnirisCore.P2P.Node.t()) -> non_neg_integer()) + @type number_replicas_fun() :: (nonempty_list(Uniris.P2P.Node.t()) -> non_neg_integer()) @type t :: %__MODULE__{ min_geo_patch: min_geo_patch_fun, diff --git a/apps/uniris_core/lib/uniris_core/election/constraints/validation.ex b/lib/uniris/election/constraints/validation.ex similarity index 73% rename from apps/uniris_core/lib/uniris_core/election/constraints/validation.ex rename to lib/uniris/election/constraints/validation.ex index b70539f56..0909693a5 100755 --- a/apps/uniris_core/lib/uniris_core/election/constraints/validation.ex +++ b/lib/uniris/election/constraints/validation.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.Election.ValidationConstraints do +defmodule Uniris.Election.ValidationConstraints do @moduledoc """ Represents the constraints for the validation nodes election """ defstruct [:min_geo_patch, :min_validation_number, :validation_number] @type min_geo_patch_fun :: (() -> non_neg_integer()) - @type validation_number_fun :: (UnirisCore.Transaction.pending() -> non_neg_integer()) + @type validation_number_fun :: (Uniris.Transaction.t() -> non_neg_integer()) @type t :: %__MODULE__{ min_geo_patch: min_geo_patch_fun(), diff --git a/apps/uniris_core/lib/uniris_core/election/supervisor.ex b/lib/uniris/election/supervisor.ex similarity index 75% rename from apps/uniris_core/lib/uniris_core/election/supervisor.ex rename to lib/uniris/election/supervisor.ex index 4f0ca7aa0..96ad57b99 100644 --- a/apps/uniris_core/lib/uniris_core/election/supervisor.ex +++ b/lib/uniris/election/supervisor.ex @@ -1,9 +1,9 @@ -defmodule UnirisCore.ElectionSupervisor do +defmodule Uniris.ElectionSupervisor do @moduledoc false use Supervisor - alias UnirisCore.Election.Constraints + alias Uniris.Election.Constraints def start_link(opts) do Supervisor.start_link(__MODULE__, opts, name: __MODULE__) diff --git a/lib/uniris/governance.ex b/lib/uniris/governance.ex new file mode 100644 index 000000000..30787f1c9 --- /dev/null +++ b/lib/uniris/governance.ex @@ -0,0 +1,107 @@ +defmodule Uniris.Governance do + @moduledoc """ + Handle the governance onchain by supporting testnet and mainnet updates using quorum of votes + for any protocol updates through code approvals and metrics approvals + """ + + alias Uniris.Storage + + alias Uniris.Transaction + alias Uniris.TransactionData + + require Logger + + @doc """ + Defines the acceptance threshold for a code approval quorum to go to the testnet evaluation + """ + @spec code_approvals_threshold() :: float() + def code_approvals_threshold do + 0.5 + end + + @doc """ + Defines the acceptance threshold for a code metrics quorum to go to the mainnet + """ + @spec metrics_approval_threshold() :: float() + def metrics_approval_threshold do + 0.8 + end + + @spec run_continuous_integration(Transaction.t()) :: :ok | :error + def run_continuous_integration(tx = %Transaction{}) do + with :ok <- fork_code(tx), + {_, 0} <- System.cmd("mix", ["compile", "--warnings-as-errors"], stderr_to_stdout: true), + {_, 0} <- System.cmd("mix", ["test"], stderr_to_stdout: true) do + :ok + else + {_return, _exit_status} -> + {:error, :invalid_integration} + end + end + + @spec deploy_testnet(binary()) :: :ok | {:error, :invalid_deployment} + def deploy_testnet(address) do + with {:ok, %Transaction{timestamp: timestamp}} <- Storage.get_transaction(address) do + # :ok <- fork_code(tx) do + p2p_port = rem(DateTime.to_unix(timestamp), 11111) + web_port = rem(DateTime.to_unix(timestamp), 22222) + + case System.cmd("iex", ["-S", "mix", "phx.server"], + env: [ + {"MIX_ENV", "prod"}, + {"UNIRIS_P2P_PORT", Integer.to_string(p2p_port)}, + {"UNIRIS_WEB_PORT", Integer.to_string(web_port)} + ], + stderr_to_stdout: true + ) do + {_, 0} -> + :ok + + {error, _} -> + IO.inspect(error) + {:error, :invalid_deployment} + end + else + {:error, :transaction_not_exists} = e -> + e + + _ -> + {:error, :invalid_deployment} + end + end + + defp fork_code(%Transaction{address: address, data: %TransactionData{content: content}}) do + patch_file = Path.join(File.cwd!(), "proposal_#{Base.encode16(address)}") + File.write!(patch_file, content) + + {branches, _} = System.cmd("git", ["branch", "-l"]) + + branches = + branches + |> String.split("\n", trim: true) + |> Enum.map(&String.trim/1) + + unless Base.encode16(address) in branches do + System.cmd("git", ["checkout", "-b", Base.encode16(address)]) + end + + case System.cmd("git", ["apply", patch_file], stderr_to_stdout: true) do + {_, 0} -> + System.cmd("git", ["commit", "-m", commit_message(content)]) + File.rm!(patch_file) + :ok + + {_errors, _} -> + File.rm!(patch_file) + {:error, :invalid_code_patch} + end + end + + defp commit_message(content) do + [description_match] = Regex.scan(~r/(?<=Description:).+?(?=Changes:)/s, content) + + description_match + |> List.first() + |> String.trim() + end +end diff --git a/apps/uniris_core/lib/uniris_core/interpreter.ex b/lib/uniris/interpreter.ex similarity index 89% rename from apps/uniris_core/lib/uniris_core/interpreter.ex rename to lib/uniris/interpreter.ex index bc1574db3..f54e79cb0 100644 --- a/apps/uniris_core/lib/uniris_core/interpreter.ex +++ b/lib/uniris/interpreter.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Interpreter do +defmodule Uniris.Interpreter do @moduledoc """ Handle smart contracts based on a new language running in an custom interpreter for Uniris network. Each smart contract is register and supervised as long running process to interact with later on. @@ -7,14 +7,14 @@ defmodule UnirisCore.Interpreter do alias __MODULE__.AST alias __MODULE__.Contract alias __MODULE__.ContractSupervisor - alias UnirisCore.Transaction + alias Uniris.Transaction @doc ~S""" Parse a smart contract code to check if it's valid or not ## Examples - iex> UnirisCore.Interpreter.valid_contract? " + iex> Uniris.Interpreter.valid_contract? " ...> trigger datetime: 1573745454 ...> actions do ...> \"Closing votes\" @@ -25,7 +25,7 @@ defmodule UnirisCore.Interpreter do Returns false when an unexpected symbol is found. Allows only whitelisted symbols to prevent access to critical functions and ensures safety. - iex> UnirisCore.Interpreter.valid_contract? " + iex> Uniris.Interpreter.valid_contract? " ...> actions do ...> System.user_home ...> end @@ -34,12 +34,12 @@ defmodule UnirisCore.Interpreter do Returns false when type check errors for triggers or conditions - iex> UnirisCore.Interpreter.valid_contract? " + iex> Uniris.Interpreter.valid_contract? " ...> trigger datetime: 0000000111 ...> " false - iex> UnirisCore.Interpreter.valid_contract? " + iex> Uniris.Interpreter.valid_contract? " ...> condition post_paid_fee: \"0000000000011198718\" ...> " false diff --git a/apps/uniris_core/lib/uniris_core/interpreter/ast.ex b/lib/uniris/interpreter/ast.ex similarity index 99% rename from apps/uniris_core/lib/uniris_core/interpreter/ast.ex rename to lib/uniris/interpreter/ast.ex index 25025a798..e68a15bd4 100644 --- a/apps/uniris_core/lib/uniris_core/interpreter/ast.ex +++ b/lib/uniris/interpreter/ast.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Interpreter.AST do +defmodule Uniris.Interpreter.AST do @moduledoc false @origin_families [:biometric, :software] diff --git a/apps/uniris_core/lib/uniris_core/interpreter/contract.ex b/lib/uniris/interpreter/contract.ex similarity index 97% rename from apps/uniris_core/lib/uniris_core/interpreter/contract.ex rename to lib/uniris/interpreter/contract.ex index bb142dea3..4ae0c3d9b 100644 --- a/apps/uniris_core/lib/uniris_core/interpreter/contract.ex +++ b/lib/uniris/interpreter/contract.ex @@ -1,13 +1,13 @@ -defmodule UnirisCore.Interpreter.Contract do +defmodule Uniris.Interpreter.Contract do @moduledoc """ Represents parsed smart contract instance as long running process. Triggers and action mechanism are sent to the contract as message passing. """ - alias UnirisCore.ContractRegistry - alias UnirisCore.Transaction - alias UnirisCore.Utils + alias Uniris.ContractRegistry + alias Uniris.Transaction + alias Uniris.Utils use GenServer diff --git a/apps/uniris_core/lib/uniris_core/interpreter/std.ex b/lib/uniris/interpreter/std.ex similarity index 73% rename from apps/uniris_core/lib/uniris_core/interpreter/std.ex rename to lib/uniris/interpreter/std.ex index ed28ea17c..348257cb7 100644 --- a/apps/uniris_core/lib/uniris_core/interpreter/std.ex +++ b/lib/uniris/interpreter/std.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Interpreter.STD do +defmodule Uniris.Interpreter.STD do @moduledoc false # TODO: define methods for a standard library to be used in the smart contract code diff --git a/apps/uniris_core/lib/uniris_core/interpreter/supervisor.ex b/lib/uniris/interpreter/supervisor.ex similarity index 53% rename from apps/uniris_core/lib/uniris_core/interpreter/supervisor.ex rename to lib/uniris/interpreter/supervisor.ex index 3ded0064b..009c15f55 100644 --- a/apps/uniris_core/lib/uniris_core/interpreter/supervisor.ex +++ b/lib/uniris/interpreter/supervisor.ex @@ -1,9 +1,10 @@ -defmodule UnirisCore.InterpreterSupervisor do +defmodule Uniris.InterpreterSupervisor do @moduledoc false use Supervisor - alias UnirisCore.Utils + alias Uniris.Interpreter.TransactionLoader + alias Uniris.Utils def start_link(opts) do Supervisor.start_link(__MODULE__, opts, name: __MODULE__) @@ -12,9 +13,9 @@ defmodule UnirisCore.InterpreterSupervisor do def init(_opts) do children = [ - {Registry, keys: :unique, name: UnirisCore.ContractRegistry}, - {DynamicSupervisor, strategy: :one_for_one, name: UnirisCore.ContractSupervisor} - ] ++ Utils.configurable_children([{UnirisCore.Interpreter.TransactionLoader, [], []}]) + {Registry, keys: :unique, name: Uniris.ContractRegistry}, + {DynamicSupervisor, strategy: :one_for_one, name: Uniris.ContractSupervisor} + ] ++ Utils.configurable_children([{TransactionLoader, [], []}]) Supervisor.init(children, strategy: :rest_for_one) end diff --git a/apps/uniris_core/lib/uniris_core/interpreter/transaction_loader.ex b/lib/uniris/interpreter/transaction_loader.ex similarity index 75% rename from apps/uniris_core/lib/uniris_core/interpreter/transaction_loader.ex rename to lib/uniris/interpreter/transaction_loader.ex index 69f2a12ab..fde5d23a7 100644 --- a/apps/uniris_core/lib/uniris_core/interpreter/transaction_loader.ex +++ b/lib/uniris/interpreter/transaction_loader.ex @@ -1,13 +1,13 @@ -defmodule UnirisCore.Interpreter.TransactionLoader do +defmodule Uniris.Interpreter.TransactionLoader do @moduledoc false - alias UnirisCore.Interpreter + alias Uniris.Interpreter - alias UnirisCore.PubSub - alias UnirisCore.Storage + alias Uniris.PubSub + alias Uniris.Storage - alias UnirisCore.Transaction - alias UnirisCore.TransactionData + alias Uniris.Transaction + alias Uniris.TransactionData use GenServer diff --git a/apps/uniris_core/lib/uniris_core/mining.ex b/lib/uniris/mining.ex similarity index 88% rename from apps/uniris_core/lib/uniris_core/mining.ex rename to lib/uniris/mining.ex index 77714f861..6309f74fc 100644 --- a/apps/uniris_core/lib/uniris_core/mining.ex +++ b/lib/uniris/mining.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Mining do +defmodule Uniris.Mining do @moduledoc """ Provide functions to perform steps of the transaction mining delegating the work to a mining FSM. @@ -12,25 +12,25 @@ defmodule UnirisCore.Mining do - Replication (once the atomic commitment is reached) """ - alias UnirisCore.Beacon - alias UnirisCore.Bootstrap.NetworkInit - alias UnirisCore.Crypto + alias Uniris.Beacon + alias Uniris.Bootstrap.NetworkInit + alias Uniris.Crypto alias __MODULE__.Context alias __MODULE__.Replication alias __MODULE__.Worker alias __MODULE__.WorkerSupervisor - alias UnirisCore.MiningRegistry + alias Uniris.MiningRegistry - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.ReplicateTransaction + alias Uniris.P2P + alias Uniris.P2P.Message.ReplicateTransaction - alias UnirisCore.TaskSupervisor + alias Uniris.TaskSupervisor - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations require Logger @@ -39,8 +39,8 @@ defmodule UnirisCore.Mining do """ @spec start( transaction :: Transaction.pending(), - welcome_node_public_key :: UnirisCore.Crypto.key(), - validation_node_public_keys :: list(UnirisCore.Crypto.key()) + welcome_node_public_key :: Uniris.Crypto.key(), + validation_node_public_keys :: list(Uniris.Crypto.key()) ) :: {:ok, pid()} def start(tx = %Transaction{}, _, [_ | []]) do diff --git a/apps/uniris_core/lib/uniris_core/mining/binary_sequence.ex b/lib/uniris/mining/binary_sequence.ex similarity index 97% rename from apps/uniris_core/lib/uniris_core/mining/binary_sequence.ex rename to lib/uniris/mining/binary_sequence.ex index 5e6628824..7558f4211 100755 --- a/apps/uniris_core/lib/uniris_core/mining/binary_sequence.ex +++ b/lib/uniris/mining/binary_sequence.ex @@ -1,7 +1,7 @@ -defmodule UnirisCore.Mining.BinarySequence do +defmodule Uniris.Mining.BinarySequence do @moduledoc false - alias UnirisCore.P2P.Node + alias Uniris.P2P.Node import Bitwise diff --git a/apps/uniris_core/lib/uniris_core/mining/context.ex b/lib/uniris/mining/context.ex similarity index 91% rename from apps/uniris_core/lib/uniris_core/mining/context.ex rename to lib/uniris/mining/context.ex index 10d550d66..48df8155f 100755 --- a/apps/uniris_core/lib/uniris_core/mining/context.ex +++ b/lib/uniris/mining/context.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Mining.Context do +defmodule Uniris.Mining.Context do @moduledoc false defstruct previous_chain: [], @@ -8,33 +8,33 @@ defmodule UnirisCore.Mining.Context do chain_storage_nodes_view: [], beacon_storage_nodes_view: <<>> - alias UnirisCore.Crypto - alias UnirisCore.Election + alias Uniris.Crypto + alias Uniris.Election - alias UnirisCore.Mining.BinarySequence + alias Uniris.Mining.BinarySequence - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.GetProofOfIntegrity - alias UnirisCore.P2P.Message.GetTransaction - alias UnirisCore.P2P.Message.GetTransactionHistory - alias UnirisCore.P2P.Message.GetUnspentOutputs - alias UnirisCore.P2P.Message.ProofOfIntegrity - alias UnirisCore.P2P.Message.TransactionHistory - alias UnirisCore.P2P.Message.UnspentOutputList - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Message.GetProofOfIntegrity + alias Uniris.P2P.Message.GetTransaction + alias Uniris.P2P.Message.GetTransactionHistory + alias Uniris.P2P.Message.GetUnspentOutputs + alias Uniris.P2P.Message.ProofOfIntegrity + alias Uniris.P2P.Message.TransactionHistory + alias Uniris.P2P.Message.UnspentOutputList + alias Uniris.P2P.Node - alias UnirisCore.Storage + alias Uniris.Storage - alias UnirisCore.TaskSupervisor + alias Uniris.TaskSupervisor - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.UCOLedger @type t() :: %__MODULE__{ previous_chain: list(Transaction.t()), @@ -78,7 +78,7 @@ defmodule UnirisCore.Mining.Context do A confirmation is performed to verify the chain integrity and unspent outputs authenticty against other storage nodes. """ - @spec fetch_history(__MODULE__.t(), Transaction.pending()) :: __MODULE__.t() + @spec fetch_history(__MODULE__.t(), Transaction.t()) :: __MODULE__.t() def fetch_history(ctx = %__MODULE__{}, %Transaction{ type: :node, diff --git a/apps/uniris_core/lib/uniris_core/mining/fee.ex b/lib/uniris/mining/fee.ex similarity index 87% rename from apps/uniris_core/lib/uniris_core/mining/fee.ex rename to lib/uniris/mining/fee.ex index 02089d2e3..01ab73d7e 100644 --- a/apps/uniris_core/lib/uniris_core/mining/fee.ex +++ b/lib/uniris/mining/fee.ex @@ -1,8 +1,8 @@ -defmodule UnirisCore.Mining.Fee do +defmodule Uniris.Mining.Fee do @moduledoc false - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement @storage_node_rate 0.5 @cross_validation_node_rate 0.4 @@ -35,10 +35,10 @@ defmodule UnirisCore.Mining.Fee do """ @spec distribute( fee :: float(), - welcome_node :: UnirisCore.Crypto.key(), - coordinator_public_key :: UnirisCore.Crypto.key(), - validation_node_public_keys :: nonempty_list(UnirisCore.Crypto.key()), - previous_storage_node_public_keys :: list(UnirisCore.Crypto.key()) + welcome_node :: Uniris.Crypto.key(), + coordinator_public_key :: Uniris.Crypto.key(), + validation_node_public_keys :: nonempty_list(Uniris.Crypto.key()), + previous_storage_node_public_keys :: list(Uniris.Crypto.key()) ) :: rewards :: list(Movement.t()) def distribute( diff --git a/apps/uniris_core/lib/uniris_core/mining/malicious_detection.ex b/lib/uniris/mining/malicious_detection.ex similarity index 80% rename from apps/uniris_core/lib/uniris_core/mining/malicious_detection.ex rename to lib/uniris/mining/malicious_detection.ex index 0de9db451..7ead0687c 100644 --- a/apps/uniris_core/lib/uniris_core/mining/malicious_detection.ex +++ b/lib/uniris/mining/malicious_detection.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Mining.MaliciousDetection do +defmodule Uniris.Mining.MaliciousDetection do @moduledoc """ Provide a process to detect the malicious nodes when the atomic commitment has not been reached. @@ -7,7 +7,7 @@ defmodule UnirisCore.Mining.MaliciousDetection do """ use Task - alias UnirisCore.Transaction + alias Uniris.Transaction def start_link(opts) do tx = Keyword.get(opts, :transaction) diff --git a/apps/uniris_core/lib/uniris_core/mining/proof_of_integrity.ex b/lib/uniris/mining/proof_of_integrity.ex similarity index 89% rename from apps/uniris_core/lib/uniris_core/mining/proof_of_integrity.ex rename to lib/uniris/mining/proof_of_integrity.ex index 3af2133d3..be3256094 100644 --- a/apps/uniris_core/lib/uniris_core/mining/proof_of_integrity.ex +++ b/lib/uniris/mining/proof_of_integrity.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.Mining.ProofOfIntegrity do +defmodule Uniris.Mining.ProofOfIntegrity do @moduledoc false - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp @doc """ Produce a proof of integrity for a given chain. diff --git a/apps/uniris_core/lib/uniris_core/mining/proof_of_work.ex b/lib/uniris/mining/proof_of_work.ex similarity index 93% rename from apps/uniris_core/lib/uniris_core/mining/proof_of_work.ex rename to lib/uniris/mining/proof_of_work.ex index 656a4c171..5c27ead0e 100644 --- a/apps/uniris_core/lib/uniris_core/mining/proof_of_work.ex +++ b/lib/uniris/mining/proof_of_work.ex @@ -1,15 +1,15 @@ -defmodule UnirisCore.Mining.ProofOfWork do +defmodule Uniris.Mining.ProofOfWork do @moduledoc false - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.P2P - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Node - alias UnirisCore.SharedSecrets - alias UnirisCore.Storage + alias Uniris.SharedSecrets + alias Uniris.Storage - alias UnirisCore.Transaction + alias Uniris.Transaction @doc """ Performs a lookup to find out the public key matching the signature created by diff --git a/apps/uniris_core/lib/uniris_core/mining/replication.ex b/lib/uniris/mining/replication.ex similarity index 88% rename from apps/uniris_core/lib/uniris_core/mining/replication.ex rename to lib/uniris/mining/replication.ex index 2744a7b22..b71e40aad 100644 --- a/apps/uniris_core/lib/uniris_core/mining/replication.ex +++ b/lib/uniris/mining/replication.ex @@ -1,24 +1,27 @@ -defmodule UnirisCore.Mining.Replication do +defmodule Uniris.Mining.Replication do @moduledoc false - alias UnirisCore.Beacon - alias UnirisCore.Crypto - alias UnirisCore.Election + alias Uniris.Beacon + alias Uniris.Crypto + alias Uniris.Election - alias UnirisCore.Mining.Context - alias UnirisCore.Mining.Fee - alias UnirisCore.Mining.ProofOfIntegrity - alias UnirisCore.Mining.ProofOfWork + alias Uniris.Governance - alias UnirisCore.P2P - alias UnirisCore.P2P.Node + alias Uniris.Mining.Context + alias Uniris.Mining.Fee + alias Uniris.Mining.ProofOfIntegrity + alias Uniris.Mining.ProofOfWork - alias UnirisCore.Storage + alias Uniris.P2P + alias Uniris.P2P.Node - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Storage + + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.TransactionData require Logger @@ -205,8 +208,6 @@ defmodule UnirisCore.Mining.Replication do end end - defp validation_with_context(_tx, nil), do: true - defp validation_with_context( tx = %Transaction{ validation_stamp: %ValidationStamp{ @@ -235,6 +236,8 @@ defmodule UnirisCore.Mining.Replication do end end + defp validation_with_context(%Transaction{}, nil), do: true + # Return the validation depending on the node authorization. # Authorized node will performs the election algorithms # while non authorized will get them from the node movements and cross validation stamps @@ -287,7 +290,7 @@ defmodule UnirisCore.Mining.Replication do # Perform full verification of the transaction before chain storage including the transaction integrity, # the chain integrity and the cross validation stamps expectations - defp replicate_chain(tx) do + defp replicate_chain(tx = %Transaction{}) do context = %Context{previous_chain: chain} = Context.fetch_history(%Context{}, tx) if valid_transaction?(tx, context: context) do @@ -297,6 +300,7 @@ defmodule UnirisCore.Mining.Replication do Beacon.add_transaction(tx) end + do_additional_job(tx) :ok else Storage.write_ko_transaction(tx) @@ -304,6 +308,29 @@ defmodule UnirisCore.Mining.Replication do end end + defp do_additional_job(%Transaction{type: :code_proposal}) do + # Governance.run_continuous_integration(tx) + :ok + end + + defp do_additional_job(%Transaction{ + type: :code_approval, + data: %TransactionData{recipients: [proposal_address]} + }) do + approvals = Storage.get_pending_transaction_signatures(proposal_address) + ratio = length(approvals) / length(P2P.list_nodes()) + storage_nodes = Election.storage_nodes(proposal_address) |> Enum.map(& &1.first_public_key) + + if ratio >= Governance.code_approvals_threshold() and + Crypto.node_public_key(0) in storage_nodes do + Governance.deploy_testnet(proposal_address) + else + :ok + end + end + + defp do_additional_job(_), do: :ok + # Verify the transaction integrity before to store. This method is used # for the replication of transaction movements (recipients unspent outputs) and node movements (rewards) defp replicate_io(tx) do diff --git a/apps/uniris_core/lib/uniris_core/mining/supervisor.ex b/lib/uniris/mining/supervisor.ex similarity index 54% rename from apps/uniris_core/lib/uniris_core/mining/supervisor.ex rename to lib/uniris/mining/supervisor.ex index a85fa708f..71bd78e0c 100644 --- a/apps/uniris_core/lib/uniris_core/mining/supervisor.ex +++ b/lib/uniris/mining/supervisor.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.MiningSupervisor do +defmodule Uniris.MiningSupervisor do @moduledoc false use Supervisor @@ -9,8 +9,8 @@ defmodule UnirisCore.MiningSupervisor do def init(_opts) do children = [ - {Registry, keys: :unique, name: UnirisCore.MiningRegistry}, - {DynamicSupervisor, strategy: :one_for_one, name: UnirisCore.Mining.WorkerSupervisor} + {Registry, keys: :unique, name: Uniris.MiningRegistry}, + {DynamicSupervisor, strategy: :one_for_one, name: Uniris.Mining.WorkerSupervisor} ] Supervisor.init(children, strategy: :one_for_one) diff --git a/apps/uniris_core/lib/uniris_core/mining/worker.ex b/lib/uniris/mining/worker.ex similarity index 95% rename from apps/uniris_core/lib/uniris_core/mining/worker.ex rename to lib/uniris/mining/worker.ex index 2d2391b9e..0b1303269 100644 --- a/apps/uniris_core/lib/uniris_core/mining/worker.ex +++ b/lib/uniris/mining/worker.ex @@ -1,31 +1,31 @@ -defmodule UnirisCore.Mining.Worker do +defmodule Uniris.Mining.Worker do @moduledoc false @behaviour :gen_statem - alias UnirisCore.Beacon - alias UnirisCore.Crypto - alias UnirisCore.Election - - alias UnirisCore.Mining.BinarySequence - alias UnirisCore.Mining.Context - alias UnirisCore.Mining.MaliciousDetection - alias UnirisCore.Mining.Replication - alias UnirisCore.MiningRegistry - - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.AddContext - alias UnirisCore.P2P.Message.CrossValidate - alias UnirisCore.P2P.Message.CrossValidationDone - alias UnirisCore.P2P.Message.ReplicateTransaction - alias UnirisCore.P2P.Node - - alias UnirisCore.TaskSupervisor - - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Beacon + alias Uniris.Crypto + alias Uniris.Election + + alias Uniris.Mining.BinarySequence + alias Uniris.Mining.Context + alias Uniris.Mining.MaliciousDetection + alias Uniris.Mining.Replication + alias Uniris.MiningRegistry + + alias Uniris.P2P + alias Uniris.P2P.Message.AddContext + alias Uniris.P2P.Message.CrossValidate + alias Uniris.P2P.Message.CrossValidationDone + alias Uniris.P2P.Message.ReplicateTransaction + alias Uniris.P2P.Node + + alias Uniris.TaskSupervisor + + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations # TODO: Handle the restarting of the process when failed: # - retrieve last state diff --git a/apps/uniris_core/lib/uniris_core/p2p.ex b/lib/uniris/p2p.ex similarity index 92% rename from apps/uniris_core/lib/uniris_core/p2p.ex rename to lib/uniris/p2p.ex index db9a94379..1682678f2 100644 --- a/apps/uniris_core/lib/uniris_core/p2p.ex +++ b/lib/uniris/p2p.ex @@ -1,9 +1,9 @@ -defmodule UnirisCore.P2P do +defmodule Uniris.P2P do @moduledoc """ Provide a P2P layer for the Uniris network leveraging in memory Node and GeoPatch processes to provide functions to retrieve view of the nodes, to send messages or manage bootstraping seeds """ - alias UnirisCore.Crypto + alias Uniris.Crypto alias __MODULE__.BootstrapingSeeds alias __MODULE__.GeoPatch @@ -54,7 +54,7 @@ defmodule UnirisCore.P2P do @doc """ Get the node details from its public key or ip address """ - @spec node_info(UnirisCore.Crypto.key()) :: {:ok, Node.t()} | {:error, :not_found} + @spec node_info(Uniris.Crypto.key()) :: {:ok, Node.t()} | {:error, :not_found} def node_info(public_key) when is_binary(public_key) do case Registry.lookup(NodeRegistry, public_key) do [] -> @@ -89,7 +89,7 @@ defmodule UnirisCore.P2P do @doc """ Send a P2P message to a node. The public keys helps to identify which supervised connection to use """ - @spec send_message(UnirisCore.Crypto.key(), term()) :: any() + @spec send_message(Uniris.Crypto.key(), term()) :: any() def send_message(public_key, message) when is_binary(public_key) do Node.send_message(public_key, message) end @@ -111,7 +111,7 @@ defmodule UnirisCore.P2P do ## Examples iex> list_nodes = [%{network_patch: "AA0"}, %{network_patch: "F50"}, %{network_patch: "3A2"}] - iex> UnirisCore.P2P.nearest_nodes(list_nodes, "12F") + iex> Uniris.P2P.nearest_nodes(list_nodes, "12F") [ %{network_patch: "3A2"}, %{network_patch: "AA0"}, @@ -119,7 +119,7 @@ defmodule UnirisCore.P2P do ] iex> list_nodes = [%{network_patch: "AA0"}, %{network_patch: "F50"}, %{network_patch: "3A2"}] - iex> UnirisCore.P2P.nearest_nodes(list_nodes, "C3A") + iex> Uniris.P2P.nearest_nodes(list_nodes, "C3A") [ %{network_patch: "AA0"}, %{network_patch: "F50"}, diff --git a/apps/uniris_core/lib/uniris_core/p2p/bootstraping_seeds.ex b/lib/uniris/p2p/bootstraping_seeds.ex similarity index 92% rename from apps/uniris_core/lib/uniris_core/p2p/bootstraping_seeds.ex rename to lib/uniris/p2p/bootstraping_seeds.ex index 63668a875..5f4f321fe 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/bootstraping_seeds.ex +++ b/lib/uniris/p2p/bootstraping_seeds.ex @@ -1,8 +1,8 @@ -defmodule UnirisCore.P2P.BootstrapingSeeds do +defmodule Uniris.P2P.BootstrapingSeeds do @moduledoc false - alias UnirisCore.Crypto - alias UnirisCore.P2P.Node + alias Uniris.Crypto + alias Uniris.P2P.Node use GenServer @@ -17,7 +17,7 @@ defmodule UnirisCore.P2P.BootstrapingSeeds do def update(seeds), do: GenServer.call(__MODULE__, {:new_seeds, seeds}) def init(opts) do - case Application.get_env(:uniris_core, __MODULE__)[:seeds] do + case Application.get_env(:uniris, __MODULE__)[:seeds] do seeds_str when is_binary(seeds_str) -> seeds = extract_seeds(seeds_str) {:ok, %{seeds: seeds, file: ""}} diff --git a/apps/uniris_core/lib/uniris_core/p2p/node/client.ex b/lib/uniris/p2p/client.ex similarity index 67% rename from apps/uniris_core/lib/uniris_core/p2p/node/client.ex rename to lib/uniris/p2p/client.ex index 7590f6532..cb83b9113 100755 --- a/apps/uniris_core/lib/uniris_core/p2p/node/client.ex +++ b/lib/uniris/p2p/client.ex @@ -1,8 +1,8 @@ -defmodule UnirisCore.P2P.NodeClient do +defmodule Uniris.P2P.Client do @moduledoc false - @behaviour UnirisCore.P2P.NodeClientImpl - alias UnirisCore.P2P.Message + @behaviour Uniris.P2P.ClientImpl + alias Uniris.P2P.Message @impl true @spec send_message( @@ -16,8 +16,8 @@ defmodule UnirisCore.P2P.NodeClient do end defp impl do - :uniris_core - |> Application.get_env(UnirisCore.P2P) + :uniris + |> Application.get_env(Uniris.P2P) |> Keyword.fetch!(:node_client) end end diff --git a/apps/uniris_core/lib/uniris_core/p2p/node/client/impl.ex b/lib/uniris/p2p/client/impl.ex similarity index 78% rename from apps/uniris_core/lib/uniris_core/p2p/node/client/impl.ex rename to lib/uniris/p2p/client/impl.ex index 625e8e6c5..116555f51 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/node/client/impl.ex +++ b/lib/uniris/p2p/client/impl.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.NodeClientImpl do +defmodule Uniris.P2P.ClientImpl do @moduledoc false @callback send_message(ip :: :inet.ip_address(), port :: :inet.port_number(), message :: term()) :: diff --git a/apps/uniris_core/lib/uniris_core/p2p/node/client/tcp_impl.ex b/lib/uniris/p2p/client/tcp_impl.ex similarity index 84% rename from apps/uniris_core/lib/uniris_core/p2p/node/client/tcp_impl.ex rename to lib/uniris/p2p/client/tcp_impl.ex index db844eb88..16deafce7 100755 --- a/apps/uniris_core/lib/uniris_core/p2p/node/client/tcp_impl.ex +++ b/lib/uniris/p2p/client/tcp_impl.ex @@ -1,8 +1,8 @@ -defmodule UnirisCore.P2P.NodeTCPClient do +defmodule Uniris.P2P.TCPClient do @moduledoc false - @behaviour UnirisCore.P2P.NodeClientImpl - alias UnirisCore.P2P.Message + @behaviour Uniris.P2P.ClientImpl + alias Uniris.P2P.Message @tcp_options [:binary, packet: 4, active: false] diff --git a/apps/uniris_core/lib/uniris_core/p2p/server.ex b/lib/uniris/p2p/endpoint.ex similarity index 76% rename from apps/uniris_core/lib/uniris_core/p2p/server.ex rename to lib/uniris/p2p/endpoint.ex index abd779fa8..10b804131 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/server.ex +++ b/lib/uniris/p2p/endpoint.ex @@ -1,59 +1,59 @@ -defmodule UnirisCore.P2PServer do +defmodule Uniris.P2P.Endpoint do @moduledoc false require Logger use GenServer - alias UnirisCore.Beacon - alias UnirisCore.Crypto - alias UnirisCore.Election - - alias UnirisCore.P2P - alias UnirisCore.P2P.Message - alias UnirisCore.P2P.Message.AcknowledgeStorage - alias UnirisCore.P2P.Message.AddContext - alias UnirisCore.P2P.Message.AddNodeInfo - alias UnirisCore.P2P.Message.Balance - alias UnirisCore.P2P.Message.BeaconSlotList - alias UnirisCore.P2P.Message.BootstrappingNodes - alias UnirisCore.P2P.Message.CrossValidate - alias UnirisCore.P2P.Message.CrossValidationDone - alias UnirisCore.P2P.Message.EncryptedStorageNonce - alias UnirisCore.P2P.Message.GetBalance - alias UnirisCore.P2P.Message.GetBeaconSlots - alias UnirisCore.P2P.Message.GetBootstrappingNodes - alias UnirisCore.P2P.Message.GetLastTransaction - alias UnirisCore.P2P.Message.GetProofOfIntegrity - alias UnirisCore.P2P.Message.GetStorageNonce - alias UnirisCore.P2P.Message.GetTransaction - alias UnirisCore.P2P.Message.GetTransactionChain - alias UnirisCore.P2P.Message.GetTransactionChainLength - alias UnirisCore.P2P.Message.GetTransactionHistory - alias UnirisCore.P2P.Message.GetTransactionInputs - alias UnirisCore.P2P.Message.GetUnspentOutputs - alias UnirisCore.P2P.Message.ListNodes - alias UnirisCore.P2P.Message.NewTransaction - alias UnirisCore.P2P.Message.NodeList - alias UnirisCore.P2P.Message.NotFound - alias UnirisCore.P2P.Message.Ok - alias UnirisCore.P2P.Message.ProofOfIntegrity - alias UnirisCore.P2P.Message.ReplicateTransaction - alias UnirisCore.P2P.Message.StartMining - alias UnirisCore.P2P.Message.TransactionChainLength - alias UnirisCore.P2P.Message.TransactionHistory - alias UnirisCore.P2P.Message.TransactionInputList - alias UnirisCore.P2P.Message.TransactionList - alias UnirisCore.P2P.Message.UnspentOutputList - - alias UnirisCore.PubSub - - alias UnirisCore.Mining - - alias UnirisCore.Storage - alias UnirisCore.TaskSupervisor - - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp + alias Uniris.Beacon + alias Uniris.Crypto + alias Uniris.Election + + alias Uniris.P2P + alias Uniris.P2P.Message + alias Uniris.P2P.Message.AcknowledgeStorage + alias Uniris.P2P.Message.AddContext + alias Uniris.P2P.Message.AddNodeInfo + alias Uniris.P2P.Message.Balance + alias Uniris.P2P.Message.BeaconSlotList + alias Uniris.P2P.Message.BootstrappingNodes + alias Uniris.P2P.Message.CrossValidate + alias Uniris.P2P.Message.CrossValidationDone + alias Uniris.P2P.Message.EncryptedStorageNonce + alias Uniris.P2P.Message.GetBalance + alias Uniris.P2P.Message.GetBeaconSlots + alias Uniris.P2P.Message.GetBootstrappingNodes + alias Uniris.P2P.Message.GetLastTransaction + alias Uniris.P2P.Message.GetProofOfIntegrity + alias Uniris.P2P.Message.GetStorageNonce + alias Uniris.P2P.Message.GetTransaction + alias Uniris.P2P.Message.GetTransactionChain + alias Uniris.P2P.Message.GetTransactionChainLength + alias Uniris.P2P.Message.GetTransactionHistory + alias Uniris.P2P.Message.GetTransactionInputs + alias Uniris.P2P.Message.GetUnspentOutputs + alias Uniris.P2P.Message.ListNodes + alias Uniris.P2P.Message.NewTransaction + alias Uniris.P2P.Message.NodeList + alias Uniris.P2P.Message.NotFound + alias Uniris.P2P.Message.Ok + alias Uniris.P2P.Message.ProofOfIntegrity + alias Uniris.P2P.Message.ReplicateTransaction + alias Uniris.P2P.Message.StartMining + alias Uniris.P2P.Message.TransactionChainLength + alias Uniris.P2P.Message.TransactionHistory + alias Uniris.P2P.Message.TransactionInputList + alias Uniris.P2P.Message.TransactionList + alias Uniris.P2P.Message.UnspentOutputList + + alias Uniris.PubSub + + alias Uniris.Mining + + alias Uniris.Storage + alias Uniris.TaskSupervisor + + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp require Logger diff --git a/apps/uniris_core/lib/uniris_core/p2p/geo_patch.ex b/lib/uniris/p2p/geo_patch.ex similarity index 95% rename from apps/uniris_core/lib/uniris_core/p2p/geo_patch.ex rename to lib/uniris/p2p/geo_patch.ex index 0871ccd76..14f2ea996 100755 --- a/apps/uniris_core/lib/uniris_core/p2p/geo_patch.ex +++ b/lib/uniris/p2p/geo_patch.ex @@ -1,8 +1,10 @@ -defmodule UnirisCore.P2P.GeoPatch do +defmodule Uniris.P2P.GeoPatch do @moduledoc false use GenServer + @ip_db_file Application.app_dir(:uniris, "/priv/p2p/IP2LOCATION-LITE-DB5.BIN") + def start_link(_) do GenServer.start_link(__MODULE__, [], name: __MODULE__) end @@ -12,7 +14,7 @@ defmodule UnirisCore.P2P.GeoPatch do end def handle_continue(:load_geoip_lookup, state) do - :ip2location.new(Application.app_dir(:uniris_core, "/priv/p2p/IP2LOCATION-LITE-DB5.BIN")) + :ip2location.new(@ip_db_file) {:noreply, state} end diff --git a/apps/uniris_core/lib/uniris_core/p2p/message.ex b/lib/uniris/p2p/message.ex similarity index 96% rename from apps/uniris_core/lib/uniris_core/p2p/message.ex rename to lib/uniris/p2p/message.ex index 847c19e4c..4877bb003 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message.ex +++ b/lib/uniris/p2p/message.ex @@ -1,12 +1,12 @@ -defmodule UnirisCore.P2P.Message do +defmodule Uniris.P2P.Message do @moduledoc """ Provide functions to encode and decode P2P messages using a custom binary protocol """ - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.BeaconSlot - alias UnirisCore.BeaconSlot.NodeInfo + alias Uniris.BeaconSlot + alias Uniris.BeaconSlot.NodeInfo alias __MODULE__.AcknowledgeStorage alias __MODULE__.AddContext @@ -43,15 +43,15 @@ defmodule UnirisCore.P2P.Message do alias __MODULE__.TransactionList alias __MODULE__.UnspentOutputList - alias UnirisCore.Mining.Context + alias Uniris.Mining.Context - alias UnirisCore.P2P.Node + alias Uniris.P2P.Node - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionInput + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionInput @type t() :: GetBootstrappingNodes.t() @@ -93,10 +93,10 @@ defmodule UnirisCore.P2P.Message do ## Examples - iex> UnirisCore.P2P.Message.encode(%Ok{}) + iex> Uniris.P2P.Message.encode(%Ok{}) <<255>> - iex> UnirisCore.P2P.Message.encode(%UnirisCore.P2P.Message.GetTransaction{ + iex> Uniris.P2P.Message.encode(%Uniris.P2P.Message.GetTransaction{ ...> address: <<0, 40, 71, 99, 6, 218, 243, 156, 193, 63, 176, 168, 22, 226, 31, 170, 119, 122, ...> 13, 188, 75, 49, 171, 219, 222, 133, 86, 132, 188, 206, 233, 66, 7>> ...> }) @@ -747,10 +747,10 @@ defmodule UnirisCore.P2P.Message do ## Examples - iex> UnirisCore.P2P.Message.wrap_binary(<<1::1>>) + iex> Uniris.P2P.Message.wrap_binary(<<1::1>>) <<1::1, 0::1, 0::1, 0::1, 0::1, 0::1, 0::1, 0::1>> - iex> UnirisCore.P2P.Message.wrap_binary(<<33, 50, 10>>) + iex> Uniris.P2P.Message.wrap_binary(<<33, 50, 10>>) <<33, 50, 10>> """ @spec wrap_binary(bitstring()) :: binary() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/acknowledge_storage.ex b/lib/uniris/p2p/message/acknowledge_storage.ex similarity index 78% rename from apps/uniris_core/lib/uniris_core/p2p/message/acknowledge_storage.ex rename to lib/uniris/p2p/message/acknowledge_storage.ex index 3ba235c07..4331bb2ed 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/acknowledge_storage.ex +++ b/lib/uniris/p2p/message/acknowledge_storage.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.AcknowledgeStorage do +defmodule Uniris.P2P.Message.AcknowledgeStorage do @moduledoc """ Represents a message to notify the acknowledgment of the storage of a transaction @@ -7,7 +7,7 @@ defmodule UnirisCore.P2P.Message.AcknowledgeStorage do @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/add_context.ex b/lib/uniris/p2p/message/add_context.ex similarity index 81% rename from apps/uniris_core/lib/uniris_core/p2p/message/add_context.ex rename to lib/uniris/p2p/message/add_context.ex index 4a1a891f9..f8384030e 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/add_context.ex +++ b/lib/uniris/p2p/message/add_context.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.AddContext do +defmodule Uniris.P2P.Message.AddContext do @moduledoc """ Represents a message to request the add of a context retrieval to the coordinator @@ -7,8 +7,8 @@ defmodule UnirisCore.P2P.Message.AddContext do @enforce_keys [:address, :validation_node_public_key, :context] defstruct [:address, :validation_node_public_key, :context] - alias UnirisCore.Crypto - alias UnirisCore.Mining.Context + alias Uniris.Crypto + alias Uniris.Mining.Context @type t :: %__MODULE__{ address: Crypto.versioned_hash(), diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/add_node_info.ex b/lib/uniris/p2p/message/add_node_info.ex similarity index 81% rename from apps/uniris_core/lib/uniris_core/p2p/message/add_node_info.ex rename to lib/uniris/p2p/message/add_node_info.ex index 6f628995c..a53e02d23 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/add_node_info.ex +++ b/lib/uniris/p2p/message/add_node_info.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.AddNodeInfo do +defmodule Uniris.P2P.Message.AddNodeInfo do @moduledoc """ Represents a message to request to add an information in the beacon chain regarding a node @@ -7,7 +7,7 @@ defmodule UnirisCore.P2P.Message.AddNodeInfo do @enforce_keys [:subset, :node_info] defstruct [:subset, :node_info] - alias UnirisCore.BeaconSlot.NodeInfo + alias Uniris.BeaconSlot.NodeInfo @type t :: %__MODULE__{ subset: binary(), diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/balance.ex b/lib/uniris/p2p/message/balance.ex similarity index 78% rename from apps/uniris_core/lib/uniris_core/p2p/message/balance.ex rename to lib/uniris/p2p/message/balance.ex index 8b2fcf175..bbf376f5c 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/balance.ex +++ b/lib/uniris/p2p/message/balance.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.Balance do +defmodule Uniris.P2P.Message.Balance do @moduledoc """ Represents a message the balance of a transaction """ diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/beacon_slot_list.ex b/lib/uniris/p2p/message/beacon_slot_list.ex similarity index 74% rename from apps/uniris_core/lib/uniris_core/p2p/message/beacon_slot_list.ex rename to lib/uniris/p2p/message/beacon_slot_list.ex index 47120c942..35aa8e3fb 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/beacon_slot_list.ex +++ b/lib/uniris/p2p/message/beacon_slot_list.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.BeaconSlotList do +defmodule Uniris.P2P.Message.BeaconSlotList do @moduledoc """ Represents a message with a list of beacon slots @@ -6,7 +6,7 @@ defmodule UnirisCore.P2P.Message.BeaconSlotList do """ defstruct slots: [] - alias UnirisCore.BeaconSlot + alias Uniris.BeaconSlot @type t :: %__MODULE__{ slots: list(BeaconSlot.t()) diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/bootstraping_nodes.ex b/lib/uniris/p2p/message/bootstraping_nodes.ex similarity index 78% rename from apps/uniris_core/lib/uniris_core/p2p/message/bootstraping_nodes.ex rename to lib/uniris/p2p/message/bootstraping_nodes.ex index be680370b..4098340af 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/bootstraping_nodes.ex +++ b/lib/uniris/p2p/message/bootstraping_nodes.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.BootstrappingNodes do +defmodule Uniris.P2P.Message.BootstrappingNodes do @moduledoc """ Represents a message with the list of closest bootstraping nodes. @@ -6,7 +6,7 @@ defmodule UnirisCore.P2P.Message.BootstrappingNodes do """ defstruct new_seeds: [], closest_nodes: [] - alias UnirisCore.P2P.Node + alias Uniris.P2P.Node @type t() :: %__MODULE__{ new_seeds: list(Node.t()), diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/cross_validate.ex b/lib/uniris/p2p/message/cross_validate.ex similarity index 76% rename from apps/uniris_core/lib/uniris_core/p2p/message/cross_validate.ex rename to lib/uniris/p2p/message/cross_validate.ex index 01efad81c..e886dcb75 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/cross_validate.ex +++ b/lib/uniris/p2p/message/cross_validate.ex @@ -1,12 +1,12 @@ -defmodule UnirisCore.P2P.Message.CrossValidate do +defmodule Uniris.P2P.Message.CrossValidate do @moduledoc """ Represents a message to request the cross validation of a validation stamp """ @enforce_keys [:address, :validation_stamp, :replication_tree] defstruct [:address, :validation_stamp, :replication_tree] - alias UnirisCore.Crypto - alias UnirisCore.Transaction.ValidationStamp + alias Uniris.Crypto + alias Uniris.Transaction.ValidationStamp @type t :: %__MODULE__{ address: Crypto.versioned_hash(), diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/cross_validation_done.ex b/lib/uniris/p2p/message/cross_validation_done.ex similarity index 76% rename from apps/uniris_core/lib/uniris_core/p2p/message/cross_validation_done.ex rename to lib/uniris/p2p/message/cross_validation_done.ex index 918e093e3..28de18548 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/cross_validation_done.ex +++ b/lib/uniris/p2p/message/cross_validation_done.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.CrossValidationDone do +defmodule Uniris.P2P.Message.CrossValidationDone do @moduledoc """ Represents a message to notify the end of the cross validation for a given transaction address @@ -7,8 +7,8 @@ defmodule UnirisCore.P2P.Message.CrossValidationDone do @enforce_keys [:address, :cross_validation_stamp] defstruct [:address, :cross_validation_stamp] - alias UnirisCore.Crypto - alias UnirisCore.Transaction.CrossValidationStamp + alias Uniris.Crypto + alias Uniris.Transaction.CrossValidationStamp @type t :: %__MODULE__{ address: Crypto.versioned_hash(), diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/encrypted_storage_nonce.ex b/lib/uniris/p2p/message/encrypted_storage_nonce.ex similarity index 83% rename from apps/uniris_core/lib/uniris_core/p2p/message/encrypted_storage_nonce.ex rename to lib/uniris/p2p/message/encrypted_storage_nonce.ex index fdbeb522a..6076a461c 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/encrypted_storage_nonce.ex +++ b/lib/uniris/p2p/message/encrypted_storage_nonce.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.EncryptedStorageNonce do +defmodule Uniris.P2P.Message.EncryptedStorageNonce do @moduledoc """ Represents a message with the requested storage nonce encrypted with the given public key diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_balance.ex b/lib/uniris/p2p/message/get_balance.ex similarity index 75% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_balance.ex rename to lib/uniris/p2p/message/get_balance.ex index d4877bed5..50375ccd3 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_balance.ex +++ b/lib/uniris/p2p/message/get_balance.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.GetBalance do +defmodule Uniris.P2P.Message.GetBalance do @moduledoc """ Represents a message to request the balance of a transaction """ @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_beacon_slots.ex b/lib/uniris/p2p/message/get_beacon_slots.ex similarity index 87% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_beacon_slots.ex rename to lib/uniris/p2p/message/get_beacon_slots.ex index 4e815dc50..2b8513a8a 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_beacon_slots.ex +++ b/lib/uniris/p2p/message/get_beacon_slots.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.GetBeaconSlots do +defmodule Uniris.P2P.Message.GetBeaconSlots do @moduledoc """ Represents a message to request the list of beacon slots for a list of subsets and times diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_bootstraping_nodes.ex b/lib/uniris/p2p/message/get_bootstraping_nodes.ex similarity index 84% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_bootstraping_nodes.ex rename to lib/uniris/p2p/message/get_bootstraping_nodes.ex index 204187cce..f0d829e08 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_bootstraping_nodes.ex +++ b/lib/uniris/p2p/message/get_bootstraping_nodes.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.GetBootstrappingNodes do +defmodule Uniris.P2P.Message.GetBootstrappingNodes do @moduledoc """ Represents a message to list of the new bootstraping nodes for a network patch. diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_last_transaction.ex b/lib/uniris/p2p/message/get_last_transaction.ex similarity index 73% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_last_transaction.ex rename to lib/uniris/p2p/message/get_last_transaction.ex index a71733f30..4b9ec1cd8 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_last_transaction.ex +++ b/lib/uniris/p2p/message/get_last_transaction.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.GetLastTransaction do +defmodule Uniris.P2P.Message.GetLastTransaction do @moduledoc """ Represents a message to request the last transaction of a chain """ @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_proof_of_integrity.ex b/lib/uniris/p2p/message/get_proof_of_integrity.ex similarity index 80% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_proof_of_integrity.ex rename to lib/uniris/p2p/message/get_proof_of_integrity.ex index a508d2320..b2212cf29 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_proof_of_integrity.ex +++ b/lib/uniris/p2p/message/get_proof_of_integrity.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.GetProofOfIntegrity do +defmodule Uniris.P2P.Message.GetProofOfIntegrity do @moduledoc """ Represents a message to request the proof of integrity for a transaction @@ -7,7 +7,7 @@ defmodule UnirisCore.P2P.Message.GetProofOfIntegrity do @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_storage_nonce.ex b/lib/uniris/p2p/message/get_storage_nonce.ex similarity index 76% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_storage_nonce.ex rename to lib/uniris/p2p/message/get_storage_nonce.ex index 16bade034..7afe9d006 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_storage_nonce.ex +++ b/lib/uniris/p2p/message/get_storage_nonce.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.P2P.Message.GetStorageNonce do +defmodule Uniris.P2P.Message.GetStorageNonce do @moduledoc """ Represents a message to request the storage nonce This message is used during the node bootstraping """ - alias UnirisCore.Crypto + alias Uniris.Crypto @enforce_keys [:public_key] defstruct [:public_key] diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction.ex b/lib/uniris/p2p/message/get_transaction.ex similarity index 72% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_transaction.ex rename to lib/uniris/p2p/message/get_transaction.ex index cb0154ce9..2348d5930 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction.ex +++ b/lib/uniris/p2p/message/get_transaction.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.GetTransaction do +defmodule Uniris.P2P.Message.GetTransaction do @moduledoc """ Represents a message to request a transaction """ @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_chain.ex b/lib/uniris/p2p/message/get_transaction_chain.ex similarity index 72% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_chain.ex rename to lib/uniris/p2p/message/get_transaction_chain.ex index b121c90f1..c99898ba9 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_chain.ex +++ b/lib/uniris/p2p/message/get_transaction_chain.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.GetTransactionChain do +defmodule Uniris.P2P.Message.GetTransactionChain do @moduledoc """ Represents a message to request an entire transaction chain """ @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_chain_length.ex b/lib/uniris/p2p/message/get_transaction_chain_length.ex similarity index 74% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_chain_length.ex rename to lib/uniris/p2p/message/get_transaction_chain_length.ex index 8ff6ae287..1c74a9323 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_chain_length.ex +++ b/lib/uniris/p2p/message/get_transaction_chain_length.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.GetTransactionChainLength do +defmodule Uniris.P2P.Message.GetTransactionChainLength do @moduledoc """ Represents a message to request the size of the transaction chain (number of transactions) """ @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_history.ex b/lib/uniris/p2p/message/get_transaction_history.ex similarity index 81% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_history.ex rename to lib/uniris/p2p/message/get_transaction_history.ex index 5ee3d9b21..09ac46a84 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_history.ex +++ b/lib/uniris/p2p/message/get_transaction_history.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.GetTransactionHistory do +defmodule Uniris.P2P.Message.GetTransactionHistory do @moduledoc """ Represents a message to request the transaction history @@ -8,7 +8,7 @@ defmodule UnirisCore.P2P.Message.GetTransactionHistory do @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_inputs.ex b/lib/uniris/p2p/message/get_transaction_inputs.ex similarity index 74% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_inputs.ex rename to lib/uniris/p2p/message/get_transaction_inputs.ex index 1621ae0ff..8306b11d1 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_transaction_inputs.ex +++ b/lib/uniris/p2p/message/get_transaction_inputs.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.GetTransactionInputs do +defmodule Uniris.P2P.Message.GetTransactionInputs do @moduledoc """ Represents a message with to request the inputs (spent or unspents) from a transaction """ @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/get_unspent_outputs.ex b/lib/uniris/p2p/message/get_unspent_outputs.ex similarity index 74% rename from apps/uniris_core/lib/uniris_core/p2p/message/get_unspent_outputs.ex rename to lib/uniris/p2p/message/get_unspent_outputs.ex index 8a97d1820..19c75100c 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/get_unspent_outputs.ex +++ b/lib/uniris/p2p/message/get_unspent_outputs.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.GetUnspentOutputs do +defmodule Uniris.P2P.Message.GetUnspentOutputs do @moduledoc """ Represents a message to request the list of unspent outputs from a transaction """ @enforce_keys [:address] defstruct [:address] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ address: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/list_nodes.ex b/lib/uniris/p2p/message/list_nodes.ex similarity index 66% rename from apps/uniris_core/lib/uniris_core/p2p/message/list_nodes.ex rename to lib/uniris/p2p/message/list_nodes.ex index 682c56978..a78f5d25a 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/list_nodes.ex +++ b/lib/uniris/p2p/message/list_nodes.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.ListNodes do +defmodule Uniris.P2P.Message.ListNodes do @moduledoc """ Represents a message to fetch the list of nodes """ diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/new_transaction.ex b/lib/uniris/p2p/message/new_transaction.ex similarity index 76% rename from apps/uniris_core/lib/uniris_core/p2p/message/new_transaction.ex rename to lib/uniris/p2p/message/new_transaction.ex index 9eb3e296a..fdd12f174 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/new_transaction.ex +++ b/lib/uniris/p2p/message/new_transaction.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.NewTransaction do +defmodule Uniris.P2P.Message.NewTransaction do @moduledoc """ Represents a message to request the process of a new transaction @@ -6,7 +6,7 @@ defmodule UnirisCore.P2P.Message.NewTransaction do """ defstruct [:transaction] - alias UnirisCore.Transaction + alias Uniris.Transaction @type t :: %__MODULE__{ transaction: Transaction.t() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/node_list.ex b/lib/uniris/p2p/message/node_list.ex similarity index 68% rename from apps/uniris_core/lib/uniris_core/p2p/message/node_list.ex rename to lib/uniris/p2p/message/node_list.ex index 0732df7c5..ec1bb2bc0 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/node_list.ex +++ b/lib/uniris/p2p/message/node_list.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.P2P.Message.NodeList do +defmodule Uniris.P2P.Message.NodeList do @moduledoc """ Represents a message a list of nodes """ defstruct nodes: [] - alias UnirisCore.P2P.Node + alias Uniris.P2P.Node @type t :: %__MODULE__{ nodes: list(Node.t()) diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/not_found.ex b/lib/uniris/p2p/message/not_found.ex similarity index 68% rename from apps/uniris_core/lib/uniris_core/p2p/message/not_found.ex rename to lib/uniris/p2p/message/not_found.ex index b11909b75..a3c1d1335 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/not_found.ex +++ b/lib/uniris/p2p/message/not_found.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.NotFound do +defmodule Uniris.P2P.Message.NotFound do @moduledoc """ Represents a message when the transaction is not found """ diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/ok.ex b/lib/uniris/p2p/message/ok.ex similarity index 63% rename from apps/uniris_core/lib/uniris_core/p2p/message/ok.ex rename to lib/uniris/p2p/message/ok.ex index 66adb204b..cf6cd1bdc 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/ok.ex +++ b/lib/uniris/p2p/message/ok.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.Ok do +defmodule Uniris.P2P.Message.Ok do @moduledoc """ Represents an OK message """ diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/proof_of_integrity.ex b/lib/uniris/p2p/message/proof_of_integrity.ex similarity index 74% rename from apps/uniris_core/lib/uniris_core/p2p/message/proof_of_integrity.ex rename to lib/uniris/p2p/message/proof_of_integrity.ex index 30d352c06..a201e1eab 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/proof_of_integrity.ex +++ b/lib/uniris/p2p/message/proof_of_integrity.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.ProofOfIntegrity do +defmodule Uniris.P2P.Message.ProofOfIntegrity do @moduledoc """ Represents a message with the proof of integrity of a transaction chain """ @enforce_keys [:digest] defstruct [:digest] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ digest: Crypto.versioned_hash() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/replicate_transaction.ex b/lib/uniris/p2p/message/replicate_transaction.ex similarity index 72% rename from apps/uniris_core/lib/uniris_core/p2p/message/replicate_transaction.ex rename to lib/uniris/p2p/message/replicate_transaction.ex index 9108ea72c..b0627b1f1 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/replicate_transaction.ex +++ b/lib/uniris/p2p/message/replicate_transaction.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.ReplicateTransaction do +defmodule Uniris.P2P.Message.ReplicateTransaction do @moduledoc """ Represents a message to initiate the replication of the transaction """ @enforce_keys [:transaction] defstruct [:transaction] - alias UnirisCore.Transaction + alias Uniris.Transaction @type t :: %__MODULE__{ transaction: Transaction.t() diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/start_mining.ex b/lib/uniris/p2p/message/start_mining.ex similarity index 83% rename from apps/uniris_core/lib/uniris_core/p2p/message/start_mining.ex rename to lib/uniris/p2p/message/start_mining.ex index 840327fb8..b7870b8da 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/start_mining.ex +++ b/lib/uniris/p2p/message/start_mining.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.StartMining do +defmodule Uniris.P2P.Message.StartMining do @moduledoc """ Represents message to start the transaction mining. @@ -7,8 +7,8 @@ defmodule UnirisCore.P2P.Message.StartMining do @enforce_keys [:transaction, :welcome_node_public_key, :validation_node_public_keys] defstruct [:transaction, :welcome_node_public_key, :validation_node_public_keys] - alias UnirisCore.Crypto - alias UnirisCore.Transaction + alias Uniris.Crypto + alias Uniris.Transaction @type t :: %__MODULE__{ transaction: Transaction.t(), diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/transaction_chain_length.ex b/lib/uniris/p2p/message/transaction_chain_length.ex similarity index 76% rename from apps/uniris_core/lib/uniris_core/p2p/message/transaction_chain_length.ex rename to lib/uniris/p2p/message/transaction_chain_length.ex index a8c76059f..da64ae051 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/transaction_chain_length.ex +++ b/lib/uniris/p2p/message/transaction_chain_length.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Message.TransactionChainLength do +defmodule Uniris.P2P.Message.TransactionChainLength do @moduledoc """ Represents a message with the number of transactions from a chain """ diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/transaction_history.ex b/lib/uniris/p2p/message/transaction_history.ex similarity index 66% rename from apps/uniris_core/lib/uniris_core/p2p/message/transaction_history.ex rename to lib/uniris/p2p/message/transaction_history.ex index 5317de455..4e7cc10c2 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/transaction_history.ex +++ b/lib/uniris/p2p/message/transaction_history.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.P2P.Message.TransactionHistory do +defmodule Uniris.P2P.Message.TransactionHistory do @moduledoc """ Represents a message with the result from the transaction context retrieval to send to the coordinator """ defstruct transaction_chain: [], unspent_outputs: [] - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput @type t :: %__MODULE__{ transaction_chain: list(Transaction.t()), diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/transaction_input_list.ex b/lib/uniris/p2p/message/transaction_input_list.ex similarity index 56% rename from apps/uniris_core/lib/uniris_core/p2p/message/transaction_input_list.ex rename to lib/uniris/p2p/message/transaction_input_list.ex index 9417df61f..e1616747e 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/transaction_input_list.ex +++ b/lib/uniris/p2p/message/transaction_input_list.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.P2P.Message.TransactionInputList do +defmodule Uniris.P2P.Message.TransactionInputList do @moduledoc """ Represents a message with a list of transaction inputs """ defstruct [:inputs] @type t() :: %__MODULE__{ - inputs: list(UnirisCore.TransactionInput.t()) + inputs: list(Uniris.TransactionInput.t()) } end diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/transaction_list.ex b/lib/uniris/p2p/message/transaction_list.ex similarity index 69% rename from apps/uniris_core/lib/uniris_core/p2p/message/transaction_list.ex rename to lib/uniris/p2p/message/transaction_list.ex index ffa945c00..f479ba4a1 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/transaction_list.ex +++ b/lib/uniris/p2p/message/transaction_list.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.P2P.Message.TransactionList do +defmodule Uniris.P2P.Message.TransactionList do @moduledoc """ Represents a message with a list of transactions """ defstruct transactions: [] - alias UnirisCore.Transaction + alias Uniris.Transaction @type t :: %__MODULE__{ transactions: list(Transaction.t()) diff --git a/apps/uniris_core/lib/uniris_core/p2p/message/unspent_output_list.ex b/lib/uniris/p2p/message/unspent_output_list.ex similarity index 60% rename from apps/uniris_core/lib/uniris_core/p2p/message/unspent_output_list.ex rename to lib/uniris/p2p/message/unspent_output_list.ex index 2fb9a48d8..ed767d892 100644 --- a/apps/uniris_core/lib/uniris_core/p2p/message/unspent_output_list.ex +++ b/lib/uniris/p2p/message/unspent_output_list.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.P2P.Message.UnspentOutputList do +defmodule Uniris.P2P.Message.UnspentOutputList do @moduledoc """ Represents a message with a list of unspent outputs """ defstruct unspent_outputs: [] - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput @type t :: %__MODULE__{ unspent_outputs: list(UnspentOutput.t()) diff --git a/apps/uniris_core/lib/uniris_core/p2p/node.ex b/lib/uniris/p2p/node.ex similarity index 91% rename from apps/uniris_core/lib/uniris_core/p2p/node.ex rename to lib/uniris/p2p/node.ex index 3b8ab620d..1c9ad483f 100755 --- a/apps/uniris_core/lib/uniris_core/p2p/node.ex +++ b/lib/uniris/p2p/node.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2P.Node do +defmodule Uniris.P2P.Node do @moduledoc """ Describe an Uniris node and holding its own process to enable fast lookup and update. @@ -15,15 +15,15 @@ defmodule UnirisCore.P2P.Node do require Logger - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.P2P.GeoPatch - alias UnirisCore.P2P.NodeClient - alias UnirisCore.P2P.NodeRegistry + alias Uniris.P2P.Client + alias Uniris.P2P.GeoPatch + alias Uniris.P2P.NodeRegistry - alias UnirisCore.PubSub + alias Uniris.PubSub - alias UnirisCore.Utils + alias Uniris.Utils @enforce_keys [ :first_public_key, @@ -49,8 +49,8 @@ defmodule UnirisCore.P2P.Node do ] @type t() :: %__MODULE__{ - first_public_key: UnirisCore.Crypto.key(), - last_public_key: UnirisCore.Crypto.key(), + first_public_key: Uniris.Crypto.key(), + last_public_key: Uniris.Crypto.key(), ip: :inet.ip_address(), port: :inet.port_number(), geo_patch: binary(), @@ -165,7 +165,7 @@ defmodule UnirisCore.P2P.Node do end def handle_call({:send_message, message}, from, state = %{ip: ip, port: port}) do - %Task{ref: ref} = Task.async(fn -> NodeClient.send_message(ip, port, message) end) + %Task{ref: ref} = Task.async(fn -> Client.send_message(ip, port, message) end) request = %{} |> Map.put(ref, from) {:noreply, Map.update(state, :requests, request, &Map.put(&1, ref, from))} end @@ -244,7 +244,7 @@ defmodule UnirisCore.P2P.Node do @doc """ Get the details of a node """ - @spec details(node_public_key :: UnirisCore.Crypto.key()) :: __MODULE__.t() + @spec details(node_public_key :: Uniris.Crypto.key()) :: __MODULE__.t() def details(node_public_key) when is_binary(node_public_key) do GenServer.call(via_tuple(node_public_key), :details) end @@ -264,8 +264,8 @@ defmodule UnirisCore.P2P.Node do A geo IP lookup will be perform to change the GeoPatch """ @spec update_basics( - node_first_public_key :: UnirisCore.Crypto.key(), - node_last_public_key :: UnirisCore.Crypto.key(), + node_first_public_key :: Uniris.Crypto.key(), + node_last_public_key :: Uniris.Crypto.key(), node_ip :: :inet.ip_address(), node_port :: :inet.port_number() ) :: :ok @@ -276,7 +276,7 @@ defmodule UnirisCore.P2P.Node do @doc """ Mark the node as available """ - @spec available(UnirisCore.Crypto.key()) :: :ok + @spec available(Uniris.Crypto.key()) :: :ok def available(public_key) when is_binary(public_key) do GenServer.call(via_tuple(public_key), :available) end @@ -284,7 +284,7 @@ defmodule UnirisCore.P2P.Node do @doc """ Mark the node as unavailable """ - @spec unavailable(UnirisCore.Crypto.key()) :: :ok + @spec unavailable(Uniris.Crypto.key()) :: :ok def unavailable(public_key) when is_binary(public_key) do GenServer.call(via_tuple(public_key), :unavailable) end @@ -292,7 +292,7 @@ defmodule UnirisCore.P2P.Node do @doc """ Update the network patch for a given node """ - @spec update_network_patch(node_public_key :: UnirisCore.Crypto.key(), geo_patch :: binary()) :: + @spec update_network_patch(node_public_key :: Uniris.Crypto.key(), geo_patch :: binary()) :: :ok def update_network_patch(public_key, network_patch) do GenServer.call(via_tuple(public_key), {:update_network_patch, network_patch}) @@ -302,7 +302,7 @@ defmodule UnirisCore.P2P.Node do Update the average availability of the node and reset the history """ @spec update_average_availability( - node_public_key :: UnirisCore.Crypto.key(), + node_public_key :: Uniris.Crypto.key(), average_availability :: float() ) :: :ok def update_average_availability(public_key, avg_availability) @@ -314,7 +314,7 @@ defmodule UnirisCore.P2P.Node do @doc """ Mark the node as validator. """ - @spec authorize(node_public_key :: UnirisCore.Crypto.key(), authorization_date :: DateTime.t()) :: + @spec authorize(node_public_key :: Uniris.Crypto.key(), authorization_date :: DateTime.t()) :: :ok def authorize(public_key, date = %DateTime{}) when is_binary(public_key) do GenServer.call(via_tuple(public_key), {:authorize, date}) @@ -328,7 +328,7 @@ defmodule UnirisCore.P2P.Node do GenServer.call(via_tuple(public_key), {:set_ready, date}) end - @spec set_enrollment_date(public_key :: UnirisCore.Crypto.key(), DateTime.t()) :: :ok + @spec set_enrollment_date(public_key :: Uniris.Crypto.key(), DateTime.t()) :: :ok def set_enrollment_date(public_key, date = %DateTime{}) when is_binary(public_key) do GenServer.call(via_tuple(public_key), {:set_enrollment_date, date}) end @@ -340,12 +340,12 @@ defmodule UnirisCore.P2P.Node do @doc """ Send message to a given node using the connected P2P client """ - @spec send_message(UnirisCore.Crypto.key(), term()) :: term() + @spec send_message(Uniris.Crypto.key(), term()) :: term() def send_message(public_key, message) do GenServer.call(via_tuple(public_key), {:send_message, message}) end - @spec via_tuple(id :: UnirisCore.Crypto.key() | :inet.ip_address()) :: tuple() + @spec via_tuple(id :: Uniris.Crypto.key() | :inet.ip_address()) :: tuple() defp via_tuple(id) do {:via, Registry, {NodeRegistry, id}} end @@ -355,7 +355,7 @@ defmodule UnirisCore.P2P.Node do ## Examples - iex> UnirisCore.P2P.Node.serialize(%UnirisCore.P2P.Node{ + iex> Uniris.P2P.Node.serialize(%Uniris.P2P.Node{ ...> first_public_key: <<0, 182, 67, 168, 252, 227, 203, 142, 164, 142, 248, 159, 209, 249, 247, 86, 64, ...> 92, 224, 91, 182, 122, 49, 209, 169, 96, 111, 219, 204, 57, 250, 59, 226>>, ...> last_public_key: <<0, 182, 67, 168, 252, 227, 203, 142, 164, 142, 248, 159, 209, 249, 247, 86, 64, @@ -441,7 +441,7 @@ defmodule UnirisCore.P2P.Node do ## Examples - iex> UnirisCore.P2P.Node.deserialize(<< + iex> Uniris.P2P.Node.deserialize(<< ...> 127, 0, 0, 1, 11, 184, "FA9", "AVC", 80, ...> 94, 245, 179, 123, 1::1, 1::1, 94, 245, 179, 123, ...> 1::1, 94, 245, 179, 123, @@ -451,7 +451,7 @@ defmodule UnirisCore.P2P.Node do ...> 92, 224, 91, 182, 122, 49, 209, 169, 96, 111, 219, 204, 57, 250, 59, 226 ...> >>) { - %UnirisCore.P2P.Node{ + %Uniris.P2P.Node{ first_public_key: <<0, 182, 67, 168, 252, 227, 203, 142, 164, 142, 248, 159, 209, 249, 247, 86, 64, 92, 224, 91, 182, 122, 49, 209, 169, 96, 111, 219, 204, 57, 250, 59, 226>>, last_public_key: <<0, 182, 67, 168, 252, 227, 203, 142, 164, 142, 248, 159, 209, 249, 247, 86, 64, @@ -471,7 +471,7 @@ defmodule UnirisCore.P2P.Node do "" } """ - @spec deserialize(bitstring()) :: {UnirisCore.P2P.Node.t(), bitstring} + @spec deserialize(bitstring()) :: {Uniris.P2P.Node.t(), bitstring} def deserialize( < + SchemaMigrator.start_link() + + _ -> + :ok + end + end - def to_website_addresses(index \\ 0, destination_index \\ 0, amount \\ 1.0) do + # TODO: to remove once the Client UI developed + def transfer_to_website_addresses(index \\ 0, destination_index \\ 0, amount \\ 1.0) do Transaction.new( :transfer, %TransactionData{ @@ -29,7 +46,7 @@ defmodule UnirisCore.ReleaseTasks.Transfer do "6CBF75F092278AA0751096CE85FE1E1F033FF50312B146DB336FAF861C8C4E09", index ) - |> UnirisCore.send_new_transaction() + |> Uniris.send_new_transaction() end defp website_seeds do diff --git a/apps/uniris_core/lib/uniris_core/self_repair.ex b/lib/uniris/self_repair.ex similarity index 94% rename from apps/uniris_core/lib/uniris_core/self_repair.ex rename to lib/uniris/self_repair.ex index 3848b6e1a..ec78dcdbe 100755 --- a/apps/uniris_core/lib/uniris_core/self_repair.ex +++ b/lib/uniris/self_repair.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.SelfRepair do +defmodule Uniris.SelfRepair do @moduledoc """ Process responsible of the self repair mechanism by pulling for each interval the last unsynchronized beacon chain slots. @@ -7,25 +7,25 @@ defmodule UnirisCore.SelfRepair do """ use GenServer - alias UnirisCore.Beacon - alias UnirisCore.BeaconSlot - alias UnirisCore.BeaconSlot.NodeInfo - alias UnirisCore.BeaconSlot.TransactionInfo + alias Uniris.Beacon + alias Uniris.BeaconSlot + alias Uniris.BeaconSlot.NodeInfo + alias Uniris.BeaconSlot.TransactionInfo - alias UnirisCore.Crypto - alias UnirisCore.Election - alias UnirisCore.Mining.Replication + alias Uniris.Crypto + alias Uniris.Election + alias Uniris.Mining.Replication - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.GetBeaconSlots - alias UnirisCore.P2P.Message.GetTransaction - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Message.GetBeaconSlots + alias Uniris.P2P.Message.GetTransaction + alias Uniris.P2P.Node - alias UnirisCore.Storage - alias UnirisCore.TaskSupervisor - alias UnirisCore.Transaction + alias Uniris.Storage + alias Uniris.TaskSupervisor + alias Uniris.Transaction - alias UnirisCore.Utils + alias Uniris.Utils require Logger @@ -48,7 +48,7 @@ defmodule UnirisCore.SelfRepair do |> DateTime.from_unix!() |> Utils.truncate_datetime() else - Application.get_env(:uniris_core, UnirisCore.SelfRepair)[:network_startup_date] + Application.get_env(:uniris, Uniris.SelfRepair)[:network_startup_date] end end @@ -383,10 +383,10 @@ defmodule UnirisCore.SelfRepair do defp last_sync_file do relative_filepath = - :uniris_core + :uniris |> Application.get_env(__MODULE__) |> Keyword.get(:last_sync_file, "priv/p2p/last_sync") - Application.app_dir(:uniris_core, relative_filepath) + Application.app_dir(:uniris, relative_filepath) end end diff --git a/apps/uniris_core/lib/uniris_core/shared_secrets.ex b/lib/uniris/shared_secrets.ex similarity index 88% rename from apps/uniris_core/lib/uniris_core/shared_secrets.ex rename to lib/uniris/shared_secrets.ex index 6a136e67f..3cdee51dc 100755 --- a/apps/uniris_core/lib/uniris_core/shared_secrets.ex +++ b/lib/uniris/shared_secrets.ex @@ -1,12 +1,12 @@ -defmodule UnirisCore.SharedSecrets do +defmodule Uniris.SharedSecrets do @moduledoc """ Manage view of the shared secrets public keys and creation of the node shared secret transactions """ alias __MODULE__.Cache - alias UnirisCore.Crypto - alias UnirisCore.Transaction - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Keys + alias Uniris.Crypto + alias Uniris.Transaction + alias Uniris.TransactionData + alias Uniris.TransactionData.Keys @type origin_family :: :software | :usb | :biometric @@ -19,7 +19,7 @@ defmodule UnirisCore.SharedSecrets do @doc """ Retrieve the origin public keys for a given family """ - @spec origin_public_keys(origin_family()) :: list(UnirisCore.Crypto.key()) + @spec origin_public_keys(origin_family()) :: list(Uniris.Crypto.key()) def origin_public_keys(family) when family in @origin_families do Cache.origin_public_keys(family) end @@ -39,7 +39,7 @@ defmodule UnirisCore.SharedSecrets do """ @spec add_origin_public_key( family :: origin_family(), - public_key :: UnirisCore.Crypto.key() + public_key :: Uniris.Crypto.key() ) :: :ok def add_origin_public_key(family, public_key) when family in @origin_families and is_binary(public_key) do @@ -51,10 +51,10 @@ defmodule UnirisCore.SharedSecrets do renew daily nonce with potiential storage nonce and origin software keys """ @spec new_node_shared_secrets_transaction( - authorized_node_public_keys :: list(UnirisCore.Crypto.key()), + authorized_node_public_keys :: list(Uniris.Crypto.key()), daily_nonce_seed :: binary(), aes_key :: binary() - ) :: UnirisCore.Transaction.pending() + ) :: Uniris.Transaction.pending() def new_node_shared_secrets_transaction( authorized_node_public_keys, daily_nonce_seed, diff --git a/apps/uniris_core/lib/uniris_core/shared_secrets/cache.ex b/lib/uniris/shared_secrets/cache.ex similarity index 68% rename from apps/uniris_core/lib/uniris_core/shared_secrets/cache.ex rename to lib/uniris/shared_secrets/cache.ex index c590a881f..f48590cff 100644 --- a/apps/uniris_core/lib/uniris_core/shared_secrets/cache.ex +++ b/lib/uniris/shared_secrets/cache.ex @@ -1,8 +1,11 @@ -defmodule UnirisCore.SharedSecrets.Cache do +defmodule Uniris.SharedSecrets.Cache do @moduledoc false use GenServer + alias Uniris.Crypto + alias Uniris.SharedSecrets + @public_keys_table :uniris_shared_secrets_public_keys def start_link(opts) do @@ -15,21 +18,21 @@ defmodule UnirisCore.SharedSecrets.Cache do end @spec add_origin_public_key( - family :: UnirisCore.SharedSecrets.origin_family(), - key :: UnirisCore.Crypto.key() + family :: SharedSecrets.origin_family(), + key :: Crypto.key() ) :: :ok def add_origin_public_key(family, key) do :ets.insert(@public_keys_table, {family, key}) end - @spec origin_public_keys() :: list(UnirisCore.Crypto.key()) + @spec origin_public_keys() :: list(Crypto.key()) def origin_public_keys do select = [{{:"$1", :"$2"}, [], [:"$2"]}] :ets.select(@public_keys_table, select) end - @spec origin_public_keys(family :: UnirisCore.SharedSecrets.origin_family()) :: - list(UnirisCore.Crypto.key()) + @spec origin_public_keys(family :: SharedSecrets.origin_family()) :: + list(Crypto.key()) def origin_public_keys(family) do select = [{{family, :"$1"}, [], [:"$1"]}] :ets.select(@public_keys_table, select) diff --git a/apps/uniris_core/lib/uniris_core/shared_secrets/node_renewal.ex b/lib/uniris/shared_secrets/node_renewal.ex similarity index 90% rename from apps/uniris_core/lib/uniris_core/shared_secrets/node_renewal.ex rename to lib/uniris/shared_secrets/node_renewal.ex index 913f234fd..160e224ce 100644 --- a/apps/uniris_core/lib/uniris_core/shared_secrets/node_renewal.ex +++ b/lib/uniris/shared_secrets/node_renewal.ex @@ -1,18 +1,18 @@ -defmodule UnirisCore.SharedSecrets.NodeRenewal do +defmodule Uniris.SharedSecrets.NodeRenewal do @moduledoc false - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Election - alias UnirisCore.Election.ValidationConstraints + alias Uniris.Election + alias Uniris.Election.ValidationConstraints - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.StartMining - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Message.StartMining + alias Uniris.P2P.Node - alias UnirisCore.SharedSecrets - alias UnirisCore.TaskSupervisor - alias UnirisCore.Utils + alias Uniris.SharedSecrets + alias Uniris.TaskSupervisor + alias Uniris.Utils use GenServer diff --git a/apps/uniris_core/lib/uniris_core/shared_secrets/supervisor.ex b/lib/uniris/shared_secrets/supervisor.ex similarity index 54% rename from apps/uniris_core/lib/uniris_core/shared_secrets/supervisor.ex rename to lib/uniris/shared_secrets/supervisor.ex index be4e837c4..4e2bd37c6 100644 --- a/apps/uniris_core/lib/uniris_core/shared_secrets/supervisor.ex +++ b/lib/uniris/shared_secrets/supervisor.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.SharedSecretsSupervisor do +defmodule Uniris.SharedSecretsSupervisor do @moduledoc false - alias UnirisCore.SharedSecrets.Cache - alias UnirisCore.SharedSecrets.NodeRenewal - alias UnirisCore.SharedSecrets.TransactionLoader - alias UnirisCore.Utils + alias Uniris.SharedSecrets.Cache + alias Uniris.SharedSecrets.NodeRenewal + alias Uniris.SharedSecrets.TransactionLoader + alias Uniris.Utils use Supervisor @@ -13,8 +13,8 @@ defmodule UnirisCore.SharedSecretsSupervisor do end def init(_opts) do - interval = Application.get_env(:uniris_core, NodeRenewal)[:interval] - trigger_offset = Application.get_env(:uniris_core, NodeRenewal)[:trigger_offset] + interval = Application.get_env(:uniris, NodeRenewal)[:interval] + trigger_offset = Application.get_env(:uniris, NodeRenewal)[:trigger_offset] children = [ diff --git a/apps/uniris_core/lib/uniris_core/shared_secrets/transaction_loader.ex b/lib/uniris/shared_secrets/transaction_loader.ex similarity index 92% rename from apps/uniris_core/lib/uniris_core/shared_secrets/transaction_loader.ex rename to lib/uniris/shared_secrets/transaction_loader.ex index 971d46255..79e2573c8 100644 --- a/apps/uniris_core/lib/uniris_core/shared_secrets/transaction_loader.ex +++ b/lib/uniris/shared_secrets/transaction_loader.ex @@ -1,14 +1,14 @@ -defmodule UnirisCore.SharedSecrets.TransactionLoader do +defmodule Uniris.SharedSecrets.TransactionLoader do @moduledoc false - alias UnirisCore.P2P - alias UnirisCore.P2P.Node - alias UnirisCore.PubSub + alias Uniris.P2P + alias Uniris.P2P.Node + alias Uniris.PubSub - alias UnirisCore.SharedSecrets - alias UnirisCore.Storage + alias Uniris.SharedSecrets + alias Uniris.Storage - alias UnirisCore.Transaction + alias Uniris.Transaction require Logger diff --git a/apps/uniris_core/lib/uniris_core/storage.ex b/lib/uniris/storage.ex similarity index 71% rename from apps/uniris_core/lib/uniris_core/storage.ex rename to lib/uniris/storage.ex index 4cc5a40d3..48caef491 100644 --- a/apps/uniris_core/lib/uniris_core/storage.ex +++ b/lib/uniris/storage.ex @@ -1,16 +1,16 @@ -defmodule UnirisCore.Storage do +defmodule Uniris.Storage do @moduledoc """ Manage the access to the transaction storage disk backend storage and in memory """ - alias UnirisCore.Crypto - alias UnirisCore.PubSub + alias Uniris.Crypto + alias Uniris.PubSub alias __MODULE__.Backend alias __MODULE__.Cache - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionInput + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionInput require Logger @@ -25,15 +25,24 @@ defmodule UnirisCore.Storage do """ @spec node_transactions() :: list(Transaction.t()) def node_transactions do - Cache.node_transactions() + Cache.list_node_transaction_addresses() + |> Enum.map(&Backend.get_transaction/1) + |> Enum.reject(&match?({:error, :transaction_not_exists}, &1)) + |> Enum.map(fn {:ok, tx} -> tx end) end @doc """ Return the list of transactions stored """ @spec list_transactions(limit :: non_neg_integer()) :: Enumerable.t() - def list_transactions(limit \\ 0) do - Cache.list_transactions(limit) + def list_transactions(limit \\ 0) + + def list_transactions(0) do + Backend.list_transactions() + end + + def list_transactions(limit) do + Backend.list_transactions() |> Stream.take(limit) end @doc """ @@ -47,13 +56,7 @@ defmodule UnirisCore.Storage do if detect_ko? and Cache.ko_transaction?(address) do {:error, :invalid_transaction} else - case Cache.get_transaction(address) do - nil -> - Backend.get_transaction(address) - - transaction -> - {:ok, transaction} - end + Backend.get_transaction(address) end end @@ -84,7 +87,10 @@ defmodule UnirisCore.Storage do """ @spec origin_shared_secrets_transactions() :: list(Transaction.t()) def origin_shared_secrets_transactions do - Cache.origin_shared_secrets_transactions() + Cache.list_origin_shared_secrets_addresses() + |> Enum.map(&Backend.get_transaction/1) + |> Enum.reject(&match?({:error, :transaction_not_exists}, &1)) + |> Enum.map(fn {:ok, tx} -> tx end) end @doc """ @@ -144,18 +150,18 @@ defmodule UnirisCore.Storage do @spec get_last_node_shared_secrets_transaction() :: {:ok, Transaction.t()} | {:error, :transaction_not_exists} def get_last_node_shared_secrets_transaction do - case Cache.last_node_shared_secrets_transaction() do - nil -> + case Cache.get_last_node_shared_secrets_address() do + {:error, :not_found} -> {:error, :transaction_not_exists} - tx -> - {:ok, tx} + {:ok, address} -> + Backend.get_transaction(address) end end @spec last_transaction_address(binary()) :: {:ok, binary()} | {:error, :not_found} def last_transaction_address(address) do - Cache.last_transaction_address(address) + Cache.get_last_transaction_address(address) end @doc """ @@ -175,4 +181,26 @@ defmodule UnirisCore.Storage do def get_transaction_chain_length(address) do Cache.get_transaction_chain_length(address) end + + @doc """ + Return the list of code proposals transactions + """ + @spec list_code_proposals() :: list(Transaction.t()) + def list_code_proposals do + Cache.list_code_proposals_addresses() + |> Enum.map(fn address -> + {:ok, tx} = Backend.get_transaction(address) + tx + end) + end + + @doc """ + Get the list of counter signature for the pending transaction address. + + The counter signatures are transaction addresses validating the the pending transaction + """ + @spec get_pending_transaction_signatures(binary) :: list(binary()) + def get_pending_transaction_signatures(address) do + Cache.get_pending_transaction_signatures(address) + end end diff --git a/apps/uniris_core/lib/uniris_core/storage/backend.ex b/lib/uniris/storage/backend.ex similarity index 85% rename from apps/uniris_core/lib/uniris_core/storage/backend.ex rename to lib/uniris/storage/backend.ex index bb92fdce5..19cd918ec 100644 --- a/apps/uniris_core/lib/uniris_core/storage/backend.ex +++ b/lib/uniris/storage/backend.ex @@ -1,9 +1,9 @@ -defmodule UnirisCore.Storage.Backend do +defmodule Uniris.Storage.Backend do @moduledoc false - alias UnirisCore.Transaction + alias Uniris.Transaction - @behaviour UnirisCore.Storage.BackendImpl + @behaviour Uniris.Storage.BackendImpl @impl true @spec get_transaction(binary()) :: @@ -44,6 +44,6 @@ defmodule UnirisCore.Storage.Backend do end defp impl do - Application.get_env(:uniris_core, UnirisCore.Storage)[:backend] + Application.get_env(:uniris, Uniris.Storage)[:backend] end end diff --git a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra.ex b/lib/uniris/storage/backend/cassandra.ex similarity index 93% rename from apps/uniris_core/lib/uniris_core/storage/backend/cassandra.ex rename to lib/uniris/storage/backend/cassandra.ex index a21f9681b..f58f4f951 100644 --- a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra.ex +++ b/lib/uniris/storage/backend/cassandra.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Storage.CassandraBackend do +defmodule Uniris.Storage.CassandraBackend do @moduledoc false @insert_transaction_stmt """ @@ -58,23 +58,23 @@ defmodule UnirisCore.Storage.CassandraBackend do alias __MODULE__.ChainQuerySupervisor alias __MODULE__.ChainQueryWorker - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Keys - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.TransactionData + alias Uniris.TransactionData.Keys + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger defdelegate child_spec(opts), to: __MODULE__.Supervisor - @behaviour UnirisCore.Storage.BackendImpl + @behaviour Uniris.Storage.BackendImpl @impl true def list_transactions do diff --git a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra/chain_query/supervisor.ex b/lib/uniris/storage/backend/cassandra/chain_query/supervisor.ex similarity index 73% rename from apps/uniris_core/lib/uniris_core/storage/backend/cassandra/chain_query/supervisor.ex rename to lib/uniris/storage/backend/cassandra/chain_query/supervisor.ex index cf54641aa..db9e172b7 100644 --- a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra/chain_query/supervisor.ex +++ b/lib/uniris/storage/backend/cassandra/chain_query/supervisor.ex @@ -1,9 +1,9 @@ -defmodule UnirisCore.Storage.CassandraBackend.ChainQuerySupervisor do +defmodule Uniris.Storage.CassandraBackend.ChainQuerySupervisor do @moduledoc false use Supervisor - alias UnirisCore.Storage.CassandraBackend.ChainQueryWorker + alias Uniris.Storage.CassandraBackend.ChainQueryWorker def start_link(init_arg) do Supervisor.start_link(__MODULE__, init_arg, name: __MODULE__) diff --git a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra/chain_query/worker.ex b/lib/uniris/storage/backend/cassandra/chain_query/worker.ex similarity index 90% rename from apps/uniris_core/lib/uniris_core/storage/backend/cassandra/chain_query/worker.ex rename to lib/uniris/storage/backend/cassandra/chain_query/worker.ex index 79a1b3932..28cb89fba 100644 --- a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra/chain_query/worker.ex +++ b/lib/uniris/storage/backend/cassandra/chain_query/worker.ex @@ -1,7 +1,7 @@ -defmodule UnirisCore.Storage.CassandraBackend.ChainQueryWorker do +defmodule Uniris.Storage.CassandraBackend.ChainQueryWorker do @moduledoc false - alias UnirisCore.Storage.CassandraBackend + alias Uniris.Storage.CassandraBackend use GenServer diff --git a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra/schema_migrator.ex b/lib/uniris/storage/backend/cassandra/schema_migrator.ex similarity index 98% rename from apps/uniris_core/lib/uniris_core/storage/backend/cassandra/schema_migrator.ex rename to lib/uniris/storage/backend/cassandra/schema_migrator.ex index 206341f1b..c2d8058a5 100644 --- a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra/schema_migrator.ex +++ b/lib/uniris/storage/backend/cassandra/schema_migrator.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Storage.CassandraBackend.SchemaMigrator do +defmodule Uniris.Storage.CassandraBackend.SchemaMigrator do @moduledoc false require Logger diff --git a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra/supervisor.ex b/lib/uniris/storage/backend/cassandra/supervisor.ex similarity index 56% rename from apps/uniris_core/lib/uniris_core/storage/backend/cassandra/supervisor.ex rename to lib/uniris/storage/backend/cassandra/supervisor.ex index bf40bdf28..e74ece813 100644 --- a/apps/uniris_core/lib/uniris_core/storage/backend/cassandra/supervisor.ex +++ b/lib/uniris/storage/backend/cassandra/supervisor.ex @@ -1,16 +1,17 @@ -defmodule UnirisCore.Storage.CassandraBackend.Supervisor do +defmodule Uniris.Storage.CassandraBackend.Supervisor do @moduledoc false use Supervisor - alias UnirisCore.Storage.CassandraBackend.ChainQuerySupervisor - alias UnirisCore.Storage.CassandraBackend.SchemaMigrator + + alias Uniris.Storage.CassandraBackend.ChainQuerySupervisor + alias Uniris.Storage.CassandraBackend.SchemaMigrator def start_link(opts) do Supervisor.start_link(__MODULE__, opts, name: __MODULE__) end def init(_opts) do - nodes = Application.get_env(:uniris_core, UnirisCore.Storage.CassandraBackend)[:nodes] + nodes = Application.get_env(:uniris, Uniris.Storage.CassandraBackend)[:nodes] children = [ {Xandra, name: :xandra_conn, nodes: nodes, pool_size: 10}, diff --git a/apps/uniris_core/lib/uniris_core/storage/backend/file_impl.ex b/lib/uniris/storage/backend/file_impl.ex similarity index 89% rename from apps/uniris_core/lib/uniris_core/storage/backend/file_impl.ex rename to lib/uniris/storage/backend/file_impl.ex index ed5b6a8eb..a5b430dda 100755 --- a/apps/uniris_core/lib/uniris_core/storage/backend/file_impl.ex +++ b/lib/uniris/storage/backend/file_impl.ex @@ -1,12 +1,11 @@ -defmodule UnirisCore.Storage.FileBackend do +defmodule Uniris.Storage.FileBackend do @moduledoc false - alias UnirisCore.Crypto - alias UnirisCore.Transaction + alias Uniris.Transaction use GenServer - @behaviour UnirisCore.Storage.BackendImpl + @behaviour Uniris.Storage.BackendImpl def start_link(_opts) do GenServer.start_link(__MODULE__, [], name: __MODULE__) @@ -14,14 +13,7 @@ defmodule UnirisCore.Storage.FileBackend do @impl true def init(_) do - root_dir = - Path.join( - Application.app_dir(:uniris_core, "priv/storage"), - Application.get_env(:uniris_core, UnirisCore.Crypto.SoftwareKeystore)[:seed] - |> Crypto.hash() - |> Base.encode16() - ) - + root_dir = Application.get_env(:uniris, __MODULE__)[:root_dir] transactions_dir = Path.join(root_dir, "transactions") indexes_dir = Path.join(root_dir, "indexes") @@ -109,11 +101,17 @@ defmodule UnirisCore.Storage.FileBackend do Stream.resource( fn -> {File.ls!(transactions_dir), 0} end, fn {files, index} -> - tx = - File.read!(Path.join(transactions_dir, Enum.at(files, index))) - |> :erlang.binary_to_term() + case Enum.at(files, index) do + nil -> + {:halt, index} + + filename -> + tx = + File.read!(Path.join(transactions_dir, filename)) + |> :erlang.binary_to_term() - {[tx], {files, index + 1}} + {[tx], {files, index + 1}} + end end, fn _ -> :ok end ) diff --git a/apps/uniris_core/lib/uniris_core/storage/backend/impl.ex b/lib/uniris/storage/backend/impl.ex similarity index 92% rename from apps/uniris_core/lib/uniris_core/storage/backend/impl.ex rename to lib/uniris/storage/backend/impl.ex index 53d91d7cd..15b3e062a 100644 --- a/apps/uniris_core/lib/uniris_core/storage/backend/impl.ex +++ b/lib/uniris/storage/backend/impl.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Storage.BackendImpl do +defmodule Uniris.Storage.BackendImpl do @moduledoc false @callback get_transaction(binary()) :: diff --git a/apps/uniris_core/lib/uniris_core/storage/cache.ex b/lib/uniris/storage/cache.ex similarity index 66% rename from apps/uniris_core/lib/uniris_core/storage/cache.ex rename to lib/uniris/storage/cache.ex index 5624a6ed2..f7a542c32 100644 --- a/apps/uniris_core/lib/uniris_core/storage/cache.ex +++ b/lib/uniris/storage/cache.ex @@ -1,16 +1,16 @@ -defmodule UnirisCore.Storage.Cache do +defmodule Uniris.Storage.Cache do @moduledoc false - alias UnirisCore.Crypto - alias UnirisCore.Storage.Backend + alias Uniris.Crypto + alias Uniris.Storage.Backend - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionInput + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionData + alias Uniris.TransactionInput - @transaction_table :uniris_txs @node_table :uniris_node_tx @ledger_table :uniris_ledger @shared_secrets_table :uniris_shared_secrets_txs @@ -18,6 +18,8 @@ defmodule UnirisCore.Storage.Cache do @chain_track_table :uniris_chain_tracking @latest_transactions_table :uniris_latest_tx @transaction_chain_length :uniris_chain_length + @code_table :uniris_code_tx + @pending_table :uniris_pending_tx use GenServer @@ -26,13 +28,14 @@ defmodule UnirisCore.Storage.Cache do end def init(_opts) do - :ets.new(@transaction_table, [:set, :named_table, :public, read_concurrency: true]) :ets.new(@node_table, [:set, :named_table, :public, read_concurrency: true]) :ets.new(@ledger_table, [:bag, :named_table, :public, read_concurrency: true]) :ets.new(@ko_transaction_table, [:set, :named_table, :public, read_concurrency: true]) :ets.new(@shared_secrets_table, [:bag, :named_table, :public, read_concurrency: true]) :ets.new(@chain_track_table, [:set, :named_table, :public, read_concurrency: true]) :ets.new(@transaction_chain_length, [:set, :named_table, :public, read_concurrency: true]) + :ets.new(@code_table, [:set, :named_table, :public, read_concurrency: true]) + :ets.new(@pending_table, [:set, :named_table, :public, read_concurrency: true]) :ets.new(@latest_transactions_table, [ :ordered_set, @@ -42,11 +45,14 @@ defmodule UnirisCore.Storage.Cache do ]) Enum.each(Backend.list_transaction_chains_info(), fn {last_tx, size} -> - :ets.insert(@transaction_table, {last_tx.address, last_tx}) - track_transaction(last_tx) - index_transaction(last_tx) - set_ledger(last_tx) set_transaction_length(last_tx.address, size) + + Backend.get_transaction_chain(last_tx.address) + |> Enum.each(fn tx -> + track_transaction(tx) + index_transaction(tx) + set_ledger(tx) + end) end) {:ok, []} @@ -82,6 +88,24 @@ defmodule UnirisCore.Storage.Cache do :ets.insert(@shared_secrets_table, {:origin_shared_secrets, tx_address}) end + defp index_transaction(%Transaction{address: tx_address, type: :code_proposal}) do + :ets.insert(@pending_table, {tx_address, []}) + :ets.insert(@code_table, {tx_address, []}) + end + + defp index_transaction(%Transaction{ + address: tx_address, + type: :code_approval, + data: %TransactionData{recipients: [proposal_address]} + }) do + case :ets.lookup(@pending_table, proposal_address) do + [{_, signatures}] -> + :ets.insert(@pending_table, {proposal_address, [tx_address | signatures]}) + [{_, approvals}] = :ets.lookup(@code_table, proposal_address) + :ets.insert(@code_table, {proposal_address, [tx_address | approvals]}) + end + end + defp index_transaction(%Transaction{}), do: :ok defp set_ledger(%Transaction{ @@ -140,16 +164,21 @@ defmodule UnirisCore.Storage.Cache do ) end + @doc """ + Index transaction, update its ledger and update the chain tracker + """ @spec store_transaction(Transaction.t()) :: :ok - def store_transaction(tx = %Transaction{address: tx_address}) do + def store_transaction(tx = %Transaction{}) do :ets.delete(@ko_transaction_table, tx.address) - true = :ets.insert(@transaction_table, {tx_address, tx}) track_transaction(tx) index_transaction(tx) set_ledger(tx) :ok end + @doc """ + Mark a transaction KO and specifies its inconsitencies + """ @spec store_ko_transaction(Transaction.t()) :: :ok def store_ko_transaction(%Transaction{ address: tx_address, @@ -165,42 +194,33 @@ defmodule UnirisCore.Storage.Cache do :ok end - @spec get_transaction(binary()) :: Transaction.t() | nil - def get_transaction(tx_address) do - case :ets.lookup(@transaction_table, tx_address) do - [{_, tx}] -> - tx - - _ -> - nil - end - end - - @spec node_transactions() :: list(Transaction.t()) - def node_transactions do - case :ets.select(@node_table, [{{:_, :"$1"}, [], [:"$1"]}]) do - [] -> - [] - - addresses -> - Enum.map(addresses, &get_transaction/1) - end + @doc """ + List the node transactions addresses + """ + @spec list_node_transaction_addresses() :: list(binary) + def list_node_transaction_addresses do + :ets.select(@node_table, [{{:_, :"$1"}, [], [:"$1"]}]) end - @spec origin_shared_secrets_transactions() :: list(Transaction.t()) - def origin_shared_secrets_transactions do + @doc """ + List the origin shared secrets transactions addresses + """ + @spec list_origin_shared_secrets_addresses() :: list(binary()) + def list_origin_shared_secrets_addresses do case :ets.lookup(@shared_secrets_table, :origin_shared_secrets) do [] -> [] transactions -> Enum.map(transactions, fn {_, address} -> - [{_, tx}] = :ets.lookup(@transaction_table, address) - tx + address end) end end + @doc """ + Determines if a transaction is ko + """ @spec ko_transaction?(binary()) :: boolean() def ko_transaction?(address) do case :ets.lookup(@ko_transaction_table, address) do @@ -212,6 +232,9 @@ defmodule UnirisCore.Storage.Cache do end end + @doc """ + Get the unspent outputs for a given transaction address + """ @spec get_unspent_outputs(binary()) :: list(UnspentOutput.t()) def get_unspent_outputs(address) do case :ets.lookup(@ledger_table, address) do @@ -225,20 +248,25 @@ defmodule UnirisCore.Storage.Cache do end end - @spec last_node_shared_secrets_transaction() :: Transaction.t() | nil - def last_node_shared_secrets_transaction do + @doc """ + Retrieve the last node shared secret transaction address + """ + @spec get_last_node_shared_secrets_address() :: {:ok, binary()} | {:error, :not_found} + def get_last_node_shared_secrets_address do case :ets.lookup(@shared_secrets_table, :last_node_shared_secrets) do [{_, address}] -> - [{_, tx}] = :ets.lookup(@transaction_table, address) - tx + {:ok, address} _ -> - nil + {:error, :not_found} end end - @spec last_transaction_address(binary()) :: {:ok, binary()} | {:error, :not_found} - def last_transaction_address(address) do + @doc """ + Retrieve the last transaction address for a chain + """ + @spec get_last_transaction_address(binary()) :: {:ok, binary()} | {:error, :not_found} + def get_last_transaction_address(address) do case :ets.lookup(@chain_track_table, address) do [] -> {:error, :not_found} @@ -247,37 +275,13 @@ defmodule UnirisCore.Storage.Cache do {:ok, address} [{_, next}] -> - last_transaction_address(next) + get_last_transaction_address(next) end end - @spec list_transactions(limit :: non_neg_integer()) :: Enumerable.t() - def list_transactions(0) do - stream_transactions_per_date() - |> Stream.map(&get_transaction/1) - end - - def list_transactions(limit) do - stream_transactions_per_date() - |> Stream.take(limit) - |> Stream.map(&get_transaction/1) - end - - defp stream_transactions_per_date do - Stream.resource( - fn -> :ets.last(@latest_transactions_table) end, - fn - :"$end_of_table" -> - {:halt, nil} - - previous_key -> - [{_, address}] = :ets.lookup(@latest_transactions_table, previous_key) - {[address], :ets.prev(@latest_transactions_table, previous_key)} - end, - fn _ -> :ok end - ) - end - + @doc """ + Retrieve the ledger balance for a given address using the unspent outputs + """ @spec get_ledger_balance(binary()) :: float() def get_ledger_balance(address) do @ledger_table @@ -286,6 +290,9 @@ defmodule UnirisCore.Storage.Cache do |> Enum.reduce(0.0, fn {_, %UnspentOutput{amount: amount}, _}, acc -> acc + amount end) end + @doc """ + Retrieve the entire inputs for a given address (spent or unspent) + """ @spec get_ledger_inputs(binary()) :: list(TransactionInput.t()) def get_ledger_inputs(address) do @ledger_table @@ -300,12 +307,18 @@ defmodule UnirisCore.Storage.Cache do |> Enum.reject(&(&1.from == address)) end + @doc """ + The the depth of a transaction chain + """ @spec set_transaction_length(binary(), non_neg_integer()) :: :ok def set_transaction_length(address, length) do true = :ets.insert(@transaction_chain_length, {address, length}) :ok end + @doc """ + Find out the depth of a transaction chain + """ @spec get_transaction_chain_length(binary()) :: non_neg_integer() def get_transaction_chain_length(address) do case :ets.lookup(@transaction_chain_length, address) do @@ -316,4 +329,26 @@ defmodule UnirisCore.Storage.Cache do nb end end + + @doc """ + List the code proposal transaction addresses + """ + @spec list_code_proposals_addresses() :: list(binary()) + def list_code_proposals_addresses do + :ets.select(@code_table, [{{:"$1", :_}, [], [:"$1"]}]) + end + + @doc """ + Get the counter signatures for the pending transaction address + """ + @spec get_pending_transaction_signatures(binary()) :: list(binary()) + def get_pending_transaction_signatures(address) do + case :ets.lookup(@pending_table, address) do + [{_, signatures}] -> + signatures + + _ -> + [] + end + end end diff --git a/apps/uniris_core/lib/uniris_core/storage/supervisor.ex b/lib/uniris/storage/supervisor.ex similarity index 59% rename from apps/uniris_core/lib/uniris_core/storage/supervisor.ex rename to lib/uniris/storage/supervisor.ex index 80a5dba84..b397ff47e 100644 --- a/apps/uniris_core/lib/uniris_core/storage/supervisor.ex +++ b/lib/uniris/storage/supervisor.ex @@ -1,7 +1,7 @@ -defmodule UnirisCore.StorageSupervisor do +defmodule Uniris.StorageSupervisor do @moduledoc false - alias UnirisCore.Utils + alias Uniris.Utils use Supervisor @@ -12,8 +12,8 @@ defmodule UnirisCore.StorageSupervisor do def init(_opts) do children = Utils.configurable_children([ - {Application.get_env(:uniris_core, UnirisCore.Storage)[:backend], [], []}, - {UnirisCore.Storage.Cache, [], []} + {Application.get_env(:uniris, Uniris.Storage)[:backend], [], []}, + {Uniris.Storage.Cache, [], []} ]) Supervisor.init(children, strategy: :rest_for_one) diff --git a/apps/uniris_core/lib/uniris_core/transaction.ex b/lib/uniris/transaction.ex similarity index 95% rename from apps/uniris_core/lib/uniris_core/transaction.ex rename to lib/uniris/transaction.ex index 3580d36d0..6017b8edc 100755 --- a/apps/uniris_core/lib/uniris_core/transaction.ex +++ b/lib/uniris/transaction.ex @@ -1,15 +1,15 @@ -defmodule UnirisCore.Transaction do +defmodule Uniris.Transaction do @moduledoc """ Represents the main unit of the Uniris network and its Transaction Chain. Blocks are reduce to its unitary form to provide high scalability, avoiding double spending attack and chain integrity """ - alias UnirisCore.Crypto + alias Uniris.Crypto alias __MODULE__.CrossValidationStamp alias __MODULE__.ValidationStamp - alias UnirisCore.TransactionData + alias Uniris.TransactionData defstruct [ :address, @@ -41,7 +41,7 @@ defmodule UnirisCore.Transaction do address: binary(), type: transaction_type(), timestamp: DateTime.t(), - data: Data.t(), + data: TransactionData.t(), previous_public_key: Crypto.key(), previous_signature: binary(), origin_signature: binary(), @@ -59,9 +59,10 @@ defmodule UnirisCore.Transaction do | :node | :node_shared_secrets | :origin_shared_secrets - | :code | :beacon | :hosting + | :code_proposal + | :code_approval @transaction_types [ :identity, @@ -70,9 +71,10 @@ defmodule UnirisCore.Transaction do :node, :node_shared_secrets, :origin_shared_secrets, - :code, :beacon, - :hosting + :hosting, + :code_proposal, + :code_approval ] @doc """ @@ -260,9 +262,10 @@ defmodule UnirisCore.Transaction do def serialize_type(:node), do: 3 def serialize_type(:node_shared_secrets), do: 4 def serialize_type(:origin_shared_secrets), do: 5 - def serialize_type(:code), do: 6 - def serialize_type(:beacon), do: 7 - def serialize_type(:hosting), do: 8 + def serialize_type(:beacon), do: 6 + def serialize_type(:hosting), do: 7 + def serialize_type(:code_proposal), do: 8 + def serialize_type(:code_approval), do: 9 @doc """ Parse a serialize transaction type @@ -274,9 +277,10 @@ defmodule UnirisCore.Transaction do def parse_type(3), do: :node def parse_type(4), do: :node_shared_secrets def parse_type(5), do: :origin_shared_secrets - def parse_type(6), do: :code - def parse_type(7), do: :beacon - def parse_type(8), do: :hosting + def parse_type(6), do: :beacon + def parse_type(7), do: :hosting + def parse_type(8), do: :code_proposal + def parse_type(9), do: :code_approval @doc """ Determines if a transaction type is a network one @@ -285,7 +289,8 @@ defmodule UnirisCore.Transaction do def network_type?(:node), do: true def network_type?(:node_shared_secrets), do: true def network_type?(:origin_shared_secrets), do: true - def network_type?(:code), do: true + def network_type?(:code_proposal), do: true + def network_type?(:code_approval), do: true def network_type?(_), do: false @doc """ @@ -326,12 +331,12 @@ defmodule UnirisCore.Transaction do ## Examples - iex> UnirisCore.Transaction.serialize(%UnirisCore.Transaction{ + iex> Uniris.Transaction.serialize(%Uniris.Transaction{ ...> address: <<0, 62, 198, 74, 197, 246, 83, 6, 174, 95, 223, 107, 92, 12, 36, 93, 197, 197, ...> 196, 186, 34, 34, 134, 184, 95, 181, 113, 255, 93, 134, 197, 243, 85>>, ...> type: :transfer, ...> timestamp: ~U[2020-07-07 09:01:20.721Z], - ...> data: %UnirisCore.TransactionData{}, + ...> data: %Uniris.TransactionData{}, ...> previous_public_key: <<0, 61, 250, 128, 151, 100, 231, 128, 158, 139, 88, 128, 68, 236, 240, 238, 116, ...> 186, 164, 87, 3, 60, 198, 21, 248, 64, 207, 58, 221, 192, 131, 180, 213>>, ...> previous_signature: <<65, 66, 248, 246, 119, 69, 36, 103, 249, 201, 252, 154, 69, 24, 48, 18, 63, @@ -342,12 +347,12 @@ defmodule UnirisCore.Transaction do ...> 183, 149, 250, 90, 117, 107, 162, 17, 63, 118, 229, 125, 15, 189, 245, 64, ...> 214, 93, 126, 179, 251, 41, 101, 249, 226, 180, 88, 241, 184, 154, 181, 156, ...> 178, 213, 132, 220, 31, 63, 23, 165, 174, 82, 182, 120, 142, 87, 34, 132>>, - ...> validation_stamp: %UnirisCore.Transaction.ValidationStamp{ + ...> validation_stamp: %Uniris.Transaction.ValidationStamp{ ...> proof_of_work: <<0, 212, 52, 50, 200, 144, 139, 192, 177, 99, 145, 174, 178, 113, 229, 251, 170, ...> 186, 184, 109, 13, 200, 136, 34, 241, 99, 99, 210, 172, 143, 104, 160, 99>>, ...> proof_of_integrity: <<0, 199, 216, 73, 158, 82, 76, 158, 8, 215, 22, 186, 166, 45, 153, 17, 22, 251, ...> 133, 212, 35, 220, 155, 242, 198, 93, 133, 134, 244, 226, 122, 87, 17>>, - ...> ledger_operations: %UnirisCore.Transaction.ValidationStamp.LedgerOperations{ + ...> ledger_operations: %Uniris.Transaction.ValidationStamp.LedgerOperations{ ...> fee: 0.1, ...> transaction_movements: [], ...> node_movements: [], @@ -359,7 +364,7 @@ defmodule UnirisCore.Transaction do ...> 234, 185, 105, 75, 81, 238, 158, 13, 150, 184, 31, 247, 79, 251>> ...> }, ...> cross_validation_stamps: [ - ...> %UnirisCore.Transaction.CrossValidationStamp{ + ...> %Uniris.Transaction.CrossValidationStamp{ ...> node_public_key: <<0, 253, 187, 69, 83, 77, 33, 173, 15, 226, 88, 230, 68, 235, 114, 146, 89, 221, ...> 115, 26, 63, 191, 152, 219, 245, 217, 29, 140, 42, 58, 104, 109, 108>>, ...> signature: <<171, 239, 218, 149, 194, 162, 14, 64, 73, 160, 142, 149, 100, 135, 215, 48, @@ -550,14 +555,14 @@ defmodule UnirisCore.Transaction do ...> 133, 74, 61, 203, 113, 16, 163, 135, 41, 8, 227, 82, 131, 248, 200, 50, 113, ...> 195, 241, 169, 208, 28, 2, 53, 49, 141, 89, 99, 12, 189, 115, 188, 75, 11, 42, ...> 149, 223, 53, 234, 144, 115, 42, 99, 54, 94, 120, 25, 193, 0>> - ...> |> UnirisCore.Transaction.deserialize() + ...> |> Uniris.Transaction.deserialize() { - %UnirisCore.Transaction{ + %Uniris.Transaction{ address: <<0, 62, 198, 74, 197, 246, 83, 6, 174, 95, 223, 107, 92, 12, 36, 93, 197, 197, 196, 186, 34, 34, 134, 184, 95, 181, 113, 255, 93, 134, 197, 243, 85>>, type: :transfer, timestamp: ~U[2020-07-07 09:01:20.721Z], - data: %UnirisCore.TransactionData{}, + data: %Uniris.TransactionData{}, previous_public_key: <<0, 61, 250, 128, 151, 100, 231, 128, 158, 139, 88, 128, 68, 236, 240, 238, 116, 186, 164, 87, 3, 60, 198, 21, 248, 64, 207, 58, 221, 192, 131, 180, 213>>, previous_signature: <<65, 66, 248, 246, 119, 69, 36, 103, 249, 201, 252, 154, 69, 24, 48, 18, 63, @@ -568,12 +573,12 @@ defmodule UnirisCore.Transaction do 183, 149, 250, 90, 117, 107, 162, 17, 63, 118, 229, 125, 15, 189, 245, 64, 214, 93, 126, 179, 251, 41, 101, 249, 226, 180, 88, 241, 184, 154, 181, 156, 178, 213, 132, 220, 31, 63, 23, 165, 174, 82, 182, 120, 142, 87, 34, 132>>, - validation_stamp: %UnirisCore.Transaction.ValidationStamp{ + validation_stamp: %Uniris.Transaction.ValidationStamp{ proof_of_work: <<0, 212, 52, 50, 200, 144, 139, 192, 177, 99, 145, 174, 178, 113, 229, 251, 170, 186, 184, 109, 13, 200, 136, 34, 241, 99, 99, 210, 172, 143, 104, 160, 99>>, proof_of_integrity: <<0, 199, 216, 73, 158, 82, 76, 158, 8, 215, 22, 186, 166, 45, 153, 17, 22, 251, 133, 212, 35, 220, 155, 242, 198, 93, 133, 134, 244, 226, 122, 87, 17>>, - ledger_operations: %UnirisCore.Transaction.ValidationStamp.LedgerOperations{ + ledger_operations: %Uniris.Transaction.ValidationStamp.LedgerOperations{ fee: 0.1, transaction_movements: [], node_movements: [], @@ -585,7 +590,7 @@ defmodule UnirisCore.Transaction do 234, 185, 105, 75, 81, 238, 158, 13, 150, 184, 31, 247, 79, 251>> }, cross_validation_stamps: [ - %UnirisCore.Transaction.CrossValidationStamp{ + %Uniris.Transaction.CrossValidationStamp{ node_public_key: <<0, 253, 187, 69, 83, 77, 33, 173, 15, 226, 88, 230, 68, 235, 114, 146, 89, 221, 115, 26, 63, 191, 152, 219, 245, 217, 29, 140, 42, 58, 104, 109, 108>>, signature: <<171, 239, 218, 149, 194, 162, 14, 64, 73, 160, 142, 149, 100, 135, 215, 48, diff --git a/apps/uniris_core/lib/uniris_core/transaction/cross_validation_stamp.ex b/lib/uniris/transaction/cross_validation_stamp.ex similarity index 95% rename from apps/uniris_core/lib/uniris_core/transaction/cross_validation_stamp.ex rename to lib/uniris/transaction/cross_validation_stamp.ex index ac7db183c..adac7125d 100644 --- a/apps/uniris_core/lib/uniris_core/transaction/cross_validation_stamp.ex +++ b/lib/uniris/transaction/cross_validation_stamp.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Transaction.CrossValidationStamp do +defmodule Uniris.Transaction.CrossValidationStamp do @moduledoc """ Represent a cross validation stamp validated a validation stamp. @@ -6,8 +6,8 @@ defmodule UnirisCore.Transaction.CrossValidationStamp do defstruct [:node_public_key, :signature, :inconsistencies] - alias UnirisCore.Crypto - alias UnirisCore.Transaction.ValidationStamp + alias Uniris.Crypto + alias Uniris.Transaction.ValidationStamp @typedoc """ Any cross validation stamp is composed by: @@ -87,7 +87,7 @@ defmodule UnirisCore.Transaction.CrossValidationStamp do ## Examples - iex> UnirisCore.Transaction.CrossValidationStamp.serialize(%UnirisCore.Transaction.CrossValidationStamp{ + iex> Uniris.Transaction.CrossValidationStamp.serialize(%Uniris.Transaction.CrossValidationStamp{ ...> node_public_key: <<0, 32, 44, 135, 146, 55, 226, 199, 234, 83, 141, 249, 46, 64, 213, 172, 218, 137, ...> 35, 16, 193, 228, 78, 130, 36, 204, 242, 96, 90, 230, 5, 193, 137>>, ...> signature: <<70, 102, 163, 198, 192, 91, 177, 10, 201, 156, 10, 109, 165, 39, 226, 156, 72, @@ -145,9 +145,9 @@ defmodule UnirisCore.Transaction.CrossValidationStamp do ...> 195, 74, 85, 242, 164, 44, 225, 204, 233, 91, 217, 177, 243, 234, 229, 72, ...> 149, 17, 40, 182, 207, 127, 193, 3, 194, 156, 105, 209, 43, 161, ...> 3, 0, 1, 2>> - ...> |> UnirisCore.Transaction.CrossValidationStamp.deserialize() + ...> |> Uniris.Transaction.CrossValidationStamp.deserialize() { - %UnirisCore.Transaction.CrossValidationStamp{ + %Uniris.Transaction.CrossValidationStamp{ node_public_key: <<0, 32, 44, 135, 146, 55, 226, 199, 234, 83, 141, 249, 46, 64, 213, 172, 218, 137, 35, 16, 193, 228, 78, 130, 36, 204, 242, 96, 90, 230, 5, 193, 137>>, signature: <<70, 102, 163, 198, 192, 91, 177, 10, 201, 156, 10, 109, 165, 39, 226, 156, 72, diff --git a/apps/uniris_core/lib/uniris_core/transaction/data.ex b/lib/uniris/transaction/data.ex similarity index 90% rename from apps/uniris_core/lib/uniris_core/transaction/data.ex rename to lib/uniris/transaction/data.ex index e50d400a8..7977c3e1e 100755 --- a/apps/uniris_core/lib/uniris_core/transaction/data.ex +++ b/lib/uniris/transaction/data.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.TransactionData do +defmodule Uniris.TransactionData do @moduledoc """ Represents any transaction data block """ @@ -7,7 +7,7 @@ defmodule UnirisCore.TransactionData do defstruct recipients: [], ledger: %Ledger{}, code: "", keys: %Keys{}, content: "" - alias UnirisCore.Crypto + alias Uniris.Crypto @typedoc """ Transaction data is composed from: @@ -30,14 +30,14 @@ defmodule UnirisCore.TransactionData do ## Examples - iex> UnirisCore.TransactionData.serialize(%UnirisCore.TransactionData{ + iex> Uniris.TransactionData.serialize(%Uniris.TransactionData{ ...> code: "actions do new_transaction(:transfer) |> put_uco_transfer(to: 892B5257A038BBB14F0DD8734FA09A50F4F55E8856B72F96F2A6014EEB8A2EAB72, amount: 10.5) end", ...> content: "Lorem ipsum dolor sit amet, consectetur adipiscing eli", - ...> keys: %UnirisCore.TransactionData.Keys{ + ...> keys: %Uniris.TransactionData.Keys{ ...> secret: <<225, 11, 213, 74, 41, 54, 189, 139, 179, 79>>, ...> authorized_keys: %{} ...> }, - ...> ledger: %UnirisCore.TransactionData.Ledger{}, + ...> ledger: %Uniris.TransactionData.Ledger{}, ...> recipients: [ ...> <<0, 98, 220, 40, 53, 113, 34, 14, 142, 121, 132, 166, 27, 147, 41, 129, 195, 168, ...> 241, 217, 111, 115, 164, 99, 135, 86, 123, 17, 195, 106, 248, 173, 31>> @@ -97,17 +97,17 @@ defmodule UnirisCore.TransactionData do ...> 0, 98, 220, 40, 53, 113, 34, 14, 142, 121, 132, 166, 27, 147, 41, 129, 195, 168, ...> 241, 217, 111, 115, 164, 99, 135, 86, 123, 17, 195, 106, 248, 173, 31 ...> >> - ...> |> UnirisCore.TransactionData.deserialize() + ...> |> Uniris.TransactionData.deserialize() { - %UnirisCore.TransactionData{ + %Uniris.TransactionData{ code: "actions do new_transaction(:transfer) |> put_uco_transfer(to: 892B5257A038BBB14F0DD8734FA09A50F4F55E8856B72F96F2A6014EEB8A2EAB72, amount: 10.5) end", content: "Lorem ipsum dolor sit amet, consectetur adipiscing eli", - keys: %UnirisCore.TransactionData.Keys{ + keys: %Uniris.TransactionData.Keys{ secret: <<225, 11, 213, 74, 41, 54, 189, 139, 179, 79>>, authorized_keys: %{} }, - ledger: %UnirisCore.TransactionData.Ledger{ - uco: %UnirisCore.TransactionData.UCOLedger{} + ledger: %Uniris.TransactionData.Ledger{ + uco: %Uniris.TransactionData.UCOLedger{} }, recipients: [ <<0, 98, 220, 40, 53, 113, 34, 14, 142, 121, 132, 166, 27, 147, 41, 129, 195, 168, diff --git a/apps/uniris_core/lib/uniris_core/transaction/data/keys.ex b/lib/uniris/transaction/data/keys.ex similarity index 94% rename from apps/uniris_core/lib/uniris_core/transaction/data/keys.ex rename to lib/uniris/transaction/data/keys.ex index 9d876cdde..246e4b98a 100644 --- a/apps/uniris_core/lib/uniris_core/transaction/data/keys.ex +++ b/lib/uniris/transaction/data/keys.ex @@ -1,11 +1,11 @@ -defmodule UnirisCore.TransactionData.Keys do +defmodule Uniris.TransactionData.Keys do @moduledoc """ Represents section in the transaction data to store secret and authorized keys to read the encrypted secret. """ defstruct authorized_keys: %{}, secret: "" - alias UnirisCore.Crypto + alias Uniris.Crypto @type t :: %__MODULE__{ secret: binary(), @@ -19,8 +19,8 @@ defmodule UnirisCore.TransactionData.Keys do iex> secret_key = :crypto.strong_rand_bytes(32) iex> secret = "important message" - iex> {pub, pv} = UnirisCore.Crypto.generate_deterministic_keypair("seed") - iex> %{ authorized_keys: authorized_keys, secret: _} = UnirisCore.TransactionData.Keys.new([pub], secret_key, secret) + iex> {pub, pv} = Uniris.Crypto.generate_deterministic_keypair("seed") + iex> %{ authorized_keys: authorized_keys, secret: _} = Uniris.TransactionData.Keys.new([pub], secret_key, secret) iex> Map.keys(authorized_keys) [ <<0, 221, 228, 196, 111, 16, 222, 0, 119, 32, 150, 228, 25, 206, 79, 37, 213, 8, 130, 22, 212, 99, 55, 72, 11, 248, 250, 11, 140, 137, 167, 118, 253>> ] """ @@ -38,7 +38,7 @@ defmodule UnirisCore.TransactionData.Keys do ## Examples - iex> UnirisCore.TransactionData.Keys.serialize(%UnirisCore.TransactionData.Keys{ + iex> Uniris.TransactionData.Keys.serialize(%Uniris.TransactionData.Keys{ ...> secret: <<205, 124, 251, 211, 28, 69, 249, 1, 58, 108, 16, 35, 23, 206, 198, 202>>, ...> authorized_keys: %{ ...> <<0, 229, 188, 159, 80, 100, 5, 54, 152, 137, 201, 204, 24, 22, 125, 76, 29, @@ -91,9 +91,9 @@ defmodule UnirisCore.TransactionData.Keys do ...> 233, 227, 98, 209, 211, 97, 117, 68, 101, 59, 121, 214, 105, 225, 218, 91, 92, ...> 212, 162, 48, 18, 15, 181, 70, 103, 32, 141, 4, 64, 107, 93, 117, 188, 244, 7, ...> 224, 214, 225, 146, 44, 83, 111, 34, 239, 99, 1, 126, 241, 246>> - ...> |> UnirisCore.TransactionData.Keys.deserialize() + ...> |> Uniris.TransactionData.Keys.deserialize() { - %UnirisCore.TransactionData.Keys{ + %Uniris.TransactionData.Keys{ secret: <<205, 124, 251, 211, 28, 69, 249, 1, 58, 108, 16, 35, 23, 206, 198, 202>>, authorized_keys: %{ <<0, 229, 188, 159, 80, 100, 5, 54, 152, 137, 201, 204, 24, 22, 125, 76, 29, diff --git a/apps/uniris_core/lib/uniris_core/transaction/data/ledger.ex b/lib/uniris/transaction/data/ledger.ex similarity index 78% rename from apps/uniris_core/lib/uniris_core/transaction/data/ledger.ex rename to lib/uniris/transaction/data/ledger.ex index b0a96b178..24a46e838 100755 --- a/apps/uniris_core/lib/uniris_core/transaction/data/ledger.ex +++ b/lib/uniris/transaction/data/ledger.ex @@ -1,8 +1,8 @@ -defmodule UnirisCore.TransactionData.Ledger do +defmodule Uniris.TransactionData.Ledger do @moduledoc """ Represents transaction ledger movements """ - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.TransactionData.UCOLedger defstruct uco: %UCOLedger{} @@ -19,9 +19,9 @@ defmodule UnirisCore.TransactionData.Ledger do ## Examples - iex> UnirisCore.TransactionData.Ledger.serialize(%UnirisCore.TransactionData.Ledger{ - ...> uco: %UnirisCore.TransactionData.UCOLedger{transfers: [ - ...> %UnirisCore.TransactionData.Ledger.Transfer{ + iex> Uniris.TransactionData.Ledger.serialize(%Uniris.TransactionData.Ledger{ + ...> uco: %Uniris.TransactionData.UCOLedger{transfers: [ + ...> %Uniris.TransactionData.Ledger.Transfer{ ...> to: <<0, 59, 140, 2, 130, 52, 88, 206, 176, 29, 10, 173, 95, 179, 27, 166, 66, 52, ...> 165, 11, 146, 194, 246, 89, 73, 85, 202, 120, 242, 136, 136, 63, 53>>, ...> amount: 10.5 @@ -51,12 +51,12 @@ defmodule UnirisCore.TransactionData.Ledger do iex> <<1, 0, 59, 140, 2, 130, 52, 88, 206, 176, 29, 10, 173, 95, 179, 27, 166, 66, 52, ...> 165, 11, 146, 194, 246, 89, 73, 85, 202, 120, 242, 136, 136, 63, 53, ...> 64, 37, 0, 0, 0, 0, 0, 0>> - ...> |> UnirisCore.TransactionData.Ledger.deserialize() + ...> |> Uniris.TransactionData.Ledger.deserialize() { - %UnirisCore.TransactionData.Ledger{ - uco: %UnirisCore.TransactionData.UCOLedger{ + %Uniris.TransactionData.Ledger{ + uco: %Uniris.TransactionData.UCOLedger{ transfers: [ - %UnirisCore.TransactionData.Ledger.Transfer{ + %Uniris.TransactionData.Ledger.Transfer{ to: <<0, 59, 140, 2, 130, 52, 88, 206, 176, 29, 10, 173, 95, 179, 27, 166, 66, 52, 165, 11, 146, 194, 246, 89, 73, 85, 202, 120, 242, 136, 136, 63, 53>>, amount: 10.5 diff --git a/apps/uniris_core/lib/uniris_core/transaction/data/ledger/transfer.ex b/lib/uniris/transaction/data/ledger/transfer.ex similarity index 87% rename from apps/uniris_core/lib/uniris_core/transaction/data/ledger/transfer.ex rename to lib/uniris/transaction/data/ledger/transfer.ex index 49da4732a..42c61150b 100755 --- a/apps/uniris_core/lib/uniris_core/transaction/data/ledger/transfer.ex +++ b/lib/uniris/transaction/data/ledger/transfer.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.TransactionData.Ledger.Transfer do +defmodule Uniris.TransactionData.Ledger.Transfer do @moduledoc """ Represents any ledger transfer """ defstruct [:to, :amount, :conditions] - alias UnirisCore.Crypto + alias Uniris.Crypto @typedoc """ Recipient address of the ledger transfers @@ -33,7 +33,7 @@ defmodule UnirisCore.TransactionData.Ledger.Transfer do ## Examples - iex> UnirisCore.TransactionData.Ledger.Transfer.serialize(%UnirisCore.TransactionData.Ledger.Transfer{ + iex> Uniris.TransactionData.Ledger.Transfer.serialize(%Uniris.TransactionData.Ledger.Transfer{ ...> to: <<0, 104, 134, 142, 120, 40, 59, 99, 108, 63, 166, 143, 250, 93, 186, 216, 117, ...> 85, 106, 43, 26, 120, 35, 44, 137, 243, 184, 160, 251, 223, 0, 93, 14>>, ...> amount: 10.5 @@ -59,9 +59,9 @@ defmodule UnirisCore.TransactionData.Ledger.Transfer do ...> 0, 104, 134, 142, 120, 40, 59, 99, 108, 63, 166, 143, 250, 93, 186, 216, 117, ...> 85, 106, 43, 26, 120, 35, 44, 137, 243, 184, 160, 251, 223, 0, 93, 14, ...> 64, 37, 0, 0, 0, 0, 0, 0>> - ...> |> UnirisCore.TransactionData.Ledger.Transfer.deserialize() + ...> |> Uniris.TransactionData.Ledger.Transfer.deserialize() { - %UnirisCore.TransactionData.Ledger.Transfer{ + %Uniris.TransactionData.Ledger.Transfer{ to: <<0, 104, 134, 142, 120, 40, 59, 99, 108, 63, 166, 143, 250, 93, 186, 216, 117, 85, 106, 43, 26, 120, 35, 44, 137, 243, 184, 160, 251, 223, 0, 93, 14>>, amount: 10.5 diff --git a/apps/uniris_core/lib/uniris_core/transaction/data/ledger/uco.ex b/lib/uniris/transaction/data/ledger/uco.ex similarity index 79% rename from apps/uniris_core/lib/uniris_core/transaction/data/ledger/uco.ex rename to lib/uniris/transaction/data/ledger/uco.ex index 3ad9ed1ac..83d40c321 100755 --- a/apps/uniris_core/lib/uniris_core/transaction/data/ledger/uco.ex +++ b/lib/uniris/transaction/data/ledger/uco.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.TransactionData.UCOLedger do +defmodule Uniris.TransactionData.UCOLedger do @moduledoc """ Represents a UCO ledger movement """ defstruct [:fee, transfers: []] - alias UnirisCore.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.Ledger.Transfer @typedoc """ UCO movement is composed from: @@ -21,8 +21,8 @@ defmodule UnirisCore.TransactionData.UCOLedger do ## Examples - iex> UnirisCore.TransactionData.UCOLedger.serialize(%UnirisCore.TransactionData.UCOLedger{transfers: [ - ...> %UnirisCore.TransactionData.Ledger.Transfer{ + iex> Uniris.TransactionData.UCOLedger.serialize(%Uniris.TransactionData.UCOLedger{transfers: [ + ...> %Uniris.TransactionData.Ledger.Transfer{ ...> to: <<0, 59, 140, 2, 130, 52, 88, 206, 176, 29, 10, 173, 95, 179, 27, 166, 66, 52, ...> 165, 11, 146, 194, 246, 89, 73, 85, 202, 120, 242, 136, 136, 63, 53>>, ...> amount: 10.5 @@ -38,7 +38,7 @@ defmodule UnirisCore.TransactionData.UCOLedger do 64, 37, 0, 0, 0, 0, 0, 0 >> """ - @spec serialize(UnirisCore.TransactionData.UCOLedger.t()) :: binary() + @spec serialize(Uniris.TransactionData.UCOLedger.t()) :: binary() def serialize(%__MODULE__{transfers: transfers}) do transfers_bin = Enum.map(transfers, &Transfer.serialize/1) |> :erlang.list_to_binary() <> @@ -51,11 +51,11 @@ defmodule UnirisCore.TransactionData.UCOLedger do iex> <<1, 0, 59, 140, 2, 130, 52, 88, 206, 176, 29, 10, 173, 95, 179, 27, 166, 66, 52, ...> 165, 11, 146, 194, 246, 89, 73, 85, 202, 120, 242, 136, 136, 63, 53, 64, 37, 0, 0, 0, 0, 0, 0>> - ...> |> UnirisCore.TransactionData.UCOLedger.deserialize() + ...> |> Uniris.TransactionData.UCOLedger.deserialize() { - %UnirisCore.TransactionData.UCOLedger{ + %Uniris.TransactionData.UCOLedger{ transfers: [ - %UnirisCore.TransactionData.Ledger.Transfer{ + %Uniris.TransactionData.Ledger.Transfer{ to: <<0, 59, 140, 2, 130, 52, 88, 206, 176, 29, 10, 173, 95, 179, 27, 166, 66, 52, 165, 11, 146, 194, 246, 89, 73, 85, 202, 120, 242, 136, 136, 63, 53>>, amount: 10.5 @@ -65,10 +65,10 @@ defmodule UnirisCore.TransactionData.UCOLedger do "" } - iex> UnirisCore.TransactionData.UCOLedger.deserialize(<<0, 156, 213, 216, 36, 138, 118, 198, 118, 250, 70, 24, 14, 67, 139, 145, 229, + iex> Uniris.TransactionData.UCOLedger.deserialize(<<0, 156, 213, 216, 36, 138, 118, 198, 118, 250, 70, 24, 14, 67, 139, 145, 229, ...> 210, 59, 183, 114, 172, 168, 216, 88, 80, 55, 26, 25, 160, 146, 13, 131>>) { - %UnirisCore.TransactionData.UCOLedger{ + %Uniris.TransactionData.UCOLedger{ transfers: [] }, <<156, 213, 216, 36, 138, 118, 198, 118, 250, 70, 24, 14, 67, 139, 145, 229, diff --git a/apps/uniris_core/lib/uniris_core/transaction/input.ex b/lib/uniris/transaction/input.ex similarity index 87% rename from apps/uniris_core/lib/uniris_core/transaction/input.ex rename to lib/uniris/transaction/input.ex index d8abc2e31..0db399017 100644 --- a/apps/uniris_core/lib/uniris_core/transaction/input.ex +++ b/lib/uniris/transaction/input.ex @@ -1,10 +1,10 @@ -defmodule UnirisCore.TransactionInput do +defmodule Uniris.TransactionInput do @moduledoc """ Represents an input from a transaction either spent or unspent """ defstruct [:from, :amount, :spent?] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t() :: %__MODULE__{ from: Crypto.versioned_hash(), @@ -17,13 +17,13 @@ defmodule UnirisCore.TransactionInput do ## Examples - iex> %UnirisCore.TransactionInput{ + iex> %Uniris.TransactionInput{ ...> from: <<0, 53, 130, 31, 59, 131, 78, 78, 34, 179, 66, 2, 120, 117, 4, 119, 81, 111, 187, ...> 166, 83, 194, 42, 253, 99, 189, 24, 68, 40, 178, 142, 163, 56>>, ...> amount: 10.5, ...> spent?: true ...> } - ...> |> UnirisCore.TransactionInput.serialize() + ...> |> Uniris.TransactionInput.serialize() << # From 0, 53, 130, 31, 59, 131, 78, 78, 34, 179, 66, 2, 120, 117, 4, 119, 81, 111, 187, @@ -48,16 +48,16 @@ defmodule UnirisCore.TransactionInput do ## Examples - iex> %UnirisCore.TransactionInput{ + iex> %Uniris.TransactionInput{ ...> from: <<0, 53, 130, 31, 59, 131, 78, 78, 34, 179, 66, 2, 120, 117, 4, 119, 81, 111, 187, ...> 166, 83, 194, 42, 253, 99, 189, 24, 68, 40, 178, 142, 163, 56>>, ...> amount: 10.5, ...> spent?: true ...> } - ...> |> UnirisCore.TransactionInput.serialize() - ...> |> UnirisCore.TransactionInput.deserialize() + ...> |> Uniris.TransactionInput.serialize() + ...> |> Uniris.TransactionInput.deserialize() { - %UnirisCore.TransactionInput{ + %Uniris.TransactionInput{ from: <<0, 53, 130, 31, 59, 131, 78, 78, 34, 179, 66, 2, 120, 117, 4, 119, 81, 111, 187, 166, 83, 194, 42, 253, 99, 189, 24, 68, 40, 178, 142, 163, 56>>, amount: 10.5, diff --git a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp.ex b/lib/uniris/transaction/validation_stamp.ex similarity index 92% rename from apps/uniris_core/lib/uniris_core/transaction/validation_stamp.ex rename to lib/uniris/transaction/validation_stamp.ex index 61feb23d0..3f0d2be25 100755 --- a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp.ex +++ b/lib/uniris/transaction/validation_stamp.ex @@ -1,17 +1,17 @@ -defmodule UnirisCore.Transaction.ValidationStamp do +defmodule Uniris.Transaction.ValidationStamp do @moduledoc """ Represents a validation stamp created by a coordinator on a pending transaction """ - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Mining.Context - alias UnirisCore.Mining.Fee - alias UnirisCore.Mining.ProofOfIntegrity - alias UnirisCore.Mining.ProofOfWork + alias Uniris.Mining.Context + alias Uniris.Mining.Fee + alias Uniris.Mining.ProofOfIntegrity + alias Uniris.Mining.ProofOfWork - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp.LedgerOperations defstruct [ :signature, @@ -172,12 +172,12 @@ defmodule UnirisCore.Transaction.ValidationStamp do ## Examples - iex> UnirisCore.Transaction.ValidationStamp.serialize(%UnirisCore.Transaction.ValidationStamp{ + iex> Uniris.Transaction.ValidationStamp.serialize(%Uniris.Transaction.ValidationStamp{ ...> proof_of_work: <<0, 34, 248, 200, 166, 69, 102, 246, 46, 84, 7, 6, 84, 66, 27, 8, 78, 103, 37, ...> 155, 114, 208, 205, 40, 44, 6, 159, 178, 5, 186, 168, 237, 206>>, ...> proof_of_integrity: <<0, 49, 174, 251, 208, 41, 135, 147, 199, 114, 232, 140, 254, 103, 186, 138, 175, ...> 28, 156, 201, 30, 100, 75, 172, 95, 135, 167, 180, 242, 16, 74, 87, 170>>, - ...> ledger_operations: %UnirisCore.Transaction.ValidationStamp.LedgerOperations{ fee: 0.1, transaction_movements: [], node_movements: [], unspent_outputs: []}, + ...> ledger_operations: %Uniris.Transaction.ValidationStamp.LedgerOperations{ fee: 0.1, transaction_movements: [], node_movements: [], unspent_outputs: []}, ...> signature: <<67, 12, 4, 246, 155, 34, 32, 108, 195, 54, 139, 8, 77, 152, 5, 55, 233, 217, ...> 126, 181, 204, 195, 215, 239, 124, 186, 99, 187, 251, 243, 201, 6, 122, 65, ...> 238, 221, 14, 89, 120, 225, 39, 33, 95, 95, 225, 113, 143, 200, 47, 96, 239, @@ -240,14 +240,14 @@ defmodule UnirisCore.Transaction.ValidationStamp do ...> 126, 181, 204, 195, 215, 239, 124, 186, 99, 187, 251, 243, 201, 6, 122, 65, ...> 238, 221, 14, 89, 120, 225, 39, 33, 95, 95, 225, 113, 143, 200, 47, 96, 239, ...> 66, 182, 168, 35, 129, 240, 35, 183, 47, 69, 154, 37, 172>> - ...> |> UnirisCore.Transaction.ValidationStamp.deserialize() + ...> |> Uniris.Transaction.ValidationStamp.deserialize() { - %UnirisCore.Transaction.ValidationStamp{ + %Uniris.Transaction.ValidationStamp{ proof_of_work: <<0, 34, 248, 200, 166, 69, 102, 246, 46, 84, 7, 6, 84, 66, 27, 8, 78, 103, 37, 155, 114, 208, 205, 40, 44, 6, 159, 178, 5, 186, 168, 237, 206,>>, proof_of_integrity: << 0, 49, 174, 251, 208, 41, 135, 147, 199, 114, 232, 140, 254, 103, 186, 138, 175, 28, 156, 201, 30, 100, 75, 172, 95, 135, 167, 180, 242, 16, 74, 87, 170>>, - ledger_operations: %UnirisCore.Transaction.ValidationStamp.LedgerOperations{ + ledger_operations: %Uniris.Transaction.ValidationStamp.LedgerOperations{ fee: 0.1, transaction_movements: [], node_movements: [], diff --git a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations.ex b/lib/uniris/transaction/validation_stamp/ledger_operations.ex similarity index 91% rename from apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations.ex rename to lib/uniris/transaction/validation_stamp/ledger_operations.ex index d9d5be74e..31fcfe3dc 100644 --- a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations.ex +++ b/lib/uniris/transaction/validation_stamp/ledger_operations.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations do +defmodule Uniris.Transaction.ValidationStamp.LedgerOperations do @moduledoc """ Set of the ledger operations taken by the network (transaction movements, node rewards, unspent outputs, fee) defined during the transaction mining @@ -9,20 +9,20 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations do unspent_outputs: [], fee: 0.0 - alias UnirisCore.Crypto - alias UnirisCore.Election + alias Uniris.Crypto + alias Uniris.Election - alias UnirisCore.Mining.Fee + alias Uniris.Mining.Fee - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger @type t() :: %__MODULE__{ transaction_movements: list(TransactionMovement.t()), @@ -285,24 +285,24 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations do ## Examples - iex> UnirisCore.Transaction.ValidationStamp.LedgerOperations.serialize(%UnirisCore.Transaction.ValidationStamp.LedgerOperations{ + iex> Uniris.Transaction.ValidationStamp.LedgerOperations.serialize(%Uniris.Transaction.ValidationStamp.LedgerOperations{ ...> fee: 0.1, ...> transaction_movements: [ - ...> %UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement{ + ...> %Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement{ ...> to: <<0, 34, 118, 242, 194, 93, 131, 130, 195, 9, 97, 237, 220, 195, 112, 1, 54, 221, ...> 86, 154, 234, 96, 217, 149, 84, 188, 63, 242, 166, 47, 158, 139, 207>>, ...> amount: 10.2 ...> } ...> ], ...> node_movements: [ - ...> %UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement{ + ...> %Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement{ ...> to: <<0, 34, 118, 242, 194, 93, 131, 130, 195, 9, 97, 237, 220, 195, 112, 1, 54, 221, ...> 86, 154, 234, 96, 217, 149, 84, 188, 63, 242, 166, 47, 158, 139, 207>>, ...> amount: 0.3 ...> } ...> ], ...> unspent_outputs: [ - ...> %UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput{ + ...> %Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput{ ...> from: <<0, 34, 118, 242, 194, 93, 131, 130, 195, 9, 97, 237, 220, 195, 112, 1, 54, 221, ...> 86, 154, 234, 96, 217, 149, 84, 188, 63, 242, 166, 47, 158, 139, 207>>, ...> amount: 2.0 @@ -369,26 +369,26 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations do ...> 63, 211, 51, 51, 51, 51, 51, 51, 1, 0, 34, 118, 242, 194, 93, 131, 130, 195, 9, 97, 237, ...> 220, 195, 112, 1, 54, 221, 86, 154, 234, 96, 217, 149, 84, 188, 63, 242, 166, 47, 158, 139, 207, ...> 64, 0, 0, 0, 0, 0, 0, 0 >> - ...> |> UnirisCore.Transaction.ValidationStamp.LedgerOperations.deserialize() + ...> |> Uniris.Transaction.ValidationStamp.LedgerOperations.deserialize() { - %UnirisCore.Transaction.ValidationStamp.LedgerOperations{ + %Uniris.Transaction.ValidationStamp.LedgerOperations{ fee: 0.1, transaction_movements: [ - %UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement{ + %Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement{ to: <<0, 34, 118, 242, 194, 93, 131, 130, 195, 9, 97, 237, 220, 195, 112, 1, 54, 221, 86, 154, 234, 96, 217, 149, 84, 188, 63, 242, 166, 47, 158, 139, 207>>, amount: 10.2 } ], node_movements: [ - %UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement{ + %Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement{ to: <<0, 34, 118, 242, 194, 93, 131, 130, 195, 9, 97, 237, 220, 195, 112, 1, 54, 221, 86, 154, 234, 96, 217, 149, 84, 188, 63, 242, 166, 47, 158, 139, 207>>, amount: 0.3 } ], unspent_outputs: [ - %UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput{ + %Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput{ from: <<0, 34, 118, 242, 194, 93, 131, 130, 195, 9, 97, 237, 220, 195, 112, 1, 54, 221, 86, 154, 234, 96, 217, 149, 84, 188, 63, 242, 166, 47, 158, 139, 207>>, amount: 2.0 diff --git a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/node_movement.ex b/lib/uniris/transaction/validation_stamp/ledger_operations/node_movement.ex similarity index 80% rename from apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/node_movement.ex rename to lib/uniris/transaction/validation_stamp/ledger_operations/node_movement.ex index a41071d09..03126f1da 100644 --- a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/node_movement.ex +++ b/lib/uniris/transaction/validation_stamp/ledger_operations/node_movement.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement do +defmodule Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement do @moduledoc """ Represents the movements regarding the nodes involved during the transaction validation. The node public keys are present as well as their rewards @@ -11,15 +11,15 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement d amount: float() } - alias UnirisCore.Crypto + alias Uniris.Crypto @doc """ Serialize a node movement into binary format ## Examples - iex> UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement.serialize( - ...> %UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement{ + iex> Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement.serialize( + ...> %Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement{ ...> to: <<0, 214, 107, 17, 107, 227, 11, 17, 43, 204, 48, 78, 129, 145, 126, 45, 68, 194, ...> 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186>>, ...> amount: 0.30 @@ -47,9 +47,9 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement d ...> 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186, ...> 63, 211, 51, 51, 51, 51, 51, 51 ...> >> - ...> |> UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement.deserialize() + ...> |> Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement.deserialize() { - %UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement{ + %Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement{ to: <<0, 214, 107, 17, 107, 227, 11, 17, 43, 204, 48, 78, 129, 145, 126, 45, 68, 194, 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186>>, amount: 0.30 diff --git a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/transaction_movement.ex b/lib/uniris/transaction/validation_stamp/ledger_operations/transaction_movement.ex similarity index 79% rename from apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/transaction_movement.ex rename to lib/uniris/transaction/validation_stamp/ledger_operations/transaction_movement.ex index 6c9165d21..723a75f6d 100644 --- a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/transaction_movement.ex +++ b/lib/uniris/transaction/validation_stamp/ledger_operations/transaction_movement.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement do +defmodule Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement do @moduledoc """ Represents the ledger movements of the transaction extracted from the ledger or recipients part of the transaction and validated with the UTXO @@ -6,7 +6,7 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMov @enforce_keys [:to, :amount] defstruct [:to, :amount] - alias UnirisCore.Crypto + alias Uniris.Crypto @type t() :: %__MODULE__{ to: binary(), @@ -18,8 +18,8 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMov ## Examples - iex> UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement.serialize( - ...> %UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement{ + iex> Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement.serialize( + ...> %Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement{ ...> to: <<0, 214, 107, 17, 107, 227, 11, 17, 43, 204, 48, 78, 129, 145, 126, 45, 68, 194, ...> 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186>>, ...> amount: 0.30 @@ -47,9 +47,9 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMov ...> 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186, ...> 63, 211, 51, 51, 51, 51, 51, 51 ...> >> - ...> |> UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement.deserialize() + ...> |> Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement.deserialize() { - %UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement{ + %Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement{ to: <<0, 214, 107, 17, 107, 227, 11, 17, 43, 204, 48, 78, 129, 145, 126, 45, 68, 194, 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186>>, amount: 0.30 diff --git a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/unspent_output.ex b/lib/uniris/transaction/validation_stamp/ledger_operations/unspent_output.ex similarity index 79% rename from apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/unspent_output.ex rename to lib/uniris/transaction/validation_stamp/ledger_operations/unspent_output.ex index 734a813c0..d0dd17e19 100644 --- a/apps/uniris_core/lib/uniris_core/transaction/validation_stamp/ledger_operations/unspent_output.ex +++ b/lib/uniris/transaction/validation_stamp/ledger_operations/unspent_output.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput do +defmodule Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput do @moduledoc """ Represents an unspent output from a transaction. """ @@ -10,15 +10,15 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput from: binary() } - alias UnirisCore.Crypto + alias Uniris.Crypto @doc """ Serialize unspent output into binary format ## Examples - iex> UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput.serialize( - ...> %UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput{ + iex> Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput.serialize( + ...> %Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput{ ...> from: <<0, 214, 107, 17, 107, 227, 11, 17, 43, 204, 48, 78, 129, 145, 126, 45, 68, 194, ...> 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186>>, ...> amount: 10.5 @@ -46,9 +46,9 @@ defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput ...> 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186, ...> 64, 37, 0, 0, 0, 0, 0, 0 ...> >> - ...> |> UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput.deserialize() + ...> |> Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput.deserialize() { - %UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput{ + %Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput{ from: <<0, 214, 107, 17, 107, 227, 11, 17, 43, 204, 48, 78, 129, 145, 126, 45, 68, 194, 159, 19, 92, 240, 29, 37, 105, 183, 232, 56, 42, 163, 236, 251, 186>>, amount: 10.5 diff --git a/apps/uniris_core/lib/uniris_core/utils.ex b/lib/uniris/utils.ex similarity index 82% rename from apps/uniris_core/lib/uniris_core/utils.ex rename to lib/uniris/utils.ex index 75b256486..6d0f96563 100644 --- a/apps/uniris_core/lib/uniris_core/utils.ex +++ b/lib/uniris/utils.ex @@ -1,4 +1,4 @@ -defmodule UnirisCore.Utils do +defmodule Uniris.Utils do @moduledoc false @doc """ @@ -29,7 +29,7 @@ defmodule UnirisCore.Utils do end defp should_start?(process) do - case Application.get_env(:uniris_core, process) do + case Application.get_env(:uniris, process) do nil -> true @@ -43,17 +43,17 @@ defmodule UnirisCore.Utils do ## Examples - iex> date = UnirisCore.Utils.truncate_datetime(DateTime.utc_now()) + iex> date = Uniris.Utils.truncate_datetime(DateTime.utc_now()) iex> date.microsecond {0, 0} - iex> date = UnirisCore.Utils.truncate_datetime(DateTime.utc_now(), second?: true, microsecond?: true) + iex> date = Uniris.Utils.truncate_datetime(DateTime.utc_now(), second?: true, microsecond?: true) iex> date.second 0 iex> date.microsecond {0, 0} - iex> date = UnirisCore.Utils.truncate_datetime(DateTime.utc_now(), second?: true) + iex> date = Uniris.Utils.truncate_datetime(DateTime.utc_now(), second?: true) iex> date.second 0 """ diff --git a/apps/uniris_web/lib/uniris_web.ex b/lib/uniris_web.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web.ex rename to lib/uniris_web.ex diff --git a/apps/uniris_web/lib/uniris_web/channels/user_socket.ex b/lib/uniris_web/channels/user_socket.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web/channels/user_socket.ex rename to lib/uniris_web/channels/user_socket.ex diff --git a/apps/uniris_web/lib/uniris_web/controllers/explorer_controller.ex b/lib/uniris_web/controllers/explorer_controller.ex similarity index 75% rename from apps/uniris_web/lib/uniris_web/controllers/explorer_controller.ex rename to lib/uniris_web/controllers/explorer_controller.ex index ab4acc57e..5057dbc3e 100644 --- a/apps/uniris_web/lib/uniris_web/controllers/explorer_controller.ex +++ b/lib/uniris_web/controllers/explorer_controller.ex @@ -1,8 +1,8 @@ defmodule UnirisWeb.ExplorerController do use UnirisWeb, :controller - alias UnirisCore.Crypto - alias UnirisCore.Transaction + alias Uniris.Crypto + alias Uniris.Transaction def index(conn, _params) do render(conn, "index.html") @@ -10,7 +10,7 @@ defmodule UnirisWeb.ExplorerController do def search(conn, _params = %{"address" => address}) do with {:ok, address} <- Base.decode16(address, case: :mixed), - {:ok, tx} <- UnirisCore.search_transaction(address) do + {:ok, tx} <- Uniris.search_transaction(address) do previous_address = Crypto.hash(tx.previous_public_key) render(conn, "transaction_details.html", transaction: tx, previous_address: previous_address) @@ -23,10 +23,10 @@ defmodule UnirisWeb.ExplorerController do def chain(conn, _params = %{"address" => address, "last" => "on"}) do bin_address = Base.decode16!(address, case: :mixed) - case UnirisCore.get_last_transaction(bin_address) do + case Uniris.get_last_transaction(bin_address) do {:ok, %Transaction{address: last_address}} -> - chain = UnirisCore.get_transaction_chain(last_address) - inputs = UnirisCore.get_transaction_inputs(bin_address) + chain = Uniris.get_transaction_chain(last_address) + inputs = Uniris.get_transaction_inputs(bin_address) render(conn, "chain.html", transaction_chain: chain, @@ -41,8 +41,8 @@ defmodule UnirisWeb.ExplorerController do def chain(conn, _params = %{"address" => address}) do bin_address = Base.decode16!(address, case: :mixed) - chain = UnirisCore.get_transaction_chain(bin_address) - inputs = UnirisCore.get_transaction_inputs(bin_address) + chain = Uniris.get_transaction_chain(bin_address) + inputs = Uniris.get_transaction_inputs(bin_address) render(conn, "chain.html", transaction_chain: chain, diff --git a/apps/uniris_web/lib/uniris_web/controllers/node_controller.ex b/lib/uniris_web/controllers/node_controller.ex similarity index 77% rename from apps/uniris_web/lib/uniris_web/controllers/node_controller.ex rename to lib/uniris_web/controllers/node_controller.ex index e2e1ad7df..e3b59eb10 100644 --- a/apps/uniris_web/lib/uniris_web/controllers/node_controller.ex +++ b/lib/uniris_web/controllers/node_controller.ex @@ -1,9 +1,9 @@ defmodule UnirisWeb.NodeController do use UnirisWeb, :controller - alias UnirisCore.Crypto - alias UnirisCore.P2P - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.Crypto + alias Uniris.P2P + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput def index(conn, _params) do render(conn, "index.html", nodes: P2P.list_nodes()) @@ -18,13 +18,13 @@ defmodule UnirisWeb.NodeController do inputs = node_address - |> UnirisCore.get_transaction_inputs() + |> Uniris.get_transaction_inputs() |> Enum.filter(&(&1.amount > 0.0)) |> Enum.reduce(%{}, fn %UnspentOutput{from: from, amount: amount}, acc -> Map.update(acc, from, amount, &(&1 + amount)) end) - balance = UnirisCore.get_balance(node_address) + balance = Uniris.get_balance(node_address) render(conn, "show.html", inputs: inputs, node: node, balance: balance) _ -> diff --git a/apps/uniris_web/lib/uniris_web/controllers/root_controller.ex b/lib/uniris_web/controllers/root_controller.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web/controllers/root_controller.ex rename to lib/uniris_web/controllers/root_controller.ex diff --git a/apps/uniris_web/lib/uniris_web/controllers/transaction_controller.ex b/lib/uniris_web/controllers/transaction_controller.ex similarity index 56% rename from apps/uniris_web/lib/uniris_web/controllers/transaction_controller.ex rename to lib/uniris_web/controllers/transaction_controller.ex index 14e003273..c210977d4 100644 --- a/apps/uniris_web/lib/uniris_web/controllers/transaction_controller.ex +++ b/lib/uniris_web/controllers/transaction_controller.ex @@ -1,12 +1,81 @@ defmodule UnirisWeb.TransactionController do use UnirisWeb, :controller - alias UnirisCore.Transaction - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Keys - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.Crypto + + alias Uniris.Transaction + alias Uniris.TransactionData + alias Uniris.TransactionData.Keys + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger + + def new( + conn, + _params = %{ + "address" => address, + "type" => type, + "timestamp" => timestamp, + "data" => %{ + "code" => code, + "content" => content, + "keys" => %{ + "secret" => secret, + "authorizedKeys" => authorized_keys + }, + "ledger" => %{ + "uco" => %{ + "transfers" => transfers + } + }, + "recipients" => recipients + }, + "previousPublicKey" => previous_public_key, + "previousSignature" => previous_signature + } + ) do + tx = %Transaction{ + address: Base.decode16!(address, case: :mixed), + type: decode_type(type), + timestamp: DateTime.from_unix!(timestamp, :millisecond), + data: %TransactionData{ + content: content |> Base.decode16!(case: :mixed), + code: code, + keys: %Keys{ + secret: Base.decode16!(secret, case: :mixed), + authorized_keys: + Enum.reduce(authorized_keys, %{}, fn {public_key, encrypted_secret_key}, acc -> + Map.put( + acc, + Base.decode16!(public_key, case: :mixed), + Base.decode16!(encrypted_secret_key, case: :mixed) + ) + end) + }, + ledger: %Ledger{ + uco: %UCOLedger{ + transfers: + Enum.map(transfers, fn %{"to" => to, "amount" => amount} -> + %Transfer{ + to: Base.decode16!(to, case: :mixed), + amount: amount + } + end) + } + }, + recipients: Enum.map(recipients, &Base.decode16!(&1, case: :mixed)) + }, + previous_public_key: Base.decode16!(previous_public_key, case: :mixed), + previous_signature: Base.decode16!(previous_signature, case: :mixed) + } + + tx = %{tx | origin_signature: Transaction.serialize(tx) |> Crypto.sign_with_node_key()} + Uniris.send_new_transaction(tx) + + conn + |> put_status(201) + |> json(%{status: "ok"}) + end def new( conn, @@ -69,7 +138,7 @@ defmodule UnirisWeb.TransactionController do origin_signature: Base.decode16!(origin_signature, case: :mixed) } - UnirisCore.send_new_transaction(tx) + Uniris.send_new_transaction(tx) conn |> put_status(201) @@ -80,11 +149,13 @@ defmodule UnirisWeb.TransactionController do defp decode_type("keychain"), do: :keychain defp decode_type("transfer"), do: :transfer defp decode_type("hosting"), do: :hosting + defp decode_type("code_proposal"), do: :code_proposal + defp decode_type("code_approval"), do: :code_approval def last_transaction_content(conn, params = %{"address" => address}) do with {:ok, address} <- Base.decode16(address, case: :mixed), {:ok, %Transaction{address: last_address, data: %TransactionData{content: content}}} <- - UnirisCore.get_last_transaction(address) do + Uniris.get_last_transaction(address) do mime_type = Map.get(params, "mime", "text/plain") etag = Base.encode16(last_address, case: :lower) diff --git a/apps/uniris_web/lib/uniris_web/endpoint.ex b/lib/uniris_web/endpoint.ex similarity index 93% rename from apps/uniris_web/lib/uniris_web/endpoint.ex rename to lib/uniris_web/endpoint.ex index 847cc43ae..e67d70e7b 100644 --- a/apps/uniris_web/lib/uniris_web/endpoint.ex +++ b/lib/uniris_web/endpoint.ex @@ -1,5 +1,5 @@ defmodule UnirisWeb.Endpoint do - use Phoenix.Endpoint, otp_app: :uniris_web + use Phoenix.Endpoint, otp_app: :uniris use Absinthe.Phoenix.Endpoint # The session will be stored in the cookie and signed, @@ -7,7 +7,7 @@ defmodule UnirisWeb.Endpoint do # Set :encryption_salt if you would also like to encrypt it. @session_options [ store: :cookie, - key: "_uniris_web_key", + key: "_uniris_key", signing_salt: "wwLmAJji" ] @@ -24,7 +24,7 @@ defmodule UnirisWeb.Endpoint do # when deploying your static files in production. plug(Plug.Static, at: "/", - from: :uniris_web, + from: :uniris, gzip: false, only: ~w(css fonts images js favicon.ico robots.txt) ) diff --git a/apps/uniris_web/lib/uniris_web/graphql_schema.ex b/lib/uniris_web/graphql_schema.ex similarity index 80% rename from apps/uniris_web/lib/uniris_web/graphql_schema.ex rename to lib/uniris_web/graphql_schema.ex index 9a6c35d5a..b87e65e17 100644 --- a/apps/uniris_web/lib/uniris_web/graphql_schema.ex +++ b/lib/uniris_web/graphql_schema.ex @@ -3,22 +3,22 @@ defmodule UnirisWeb.GraphQLSchema do use Absinthe.Schema - alias UnirisCore.Storage - - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionInput - - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Keys - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.Storage + + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionInput + + alias Uniris.TransactionData + alias Uniris.TransactionData.Keys + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger alias __MODULE__.TransactionType @@ -29,7 +29,7 @@ defmodule UnirisWeb.GraphQLSchema do arg(:address, non_null(:address)) resolve(fn %{address: address}, _ -> - with {:ok, tx} <- UnirisCore.search_transaction(address) do + with {:ok, tx} <- Uniris.search_transaction(address) do {:ok, format(tx)} end end) @@ -39,7 +39,7 @@ defmodule UnirisWeb.GraphQLSchema do arg(:address, non_null(:address)) resolve(fn %{address: address}, _ -> - with {:ok, tx} <- UnirisCore.get_last_transaction(address) do + with {:ok, tx} <- Uniris.get_last_transaction(address) do {:ok, format(tx)} end end) @@ -57,7 +57,7 @@ defmodule UnirisWeb.GraphQLSchema do resolve(fn %{address: address}, _ -> chain = - UnirisCore.get_transaction_chain(address) + Uniris.get_transaction_chain(address) |> Enum.map(&format/1) {:ok, chain} @@ -72,7 +72,7 @@ defmodule UnirisWeb.GraphQLSchema do end) resolve(fn address, _, _ -> - case UnirisCore.search_transaction(address) do + case Uniris.search_transaction(address) do {:ok, tx} -> {:ok, format(tx)} end @@ -87,7 +87,7 @@ defmodule UnirisWeb.GraphQLSchema do end) resolve(fn address, _, _ -> - {:ok, tx} = UnirisCore.search_transaction(address) + {:ok, tx} = Uniris.search_transaction(address) {:ok, format(tx)} end) end diff --git a/apps/uniris_web/lib/uniris_web/graphql_schema/address_type.ex b/lib/uniris_web/graphql_schema/address_type.ex similarity index 97% rename from apps/uniris_web/lib/uniris_web/graphql_schema/address_type.ex rename to lib/uniris_web/graphql_schema/address_type.ex index a3bc61885..fbd52167f 100644 --- a/apps/uniris_web/lib/uniris_web/graphql_schema/address_type.ex +++ b/lib/uniris_web/graphql_schema/address_type.ex @@ -2,7 +2,7 @@ defmodule UnirisWeb.GraphQLSchema.AddressType do @moduledoc false use Absinthe.Schema.Notation - alias UnirisCore.Crypto + alias Uniris.Crypto @desc """ The [Address] scalar type represents a cryptographic hash used in diff --git a/apps/uniris_web/lib/uniris_web/graphql_schema/content_type.ex b/lib/uniris_web/graphql_schema/content_type.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web/graphql_schema/content_type.ex rename to lib/uniris_web/graphql_schema/content_type.ex diff --git a/apps/uniris_web/lib/uniris_web/graphql_schema/datetime_type.ex b/lib/uniris_web/graphql_schema/datetime_type.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web/graphql_schema/datetime_type.ex rename to lib/uniris_web/graphql_schema/datetime_type.ex diff --git a/apps/uniris_web/lib/uniris_web/graphql_schema/hex_type.ex b/lib/uniris_web/graphql_schema/hex_type.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web/graphql_schema/hex_type.ex rename to lib/uniris_web/graphql_schema/hex_type.ex diff --git a/apps/uniris_web/lib/uniris_web/graphql_schema/transaction_type.ex b/lib/uniris_web/graphql_schema/transaction_type.ex similarity index 95% rename from apps/uniris_web/lib/uniris_web/graphql_schema/transaction_type.ex rename to lib/uniris_web/graphql_schema/transaction_type.ex index 75b645de8..813a59bfb 100644 --- a/apps/uniris_web/lib/uniris_web/graphql_schema/transaction_type.ex +++ b/lib/uniris_web/graphql_schema/transaction_type.ex @@ -8,7 +8,7 @@ defmodule UnirisWeb.GraphQLSchema.TransactionType do import_types(UnirisWeb.GraphQLSchema.ContentType) import_types(UnirisWeb.GraphQLSchema.AddressType) - alias UnirisCore.Crypto + alias Uniris.Crypto @desc """ The [TransactionType] enum represents the type of Uniris transactions. @@ -39,26 +39,26 @@ defmodule UnirisWeb.GraphQLSchema.TransactionType do field :inputs, list_of(:unspent_output) do resolve(fn _, %{source: %{address: address}} -> - {:ok, UnirisCore.get_transaction_inputs(address)} + {:ok, Uniris.get_transaction_inputs(address)} end) end field :balance, :float do resolve(fn _, %{source: %{address: address}} -> - {:ok, UnirisCore.get_balance(address)} + {:ok, Uniris.get_balance(address)} end) end field :chain_length, :integer do resolve(fn _, %{source: %{address: address}} -> - {:ok, UnirisCore.get_transaction_chain_length(address)} + {:ok, Uniris.get_transaction_chain_length(address)} end) end field :previous_transaction, :transaction do resolve(fn _, %{source: %{previous_public_key: previous_public_key}} -> previous_address = Crypto.hash(previous_public_key) - UnirisCore.search_transaction(previous_address) + Uniris.search_transaction(previous_address) end) end end diff --git a/apps/uniris_web/lib/uniris_web/live/top_node_live.ex b/lib/uniris_web/live/top_node_live.ex similarity index 91% rename from apps/uniris_web/lib/uniris_web/live/top_node_live.ex rename to lib/uniris_web/live/top_node_live.ex index b4ff925a2..6512ed888 100644 --- a/apps/uniris_web/lib/uniris_web/live/top_node_live.ex +++ b/lib/uniris_web/live/top_node_live.ex @@ -4,9 +4,9 @@ defmodule UnirisWeb.TopNodeLive do alias Phoenix.View - alias UnirisCore.P2P - alias UnirisCore.P2P.Node - alias UnirisCore.PubSub + alias Uniris.P2P + alias Uniris.P2P.Node + alias Uniris.PubSub alias UnirisWeb.ExplorerView def mount(_params, _session, socket) do diff --git a/apps/uniris_web/lib/uniris_web/live/top_transactions_live.ex b/lib/uniris_web/live/top_transactions_live.ex similarity index 90% rename from apps/uniris_web/lib/uniris_web/live/top_transactions_live.ex rename to lib/uniris_web/live/top_transactions_live.ex index 686256eec..ead1d2492 100644 --- a/apps/uniris_web/lib/uniris_web/live/top_transactions_live.ex +++ b/lib/uniris_web/live/top_transactions_live.ex @@ -4,9 +4,9 @@ defmodule UnirisWeb.TopTransactionLive do alias Phoenix.View - alias UnirisCore.PubSub - alias UnirisCore.Storage - alias UnirisCore.Transaction + alias Uniris.PubSub + alias Uniris.Storage + alias Uniris.Transaction alias UnirisWeb.ExplorerView diff --git a/apps/uniris_web/lib/uniris_web/live/transaction_details_live.ex b/lib/uniris_web/live/transaction_details_live.ex similarity index 80% rename from apps/uniris_web/lib/uniris_web/live/transaction_details_live.ex rename to lib/uniris_web/live/transaction_details_live.ex index 9d42e6c8f..f8b9160a4 100644 --- a/apps/uniris_web/lib/uniris_web/live/transaction_details_live.ex +++ b/lib/uniris_web/live/transaction_details_live.ex @@ -4,8 +4,8 @@ defmodule UnirisWeb.TransactionDetailsLive do alias Phoenix.View - alias UnirisCore.Crypto - alias UnirisCore.Transaction + alias Uniris.Crypto + alias Uniris.Transaction alias UnirisWeb.ExplorerView @@ -19,22 +19,23 @@ defmodule UnirisWeb.TransactionDetailsLive do case Map.get(opts, "latest") do "true" -> - UnirisCore.get_last_transaction(address) + Uniris.get_last_transaction(address) _ -> - UnirisCore.search_transaction(address) + Uniris.search_transaction(address) end |> case do {:ok, tx = %Transaction{address: address, previous_public_key: previous_public_key}} -> - balance = UnirisCore.get_balance(address) + balance = Uniris.get_balance(address) previous_address = Crypto.hash(previous_public_key) inputs = [ - UnirisCore.get_transaction_inputs(address), - UnirisCore.get_transaction_inputs(previous_address) + Uniris.get_transaction_inputs(address), + Uniris.get_transaction_inputs(previous_address) ] |> :lists.flatten() + |> Enum.uniq() new_socket = socket @@ -47,7 +48,7 @@ defmodule UnirisWeb.TransactionDetailsLive do {:noreply, new_socket} _ -> - inputs = UnirisCore.get_transaction_inputs(address) + inputs = Uniris.get_transaction_inputs(address) new_socket = socket diff --git a/apps/uniris_web/lib/uniris_web/live/transaction_list_live.ex b/lib/uniris_web/live/transaction_list_live.ex similarity index 90% rename from apps/uniris_web/lib/uniris_web/live/transaction_list_live.ex rename to lib/uniris_web/live/transaction_list_live.ex index 21d9a3cdb..ab189a1c2 100644 --- a/apps/uniris_web/lib/uniris_web/live/transaction_list_live.ex +++ b/lib/uniris_web/live/transaction_list_live.ex @@ -4,9 +4,9 @@ defmodule UnirisWeb.TransactionListLive do alias Phoenix.View - alias UnirisCore.PubSub - alias UnirisCore.Storage - alias UnirisCore.Transaction + alias Uniris.PubSub + alias Uniris.Storage + alias Uniris.Transaction alias UnirisWeb.ExplorerView def mount(_params, _session, socket) do diff --git a/apps/uniris_web/lib/uniris_web/router.ex b/lib/uniris_web/router.ex similarity index 88% rename from apps/uniris_web/lib/uniris_web/router.ex rename to lib/uniris_web/router.ex index 7a4c5cfcf..3d78f18cc 100644 --- a/apps/uniris_web/lib/uniris_web/router.ex +++ b/lib/uniris_web/router.ex @@ -33,6 +33,10 @@ defmodule UnirisWeb.Router do get("/chain", ExplorerController, :chain) get("/node", NodeController, :index) get("/node/:public_key", NodeController, :show) + live("/code/viewer", CodeViewerLive) + live("/code/proposals", CodeProposalsLive) + get("/code/proposal/:address", CodeController, :show_proposal) + get("/code/download", CodeController, :download) end scope "/api" do diff --git a/lib/uniris_web/supervisor.ex b/lib/uniris_web/supervisor.ex new file mode 100644 index 000000000..05e859ff3 --- /dev/null +++ b/lib/uniris_web/supervisor.ex @@ -0,0 +1,24 @@ +defmodule UnirisWeb.Supervisor do + @moduledoc false + + use Supervisor + + alias UnirisWeb.Endpoint + alias UnirisWeb.TransactionSubscriber + + def start_link(opts) do + Supervisor.start_link(__MODULE__, opts, name: __MODULE__) + end + + def init(_) do + children = [ + # Start the endpoint when the application starts + Endpoint, + {Absinthe.Subscription, Endpoint}, + TransactionSubscriber + ] + + opts = [strategy: :one_for_one, name: UnirisWeb.Supervisor] + Supervisor.init(children, opts) + end +end diff --git a/lib/uniris_web/templates/code/viewer.html.leex b/lib/uniris_web/templates/code/viewer.html.leex new file mode 100644 index 000000000..24e76f543 --- /dev/null +++ b/lib/uniris_web/templates/code/viewer.html.leex @@ -0,0 +1,32 @@ +
+
+
+

Code viewer

+
+ +
+
+
+
+ <%= render_tree(@tree) %> +
+
+ <%= if @details != nil do %> +
+
+

<%= @details.filename %>

+
+
+
+
+                            
+                                <%= @details.content %>
+                            
+                        
+
+ <% end %> +
+
+
+ +
diff --git a/apps/uniris_web/lib/uniris_web/templates/error/404.html.eex b/lib/uniris_web/templates/error/404.html.eex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/error/404.html.eex rename to lib/uniris_web/templates/error/404.html.eex diff --git a/lib/uniris_web/templates/error/500.html.eex b/lib/uniris_web/templates/error/500.html.eex new file mode 100644 index 000000000..ff9d2f891 --- /dev/null +++ b/lib/uniris_web/templates/error/500.html.eex @@ -0,0 +1,3 @@ +
+

Internal Server Error

+
diff --git a/apps/uniris_web/lib/uniris_web/templates/explorer/404.html.eex b/lib/uniris_web/templates/explorer/404.html.eex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/explorer/404.html.eex rename to lib/uniris_web/templates/explorer/404.html.eex diff --git a/apps/uniris_web/lib/uniris_web/templates/explorer/chain.html.eex b/lib/uniris_web/templates/explorer/chain.html.eex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/explorer/chain.html.eex rename to lib/uniris_web/templates/explorer/chain.html.eex diff --git a/apps/uniris_web/lib/uniris_web/templates/explorer/index.html.eex b/lib/uniris_web/templates/explorer/index.html.eex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/explorer/index.html.eex rename to lib/uniris_web/templates/explorer/index.html.eex diff --git a/apps/uniris_web/lib/uniris_web/templates/explorer/top_node_list.html.leex b/lib/uniris_web/templates/explorer/top_node_list.html.leex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/explorer/top_node_list.html.leex rename to lib/uniris_web/templates/explorer/top_node_list.html.leex diff --git a/apps/uniris_web/lib/uniris_web/templates/explorer/top_transactions.html.leex b/lib/uniris_web/templates/explorer/top_transactions.html.leex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/explorer/top_transactions.html.leex rename to lib/uniris_web/templates/explorer/top_transactions.html.leex diff --git a/apps/uniris_web/lib/uniris_web/templates/explorer/transaction_details.html.leex b/lib/uniris_web/templates/explorer/transaction_details.html.leex similarity index 99% rename from apps/uniris_web/lib/uniris_web/templates/explorer/transaction_details.html.leex rename to lib/uniris_web/templates/explorer/transaction_details.html.leex index f14621928..12e324c46 100644 --- a/apps/uniris_web/lib/uniris_web/templates/explorer/transaction_details.html.leex +++ b/lib/uniris_web/templates/explorer/transaction_details.html.leex @@ -205,7 +205,7 @@ N/A <% else %>
- <%= for recipient <- @transaction.data.ledger.recipients do %> + <%= for recipient <- @transaction.data.recipients do %>
<%= link to: Routes.live_path(@socket, UnirisWeb.TransactionDetailsLive, address: Base.encode16(recipient)) do%> diff --git a/apps/uniris_web/lib/uniris_web/templates/explorer/transaction_list.html.leex b/lib/uniris_web/templates/explorer/transaction_list.html.leex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/explorer/transaction_list.html.leex rename to lib/uniris_web/templates/explorer/transaction_list.html.leex diff --git a/lib/uniris_web/templates/layout/app.html.eex b/lib/uniris_web/templates/layout/app.html.eex new file mode 100644 index 000000000..05433985b --- /dev/null +++ b/lib/uniris_web/templates/layout/app.html.eex @@ -0,0 +1 @@ +<%= @inner_content %> diff --git a/apps/uniris_web/lib/uniris_web/templates/layout/live.html.leex b/lib/uniris_web/templates/layout/live.html.leex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/layout/live.html.leex rename to lib/uniris_web/templates/layout/live.html.leex diff --git a/apps/uniris_web/lib/uniris_web/templates/layout/root.html.eex b/lib/uniris_web/templates/layout/root.html.eex similarity index 87% rename from apps/uniris_web/lib/uniris_web/templates/layout/root.html.eex rename to lib/uniris_web/templates/layout/root.html.eex index 256d35dea..cb01fcb38 100644 --- a/apps/uniris_web/lib/uniris_web/templates/layout/root.html.eex +++ b/lib/uniris_web/templates/layout/root.html.eex @@ -23,6 +23,8 @@
  • Transactions
  • Chains
  • Nodes
  • +
  • Code Viewer
  • +
  • Code Proposals
  • diff --git a/apps/uniris_web/lib/uniris_web/templates/node/index.html.eex b/lib/uniris_web/templates/node/index.html.eex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/node/index.html.eex rename to lib/uniris_web/templates/node/index.html.eex diff --git a/apps/uniris_web/lib/uniris_web/templates/node/show.html.eex b/lib/uniris_web/templates/node/show.html.eex similarity index 100% rename from apps/uniris_web/lib/uniris_web/templates/node/show.html.eex rename to lib/uniris_web/templates/node/show.html.eex diff --git a/apps/uniris_web/lib/uniris_web/transaction_subscriber.ex b/lib/uniris_web/transaction_subscriber.ex similarity index 95% rename from apps/uniris_web/lib/uniris_web/transaction_subscriber.ex rename to lib/uniris_web/transaction_subscriber.ex index 39b5ef577..bbe7c7c74 100644 --- a/apps/uniris_web/lib/uniris_web/transaction_subscriber.ex +++ b/lib/uniris_web/transaction_subscriber.ex @@ -4,7 +4,7 @@ defmodule UnirisWeb.TransactionSubscriber do use GenServer alias Absinthe.Subscription - alias UnirisCore.PubSub + alias Uniris.PubSub alias UnirisWeb.Endpoint def start_link(opts) do diff --git a/apps/uniris_web/lib/uniris_web/views/error_helpers.ex b/lib/uniris_web/views/error_helpers.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web/views/error_helpers.ex rename to lib/uniris_web/views/error_helpers.ex diff --git a/apps/uniris_web/lib/uniris_web/views/error_view.ex b/lib/uniris_web/views/error_view.ex similarity index 96% rename from apps/uniris_web/lib/uniris_web/views/error_view.ex rename to lib/uniris_web/views/error_view.ex index 326bd834f..e646496a3 100644 --- a/apps/uniris_web/lib/uniris_web/views/error_view.ex +++ b/lib/uniris_web/views/error_view.ex @@ -1,4 +1,6 @@ defmodule UnirisWeb.ErrorView do + @moduledoc false + use UnirisWeb, :view alias Phoenix.Controller diff --git a/apps/uniris_web/lib/uniris_web/views/explorer_view.ex b/lib/uniris_web/views/explorer_view.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web/views/explorer_view.ex rename to lib/uniris_web/views/explorer_view.ex diff --git a/apps/uniris_web/lib/uniris_web/views/layout_helpers.ex b/lib/uniris_web/views/layout_helpers.ex similarity index 100% rename from apps/uniris_web/lib/uniris_web/views/layout_helpers.ex rename to lib/uniris_web/views/layout_helpers.ex diff --git a/apps/uniris_web/lib/uniris_web/views/layout_view.ex b/lib/uniris_web/views/layout_view.ex similarity index 76% rename from apps/uniris_web/lib/uniris_web/views/layout_view.ex rename to lib/uniris_web/views/layout_view.ex index 79e22c5ea..89e34a892 100644 --- a/apps/uniris_web/lib/uniris_web/views/layout_view.ex +++ b/lib/uniris_web/views/layout_view.ex @@ -1,3 +1,4 @@ defmodule UnirisWeb.LayoutView do + @moduledoc false use UnirisWeb, :view end diff --git a/apps/uniris_web/lib/uniris_web/views/node_view.ex b/lib/uniris_web/views/node_view.ex similarity index 75% rename from apps/uniris_web/lib/uniris_web/views/node_view.ex rename to lib/uniris_web/views/node_view.ex index ceee9bf0c..26d91216b 100644 --- a/apps/uniris_web/lib/uniris_web/views/node_view.ex +++ b/lib/uniris_web/views/node_view.ex @@ -1,3 +1,4 @@ defmodule UnirisWeb.NodeView do + @moduledoc false use UnirisWeb, :view end diff --git a/mix.exs b/mix.exs index db0ebe470..2af710746 100644 --- a/mix.exs +++ b/mix.exs @@ -3,26 +3,56 @@ defmodule Uniris.MixProject do def project do [ - apps_path: "apps", - version: "0.1.0", + app: :uniris, + version: "0.7.0", + build_path: "_build", + config_path: "config/config.exs", + deps_path: "deps", + lockfile: "mix.lock", + elixir: "~> 1.10", start_permanent: Mix.env() == :prod, deps: deps(), + compilers: [:elixir_make, :phoenix] ++ Mix.compilers(), + elixirc_paths: elixirc_paths(Mix.env()), elixirc_options: [warnings_as_errors: true] ] end - # Dependencies listed here are available only for this - # project and cannot be accessed from applications inside - # the apps folder. - # - # Run "mix help deps" for examples and options. + # Run "mix help compile.app" to learn about applications. + def application do + [ + extra_applications: [:logger, :inets, :os_mon, :runtime_tools], + mod: {Uniris.Application, []} + ] + end + + defp elixirc_paths(:test), do: ["lib", "test/support"] + defp elixirc_paths(_), do: ["lib"] + + # Run "mix help deps" to learn about dependencies. defp deps do [ + {:flow, "~> 1.0"}, + {:elixir_make, "~> 0.6.0"}, + {:xandra, "~> 0.11"}, + {:phoenix, "~> 1.5"}, + {:phoenix_pubsub, "~> 2.0"}, + {:phoenix_html, "~> 2.14"}, + {:phoenix_live_view, "~> 0.14.0"}, + {:jason, "~> 1.0"}, + {:plug_cowboy, "~> 2.3"}, + {:absinthe, "~> 1.5.0"}, + {:absinthe_plug, "~> 1.5"}, + {:absinthe_phoenix, "~> 2.0"}, + {:cors_plug, "~> 1.5"}, + {:phoenix_live_dashboard, "~> 0.2.7"}, {:ex_doc, "~> 0.21.2", only: :dev}, - {:credo, "~> 1.4", only: [:dev, :test], runtime: false}, {:observer_cli, "~> 1.5"}, {:distillery, "~> 2.0"}, - {:git_hooks, "~> 0.4.0", only: [:test, :dev], runtime: false} + {:credo, "~> 1.4", only: [:dev, :test], runtime: false}, + {:git_hooks, "~> 0.4.0", only: [:test, :dev], runtime: false}, + {:mox, "~> 0.5.2", only: [:test]}, + {:stream_data, "~> 0.4.3", only: [:test]} ] end end diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..48e341a09 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3 @@ +{ + "lockfileVersion": 1 +} diff --git a/apps/uniris_core/priv/p2p/IP2LOCATION-LITE-DB5.BIN b/priv/p2p/IP2LOCATION-LITE-DB5.BIN similarity index 100% rename from apps/uniris_core/priv/p2p/IP2LOCATION-LITE-DB5.BIN rename to priv/p2p/IP2LOCATION-LITE-DB5.BIN diff --git a/apps/uniris_core/priv/p2p/seeds b/priv/p2p/seeds similarity index 100% rename from apps/uniris_core/priv/p2p/seeds rename to priv/p2p/seeds diff --git a/rel/config.exs b/rel/config.exs index 346b83c75..720d47c19 100644 --- a/rel/config.exs +++ b/rel/config.exs @@ -53,11 +53,10 @@ end # will be used by default release :uniris_node do - set version: System.fetch_env!("VERSION") + set version: current_version(:uniris) set applications: [ :runtime_tools, - uniris_core: :permanent, - uniris_web: :permanent + :observer_cli, + uniris: :permanent ] end - diff --git a/rel/runtime_config.exs b/rel/runtime_config.exs index 242b4a03a..4cb1084e9 100644 --- a/rel/runtime_config.exs +++ b/rel/runtime_config.exs @@ -1,10 +1,21 @@ import Config -config :uniris_core, UnirisCore.P2P, - port: 3002 +config :uniris, UnirisCore.P2P.Endpoint, + port: System.get_env("UNIRIS_P2P_PORT", "3002") |> String.to_integer() -config :uniris_web, UnirisWeb.Endpoint, +config :uniris, UnirisWeb.Endpoint, + http: [:inet6, port: System.get_env("UNIRIS_WEB_PORT", "80") |> String.to_integer()], + url: [host: "*", port: 443], https: [ keyfile: System.fetch_env!("UNIRIS_WEB_SSL_KEY_PATH"), certfile: System.fetch_env!("UNIRIS_WEB_SSL_CERT_PATH") ] + +config :uniris, Uniris.P2P.BootstrapingSeeds, + seeds: "127.0.0.1:3002:00682FF302BFA84702A00D81D5F97610E02573C0487FBCD6D00A66CCBC0E0656E8" + +config :uniris, Uniris.Storage, + backend: Uniris.Storage.FileBackend + +config :uniris, Uniris.Crypto.SoftwareKeystore, + seed: System.get_env("UNIRIS_CRYPTO_SEED") diff --git a/run.sh b/run.sh new file mode 100755 index 000000000..bafd851b5 --- /dev/null +++ b/run.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +INSTALL_DIR="/opt/uniris_node" +P2P_PORT=3002 + +# Colors +RED='\033[0;31m' +NC='\033[0m' +BLUE='\033[1;34m' + +usage() { + echo "Usage: " + echo "" + echo " Script to run the Uniris node" + echo "" + echo " " run.sh [-d dir] " Specify the installation dir" + echo " " run.sh [-k key_file] " Specify the SSL key for HTTPS connexions" + echo " " run.sh [-c cert_file] " Specify the SSL certificate for HTTPS connexions" + echo " " run.sh [-p port] " Specify the P2P port" + echo " " run.sh -h " Print the help usage" + echo "" +} + +while getopts d:k:c: option +do + case "${option}" + in + d) INSTALL_DIR=${OPTARG};; + k) SSL_KEY_PATH=${OPTARG};; + c) SSL_CERT_PATH=${OPTARG};; + p) P2P_PORT=${OPTARG};; + h) + usage + exit 0 + ;; + *) + usage + exit 1 + ;; + esac +done +shift $((OPTIND -1)) + +if [[ "$SSL_KEY_PATH" == "" || "$SSL_CERT_PATH" == "" ]] +then + echo "Missing SSL key/cert file" + usage + exit 1 +fi + +echo -e "${BLUE}" +cat << "EOF" + _ _ _ _ _ +| | | | (_) (_) | | +| | | |_ __ _ _ __ _ ___ _ __ ___ __| | ___ +| | | | '_ \| | '__| / __| | '_ \ / _ \ / _` |/ _ \ +| |_| | | | | | | | \__ \ | | | | (_) | (_| | __/ + \___/|_| |_|_|_| |_|___/ |_| |_|\___/ \__,_|\___| +EOF +echo -e "${NC}" + +export UNIRIS_P2P_PORT=P2P_PORT +export UNIRIS_WEB_SSL_CERT_PATH=SSL_CERT_PATH +export UNIRIS_WEB_SSL_KEY_PATH=SSL_KEY_PATH + +echo -e "" +echo "Settings:" +echo "--------" +echo "P2P will expose the port: ${P2P_PORT}" +echo "SSL Certificate will be located at: ${SSL_CERT_PATH}" +echo "SSL Key will be located at: ${SSL_KEY_PATH}" +echo "" + +if [ -f "$INSTALL_DIR/bin/uniris_node" ]; then + ${INSTALL_DIR}/bin/uniris_node start + pid = echo $! + echo "Application is running in background (PID: ${pid})" +else + echo -e "${RED}Error:" + echo -e "Application not installed. Please execute 'install.sh' before" + echo -e "${NC}" + exit 1 +fi diff --git a/apps/uniris_core/src/c/ed25519.c b/src/c/ed25519.c similarity index 100% rename from apps/uniris_core/src/c/ed25519.c rename to src/c/ed25519.c diff --git a/apps/uniris_core/src/c/stdio_helpers.c b/src/c/stdio_helpers.c similarity index 100% rename from apps/uniris_core/src/c/stdio_helpers.c rename to src/c/stdio_helpers.c diff --git a/apps/uniris_core/src/c/stdio_helpers.h b/src/c/stdio_helpers.h similarity index 100% rename from apps/uniris_core/src/c/stdio_helpers.h rename to src/c/stdio_helpers.h diff --git a/apps/uniris_core/src/ip2location.erl b/src/ip2location.erl similarity index 100% rename from apps/uniris_core/src/ip2location.erl rename to src/ip2location.erl diff --git a/apps/uniris_web/test/support/channel_case.ex b/test/support/channel_case.ex similarity index 100% rename from apps/uniris_web/test/support/channel_case.ex rename to test/support/channel_case.ex diff --git a/apps/uniris_web/test/support/conn_case.ex b/test/support/conn_case.ex similarity index 95% rename from apps/uniris_web/test/support/conn_case.ex rename to test/support/conn_case.ex index 0341733da..d52072d8d 100644 --- a/apps/uniris_web/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -16,12 +16,15 @@ defmodule UnirisWeb.ConnCase do """ use ExUnit.CaseTemplate + alias Phoenix.ConnTest using do quote do # Import conveniences for testing with connections - use ConnTest + import Plug.Conn + import ConnTest + alias UnirisWeb.Router.Helpers, as: Routes # The default endpoint for testing diff --git a/apps/uniris_core/test/support/template.ex b/test/support/template.ex similarity index 90% rename from apps/uniris_core/test/support/template.ex rename to test/support/template.ex index db160aa2a..8530b6580 100644 --- a/apps/uniris_core/test/support/template.ex +++ b/test/support/template.ex @@ -1,11 +1,11 @@ -defmodule UnirisCoreCase do +defmodule UnirisCase do @moduledoc false use ExUnit.CaseTemplate - alias UnirisCore.Crypto - alias UnirisCore.Crypto.ECDSA + alias Uniris.Crypto + alias Uniris.Crypto.ECDSA - alias UnirisCore.P2P.NodeSupervisor + alias Uniris.P2P.NodeSupervisor import Mox @@ -13,8 +13,8 @@ defmodule UnirisCoreCase do setup :set_mox_global setup do - File.rm_rf(Application.app_dir(:uniris_core, "priv/last_sync")) - File.rm_rf(Application.app_dir(:uniris_core, "priv/storage")) + File.rm_rf(Application.app_dir(:uniris, "priv/last_sync")) + File.rm_rf(Application.app_dir(:uniris, "priv/storage")) MockStorage |> stub(:list_transactions, fn -> [] end) @@ -71,7 +71,7 @@ defmodule UnirisCoreCase do |> stub(:decrypt_and_set_node_shared_secrets_network_pool_seed, fn _, _ -> :ok end) |> stub(:encrypt_storage_nonce, fn _ -> :crypto.strong_rand_bytes(32) end) - start_supervised!(UnirisCore.Storage.Cache) + start_supervised!(Uniris.Storage.Cache) on_exit(fn -> DynamicSupervisor.which_children(NodeSupervisor) diff --git a/test/test_helper.exs b/test/test_helper.exs new file mode 100644 index 000000000..082454bef --- /dev/null +++ b/test/test_helper.exs @@ -0,0 +1,7 @@ +Mix.Tasks.CleanPrivDir.run([]) + +ExUnit.start() + +Mox.defmock(MockNodeClient, for: Uniris.P2P.ClientImpl) +Mox.defmock(MockCrypto, for: Uniris.Crypto.KeystoreImpl) +Mox.defmock(MockStorage, for: Uniris.Storage.BackendImpl) diff --git a/test/uniris/beacon/slot/node_info_test.exs b/test/uniris/beacon/slot/node_info_test.exs new file mode 100644 index 000000000..fd32b4581 --- /dev/null +++ b/test/uniris/beacon/slot/node_info_test.exs @@ -0,0 +1,4 @@ +defmodule Uniris.BeaconSlot.NodeInfoTest do + use ExUnit.Case + doctest Uniris.BeaconSlot.NodeInfo +end diff --git a/test/uniris/beacon/slot/transaction_info_test.exs b/test/uniris/beacon/slot/transaction_info_test.exs new file mode 100644 index 000000000..6002c026f --- /dev/null +++ b/test/uniris/beacon/slot/transaction_info_test.exs @@ -0,0 +1,4 @@ +defmodule Uniris.BeaconSlot.TransactionInfoTest do + use ExUnit.Case + doctest Uniris.BeaconSlot.TransactionInfo +end diff --git a/test/uniris/beacon/slot_test.exs b/test/uniris/beacon/slot_test.exs new file mode 100644 index 000000000..43b2065e2 --- /dev/null +++ b/test/uniris/beacon/slot_test.exs @@ -0,0 +1,4 @@ +defmodule Uniris.BeaconSlotTest do + use ExUnit.Case + doctest Uniris.BeaconSlot +end diff --git a/apps/uniris_core/test/uniris_core/beacon/slot_timer_test.exs b/test/uniris/beacon/slot_timer_test.exs similarity index 73% rename from apps/uniris_core/test/uniris_core/beacon/slot_timer_test.exs rename to test/uniris/beacon/slot_timer_test.exs index 0af3da533..ad06b7d7f 100644 --- a/apps/uniris_core/test/uniris_core/beacon/slot_timer_test.exs +++ b/test/uniris/beacon/slot_timer_test.exs @@ -1,9 +1,9 @@ -defmodule UnirisCore.BeaconSlotTimerTest do +defmodule Uniris.BeaconSlotTimerTest do use ExUnit.Case - alias UnirisCore.BeaconSlotTimer - alias UnirisCore.BeaconSubsetRegistry - alias UnirisCore.BeaconSubsets + alias Uniris.BeaconSlotTimer + alias Uniris.BeaconSubsetRegistry + alias Uniris.BeaconSubsets setup do Enum.each(BeaconSubsets.all(), fn subset -> diff --git a/apps/uniris_core/test/uniris_core/beacon/subset_test.exs b/test/uniris/beacon/subset_test.exs similarity index 93% rename from apps/uniris_core/test/uniris_core/beacon/subset_test.exs rename to test/uniris/beacon/subset_test.exs index 27b33be31..77b44d529 100644 --- a/apps/uniris_core/test/uniris_core/beacon/subset_test.exs +++ b/test/uniris/beacon/subset_test.exs @@ -1,13 +1,13 @@ -defmodule UnirisCore.BeaconSubsetTest do - use UnirisCoreCase, async: false +defmodule Uniris.BeaconSubsetTest do + use UnirisCase, async: false - alias UnirisCore.BeaconSlot - alias UnirisCore.BeaconSlot.NodeInfo - alias UnirisCore.BeaconSlot.TransactionInfo + alias Uniris.BeaconSlot + alias Uniris.BeaconSlot.NodeInfo + alias Uniris.BeaconSlot.TransactionInfo - alias UnirisCore.BeaconSubset + alias Uniris.BeaconSubset - alias UnirisCore.Transaction + alias Uniris.Transaction setup do pid = start_supervised!({BeaconSubset, subset: <<0>>}) diff --git a/apps/uniris_core/test/uniris_core/beacon_test.exs b/test/uniris/beacon_test.exs similarity index 96% rename from apps/uniris_core/test/uniris_core/beacon_test.exs rename to test/uniris/beacon_test.exs index 6c12f7cf4..0620531fa 100644 --- a/apps/uniris_core/test/uniris_core/beacon_test.exs +++ b/test/uniris/beacon_test.exs @@ -1,14 +1,14 @@ -defmodule UnirisCore.BeaconTest do - use UnirisCoreCase - doctest UnirisCore.Beacon - - alias UnirisCore.Beacon - alias UnirisCore.BeaconSlotTimer - alias UnirisCore.BeaconSubset - alias UnirisCore.BeaconSubsets - alias UnirisCore.P2P - alias UnirisCore.P2P.Node - alias UnirisCore.Utils +defmodule Uniris.BeaconTest do + use UnirisCase + doctest Uniris.Beacon + + alias Uniris.Beacon + alias Uniris.BeaconSlotTimer + alias Uniris.BeaconSubset + alias Uniris.BeaconSubsets + alias Uniris.P2P + alias Uniris.P2P.Node + alias Uniris.Utils setup do Enum.map(BeaconSubsets.all(), &start_supervised({BeaconSubset, subset: &1}, id: &1)) diff --git a/apps/uniris_core/test/uniris_core/bootstrap/network_init_test.exs b/test/uniris/bootstrap/network_init_test.exs similarity index 81% rename from apps/uniris_core/test/uniris_core/bootstrap/network_init_test.exs rename to test/uniris/bootstrap/network_init_test.exs index b0d0736d1..98498aa3a 100644 --- a/apps/uniris_core/test/uniris_core/bootstrap/network_init_test.exs +++ b/test/uniris/bootstrap/network_init_test.exs @@ -1,32 +1,32 @@ -defmodule UnirisCore.Bootstrap.NetworkInitTest do - use UnirisCoreCase - - alias UnirisCore.Crypto - - alias UnirisCore.Beacon - alias UnirisCore.BeaconSlot - alias UnirisCore.BeaconSlot.TransactionInfo - alias UnirisCore.BeaconSubset - alias UnirisCore.BeaconSubsetRegistry - alias UnirisCore.BeaconSubsets - - alias UnirisCore.Bootstrap.NetworkInit - alias UnirisCore.Mining.Context - - alias UnirisCore.P2P - alias UnirisCore.P2P.Node - - alias UnirisCore.Storage.Cache - - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger +defmodule Uniris.Bootstrap.NetworkInitTest do + use UnirisCase + + alias Uniris.Crypto + + alias Uniris.Beacon + alias Uniris.BeaconSlot + alias Uniris.BeaconSlot.TransactionInfo + alias Uniris.BeaconSubset + alias Uniris.BeaconSubsetRegistry + alias Uniris.BeaconSubsets + + alias Uniris.Bootstrap.NetworkInit + alias Uniris.Mining.Context + + alias Uniris.P2P + alias Uniris.P2P.Node + + alias Uniris.Storage.Cache + + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger import Mox diff --git a/apps/uniris_core/test/uniris_core/bootstrap_test.exs b/test/uniris/bootstrap_test.exs similarity index 91% rename from apps/uniris_core/test/uniris_core/bootstrap_test.exs rename to test/uniris/bootstrap_test.exs index 71b4fc6ab..c3252802b 100644 --- a/apps/uniris_core/test/uniris_core/bootstrap_test.exs +++ b/test/uniris/bootstrap_test.exs @@ -1,33 +1,33 @@ -defmodule UnirisCore.BootstrapTest do - use UnirisCoreCase +defmodule Uniris.BootstrapTest do + use UnirisCase - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.BeaconSlotTimer - alias UnirisCore.BeaconSubset - alias UnirisCore.BeaconSubsets + alias Uniris.BeaconSlotTimer + alias Uniris.BeaconSubset + alias Uniris.BeaconSubsets - alias UnirisCore.Bootstrap - alias UnirisCore.Bootstrap.NetworkInit + alias Uniris.Bootstrap + alias Uniris.Bootstrap.NetworkInit - alias UnirisCore.P2P - alias UnirisCore.P2P.BootstrapingSeeds - alias UnirisCore.P2P.Message.AddNodeInfo - alias UnirisCore.P2P.Message.BeaconSlotList - alias UnirisCore.P2P.Message.BootstrappingNodes - alias UnirisCore.P2P.Message.EncryptedStorageNonce - alias UnirisCore.P2P.Message.GetBeaconSlots - alias UnirisCore.P2P.Message.GetBootstrappingNodes - alias UnirisCore.P2P.Message.GetStorageNonce - alias UnirisCore.P2P.Message.ListNodes - alias UnirisCore.P2P.Message.NewTransaction - alias UnirisCore.P2P.Message.NodeList - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.BootstrapingSeeds + alias Uniris.P2P.Message.AddNodeInfo + alias Uniris.P2P.Message.BeaconSlotList + alias Uniris.P2P.Message.BootstrappingNodes + alias Uniris.P2P.Message.EncryptedStorageNonce + alias Uniris.P2P.Message.GetBeaconSlots + alias Uniris.P2P.Message.GetBootstrappingNodes + alias Uniris.P2P.Message.GetStorageNonce + alias Uniris.P2P.Message.ListNodes + alias Uniris.P2P.Message.NewTransaction + alias Uniris.P2P.Message.NodeList + alias Uniris.P2P.Node - alias UnirisCore.SelfRepair - alias UnirisCore.Storage + alias Uniris.SelfRepair + alias Uniris.Storage - alias UnirisCore.Transaction + alias Uniris.Transaction import Mox @@ -41,7 +41,7 @@ defmodule UnirisCore.BootstrapTest do start_supervised!(BootstrapingSeeds) on_exit(fn -> - File.rm(Application.app_dir(:uniris_core, "priv/p2p/last_sync")) + File.rm(Application.app_dir(:uniris, "priv/p2p/last_sync")) end) end diff --git a/apps/uniris_core/test/uniris_core/crypto/ecdsa_test.exs b/test/uniris/crypto/ecdsa_test.exs similarity index 94% rename from apps/uniris_core/test/uniris_core/crypto/ecdsa_test.exs rename to test/uniris/crypto/ecdsa_test.exs index 17a83601f..86b905d8e 100755 --- a/apps/uniris_core/test/uniris_core/crypto/ecdsa_test.exs +++ b/test/uniris/crypto/ecdsa_test.exs @@ -1,7 +1,7 @@ -defmodule UnirisCore.Crypto.ECDSATest do +defmodule Uniris.Crypto.ECDSATest do use ExUnit.Case - alias UnirisCore.Crypto.ECDSA + alias Uniris.Crypto.ECDSA test "generate_keypair/2 should produce a deterministic keypair" do assert ECDSA.generate_keypair(:secp256r1, "myseed") == diff --git a/apps/uniris_core/test/uniris_core/crypto/ed25519_test.exs b/test/uniris/crypto/ed25519_test.exs similarity index 92% rename from apps/uniris_core/test/uniris_core/crypto/ed25519_test.exs rename to test/uniris/crypto/ed25519_test.exs index bfca6347a..3f91c0cf6 100755 --- a/apps/uniris_core/test/uniris_core/crypto/ed25519_test.exs +++ b/test/uniris/crypto/ed25519_test.exs @@ -1,7 +1,7 @@ -defmodule UnirisCore.Crypto.Ed25519Test do +defmodule Uniris.Crypto.Ed25519Test do use ExUnit.Case - alias UnirisCore.Crypto.Ed25519 + alias Uniris.Crypto.Ed25519 test "generate_keypair/2 should produce a deterministic keypair" do assert Ed25519.generate_keypair("myseed") == Ed25519.generate_keypair("myseed") diff --git a/apps/uniris_core/test/uniris_core/crypto/transaction_loader_test.exs b/test/uniris/crypto/transaction_loader_test.exs similarity index 91% rename from apps/uniris_core/test/uniris_core/crypto/transaction_loader_test.exs rename to test/uniris/crypto/transaction_loader_test.exs index ebb040c41..10d5c6c08 100644 --- a/apps/uniris_core/test/uniris_core/crypto/transaction_loader_test.exs +++ b/test/uniris/crypto/transaction_loader_test.exs @@ -1,12 +1,12 @@ -defmodule UnirisCore.Crypto.TransactionLoaderTest do - use UnirisCoreCase, async: false +defmodule Uniris.Crypto.TransactionLoaderTest do + use UnirisCase, async: false - alias UnirisCore.Crypto - alias UnirisCore.Crypto.TransactionLoader + alias Uniris.Crypto + alias Uniris.Crypto.TransactionLoader - alias UnirisCore.Transaction - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Keys + alias Uniris.Transaction + alias Uniris.TransactionData + alias Uniris.TransactionData.Keys import Mox diff --git a/apps/uniris_core/test/uniris_core/crypto_test.exs b/test/uniris/crypto_test.exs similarity index 95% rename from apps/uniris_core/test/uniris_core/crypto_test.exs rename to test/uniris/crypto_test.exs index 53e501e38..05707854e 100644 --- a/apps/uniris_core/test/uniris_core/crypto_test.exs +++ b/test/uniris/crypto_test.exs @@ -1,8 +1,8 @@ defmodule CryptoTest do - use UnirisCoreCase, async: false + use UnirisCase, async: false use ExUnitProperties - alias UnirisCore.Crypto + alias Uniris.Crypto doctest Crypto diff --git a/apps/uniris_core/test/uniris_core/election/constraints_test.exs b/test/uniris/election/constraints_test.exs similarity index 89% rename from apps/uniris_core/test/uniris_core/election/constraints_test.exs rename to test/uniris/election/constraints_test.exs index 8378ec7c0..60aef1a83 100644 --- a/apps/uniris_core/test/uniris_core/election/constraints_test.exs +++ b/test/uniris/election/constraints_test.exs @@ -1,15 +1,15 @@ -defmodule UnirisCore.Election.ConstraintsTest do - use UnirisCoreCase +defmodule Uniris.Election.ConstraintsTest do + use UnirisCase use ExUnitProperties - alias UnirisCore.Election.Constraints - alias UnirisCore.P2P.Node + alias Uniris.Election.Constraints + alias Uniris.P2P.Node - alias UnirisCore.Transaction - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.Transaction + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger property "validation_number return more than 3 validation nodes" do check all(transfers <- StreamData.list_of(StreamData.float(min: 0.0, max: 100.0))) do diff --git a/apps/uniris_core/test/uniris_core/election_test.exs b/test/uniris/election_test.exs similarity index 96% rename from apps/uniris_core/test/uniris_core/election_test.exs rename to test/uniris/election_test.exs index c993b9da6..f93f14b2d 100644 --- a/apps/uniris_core/test/uniris_core/election_test.exs +++ b/test/uniris/election_test.exs @@ -1,14 +1,14 @@ -defmodule UnirisCore.ElectionTest do - use UnirisCoreCase +defmodule Uniris.ElectionTest do + use UnirisCase - alias UnirisCore.Crypto - alias UnirisCore.Election + alias Uniris.Crypto + alias Uniris.Election - alias UnirisCore.P2P - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Node - alias UnirisCore.Transaction - alias UnirisCore.TransactionData + alias Uniris.Transaction + alias Uniris.TransactionData import Mox diff --git a/test/uniris/interpreter_test.exs b/test/uniris/interpreter_test.exs new file mode 100644 index 000000000..64f666f01 --- /dev/null +++ b/test/uniris/interpreter_test.exs @@ -0,0 +1,4 @@ +defmodule Uniris.InterepreterTest do + use ExUnit.Case + doctest Uniris.Interpreter +end diff --git a/apps/uniris_core/test/uniris_core/mining/binary_sequence_test.exs b/test/uniris/mining/binary_sequence_test.exs similarity index 93% rename from apps/uniris_core/test/uniris_core/mining/binary_sequence_test.exs rename to test/uniris/mining/binary_sequence_test.exs index cf88ed82c..bcb51c092 100755 --- a/apps/uniris_core/test/uniris_core/mining/binary_sequence_test.exs +++ b/test/uniris/mining/binary_sequence_test.exs @@ -1,8 +1,8 @@ -defmodule UnirisCore.Mining.BinarySequenceTest do +defmodule Uniris.Mining.BinarySequenceTest do use ExUnit.Case - alias UnirisCore.Mining.BinarySequence - alias UnirisCore.P2P.Node + alias Uniris.Mining.BinarySequence + alias Uniris.P2P.Node test "from_subset/2 create binary sequence from a list and a subset and mark the subset with 1" do list = [ diff --git a/apps/uniris_core/test/uniris_core/mining/context_test.exs b/test/uniris/mining/context_test.exs similarity index 90% rename from apps/uniris_core/test/uniris_core/mining/context_test.exs rename to test/uniris/mining/context_test.exs index 1dd34ee70..0410d281d 100644 --- a/apps/uniris_core/test/uniris_core/mining/context_test.exs +++ b/test/uniris/mining/context_test.exs @@ -1,29 +1,29 @@ -defmodule UnirisCore.Mining.ContextTest do - use UnirisCoreCase, async: false - - alias UnirisCore.BeaconSlotTimer - alias UnirisCore.Crypto - - alias UnirisCore.Mining.Context - - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.GetProofOfIntegrity - alias UnirisCore.P2P.Message.GetTransaction - alias UnirisCore.P2P.Message.GetTransactionHistory - alias UnirisCore.P2P.Message.GetUnspentOutputs - alias UnirisCore.P2P.Message.ProofOfIntegrity - alias UnirisCore.P2P.Message.TransactionHistory - alias UnirisCore.P2P.Message.UnspentOutputList - alias UnirisCore.P2P.Node - - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger +defmodule Uniris.Mining.ContextTest do + use UnirisCase, async: false + + alias Uniris.BeaconSlotTimer + alias Uniris.Crypto + + alias Uniris.Mining.Context + + alias Uniris.P2P + alias Uniris.P2P.Message.GetProofOfIntegrity + alias Uniris.P2P.Message.GetTransaction + alias Uniris.P2P.Message.GetTransactionHistory + alias Uniris.P2P.Message.GetUnspentOutputs + alias Uniris.P2P.Message.ProofOfIntegrity + alias Uniris.P2P.Message.TransactionHistory + alias Uniris.P2P.Message.UnspentOutputList + alias Uniris.P2P.Node + + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger import Mox diff --git a/apps/uniris_core/test/uniris_core/mining/fee_test.exs b/test/uniris/mining/fee_test.exs similarity index 96% rename from apps/uniris_core/test/uniris_core/mining/fee_test.exs rename to test/uniris/mining/fee_test.exs index 4e36484a8..44885726d 100644 --- a/apps/uniris_core/test/uniris_core/mining/fee_test.exs +++ b/test/uniris/mining/fee_test.exs @@ -1,9 +1,9 @@ -defmodule UnirisCore.Mining.FeeTest do +defmodule Uniris.Mining.FeeTest do use ExUnit.Case - alias UnirisCore.Mining.Fee - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Mining.Fee + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement test "compute/1 should return 0 when transaction with type :node" do fee = diff --git a/apps/uniris_core/test/uniris_core/mining/proof_of_integrity_test.exs b/test/uniris/mining/proof_of_integrity_test.exs similarity index 93% rename from apps/uniris_core/test/uniris_core/mining/proof_of_integrity_test.exs rename to test/uniris/mining/proof_of_integrity_test.exs index 5749b44ab..610fc671c 100755 --- a/apps/uniris_core/test/uniris_core/mining/proof_of_integrity_test.exs +++ b/test/uniris/mining/proof_of_integrity_test.exs @@ -1,13 +1,13 @@ -defmodule UnirisCore.Mining.ProofOfIntegrityTest do +defmodule Uniris.Mining.ProofOfIntegrityTest do use ExUnit.Case - alias UnirisCore.Crypto - alias UnirisCore.Mining.ProofOfIntegrity + alias Uniris.Crypto + alias Uniris.Mining.ProofOfIntegrity - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.TransactionData + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.TransactionData test "compute/1 should produce a hash of the pending transaction when only one transaction" do chain = [generate_pending_transaction()] diff --git a/apps/uniris_core/test/uniris_core/mining/proof_of_work_test.exs b/test/uniris/mining/proof_of_work_test.exs similarity index 95% rename from apps/uniris_core/test/uniris_core/mining/proof_of_work_test.exs rename to test/uniris/mining/proof_of_work_test.exs index b8dc8f9a7..e75a6058b 100644 --- a/apps/uniris_core/test/uniris_core/mining/proof_of_work_test.exs +++ b/test/uniris/mining/proof_of_work_test.exs @@ -1,17 +1,17 @@ -defmodule UnirisCore.Mining.ProofOfWorkTest do - use UnirisCoreCase +defmodule Uniris.Mining.ProofOfWorkTest do + use UnirisCase - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Mining.ProofOfWork + alias Uniris.Mining.ProofOfWork - alias UnirisCore.P2P - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Node - alias UnirisCore.Transaction - alias UnirisCore.TransactionData + alias Uniris.Transaction + alias Uniris.TransactionData - alias UnirisCore.SharedSecrets + alias Uniris.SharedSecrets import Mox diff --git a/apps/uniris_core/test/uniris_core/mining/replication_test.exs b/test/uniris/mining/replication_test.exs similarity index 94% rename from apps/uniris_core/test/uniris_core/mining/replication_test.exs rename to test/uniris/mining/replication_test.exs index 1131e2f06..f0d047584 100644 --- a/apps/uniris_core/test/uniris_core/mining/replication_test.exs +++ b/test/uniris/mining/replication_test.exs @@ -1,33 +1,33 @@ -defmodule UnirisCore.Mining.ReplicationTest do - use UnirisCoreCase, async: false +defmodule Uniris.Mining.ReplicationTest do + use UnirisCase, async: false @moduletag capture_log: true - alias UnirisCore.Crypto - - alias UnirisCore.Beacon - alias UnirisCore.BeaconSlot.TransactionInfo - alias UnirisCore.BeaconSlotTimer - alias UnirisCore.BeaconSubset - alias UnirisCore.BeaconSubsetRegistry - alias UnirisCore.BeaconSubsets - - alias UnirisCore.Mining.Context - alias UnirisCore.Mining.ProofOfIntegrity - alias UnirisCore.Mining.Replication - - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.GetUnspentOutputs - alias UnirisCore.P2P.Message.UnspentOutputList - alias UnirisCore.P2P.Node - - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData + alias Uniris.Crypto + + alias Uniris.Beacon + alias Uniris.BeaconSlot.TransactionInfo + alias Uniris.BeaconSlotTimer + alias Uniris.BeaconSubset + alias Uniris.BeaconSubsetRegistry + alias Uniris.BeaconSubsets + + alias Uniris.Mining.Context + alias Uniris.Mining.ProofOfIntegrity + alias Uniris.Mining.Replication + + alias Uniris.P2P + alias Uniris.P2P.Message.GetUnspentOutputs + alias Uniris.P2P.Message.UnspentOutputList + alias Uniris.P2P.Node + + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionData import Mox diff --git a/apps/uniris_core/test/uniris_core/mining/worker_test.exs b/test/uniris/mining/worker_test.exs similarity index 94% rename from apps/uniris_core/test/uniris_core/mining/worker_test.exs rename to test/uniris/mining/worker_test.exs index a1ee5802a..4a6ca3dcb 100644 --- a/apps/uniris_core/test/uniris_core/mining/worker_test.exs +++ b/test/uniris/mining/worker_test.exs @@ -1,35 +1,35 @@ -defmodule UnirisCore.MiningWorkerTest do - use UnirisCoreCase, async: false +defmodule Uniris.MiningWorkerTest do + use UnirisCase, async: false @moduletag capture_log: true - alias UnirisCore.Crypto - - alias UnirisCore.BeaconSlotTimer - alias UnirisCore.BeaconSubsetRegistry - alias UnirisCore.BeaconSubsets - - alias UnirisCore.Election - - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.TransactionData - - alias UnirisCore.Mining.Context - alias UnirisCore.Mining.Worker - - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.AddContext - alias UnirisCore.P2P.Message.CrossValidate - alias UnirisCore.P2P.Message.CrossValidationDone - alias UnirisCore.P2P.Message.GetProofOfIntegrity - alias UnirisCore.P2P.Message.GetUnspentOutputs - alias UnirisCore.P2P.Message.ProofOfIntegrity - alias UnirisCore.P2P.Message.ReplicateTransaction - alias UnirisCore.P2P.Message.UnspentOutputList - alias UnirisCore.P2P.Node + alias Uniris.Crypto + + alias Uniris.BeaconSlotTimer + alias Uniris.BeaconSubsetRegistry + alias Uniris.BeaconSubsets + + alias Uniris.Election + + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.TransactionData + + alias Uniris.Mining.Context + alias Uniris.Mining.Worker + + alias Uniris.P2P + alias Uniris.P2P.Message.AddContext + alias Uniris.P2P.Message.CrossValidate + alias Uniris.P2P.Message.CrossValidationDone + alias Uniris.P2P.Message.GetProofOfIntegrity + alias Uniris.P2P.Message.GetUnspentOutputs + alias Uniris.P2P.Message.ProofOfIntegrity + alias Uniris.P2P.Message.ReplicateTransaction + alias Uniris.P2P.Message.UnspentOutputList + alias Uniris.P2P.Node import Mox diff --git a/apps/uniris_core/test/uniris_core/p2p/node/tcp_client_test.exs b/test/uniris/p2p/client/tcp_client_test.exs similarity index 76% rename from apps/uniris_core/test/uniris_core/p2p/node/tcp_client_test.exs rename to test/uniris/p2p/client/tcp_client_test.exs index bfdbc0fd0..2934b6470 100644 --- a/apps/uniris_core/test/uniris_core/p2p/node/tcp_client_test.exs +++ b/test/uniris/p2p/client/tcp_client_test.exs @@ -1,10 +1,10 @@ -defmodule UnirisCore.P2P.NodeTCPClientTest do +defmodule Uniris.P2P.TCPClientTest do use ExUnit.Case, async: false - alias UnirisCore.P2P.NodeTCPClient + alias Uniris.P2P.TCPClient - alias UnirisCore.P2P.Message - alias UnirisCore.P2P.Message.Ok + alias Uniris.P2P.Message + alias Uniris.P2P.Message.Ok defp recv(socket) do case :gen_tcp.recv(socket, 0) do @@ -36,6 +36,6 @@ defmodule UnirisCore.P2P.NodeTCPClientTest do end test "send_message/3 should send a message and get results", %{port: port} do - assert %Ok{} == NodeTCPClient.send_message({127, 0, 0, 1}, port, %Ok{}) + assert %Ok{} == TCPClient.send_message({127, 0, 0, 1}, port, %Ok{}) end end diff --git a/apps/uniris_core/test/uniris_core/p2p/server_test.exs b/test/uniris/p2p/endpoint_test.exs similarity index 67% rename from apps/uniris_core/test/uniris_core/p2p/server_test.exs rename to test/uniris/p2p/endpoint_test.exs index 91e83c03a..f2cb2f2fb 100644 --- a/apps/uniris_core/test/uniris_core/p2p/server_test.exs +++ b/test/uniris/p2p/endpoint_test.exs @@ -1,4 +1,4 @@ -defmodule UnirisCore.P2PServerTest do +defmodule Uniris.P2P.EndpointTest do use ExUnit.Case import Mox @@ -8,12 +8,15 @@ defmodule UnirisCore.P2PServerTest do @tcp_options [:binary, packet: 4, active: false] - alias UnirisCore.P2P.Message - alias UnirisCore.P2P.Message.BootstrappingNodes - alias UnirisCore.P2P.Message.GetBootstrappingNodes + alias Uniris.P2P.Endpoint + + alias Uniris.P2P.Message + alias Uniris.P2P.Message.BootstrappingNodes + alias Uniris.P2P.Message.GetBootstrappingNodes setup do - port = Application.get_env(:uniris_core, UnirisCore.P2P) |> Keyword.fetch!(:port) + port = 10_000 + {:ok, _} = Endpoint.start_link(port: port) {:ok, %{port: port}} end diff --git a/apps/uniris_core/test/uniris_core/p2p/messages_test.exs b/test/uniris/p2p/messages_test.exs similarity index 92% rename from apps/uniris_core/test/uniris_core/p2p/messages_test.exs rename to test/uniris/p2p/messages_test.exs index 81fac8c05..2c7250167 100644 --- a/apps/uniris_core/test/uniris_core/p2p/messages_test.exs +++ b/test/uniris/p2p/messages_test.exs @@ -1,60 +1,60 @@ -defmodule UnirisCore.P2P.MessageTest do - use UnirisCoreCase - - alias UnirisCore.P2P.Message - alias UnirisCore.P2P.Message.AcknowledgeStorage - alias UnirisCore.P2P.Message.AddContext - alias UnirisCore.P2P.Message.AddNodeInfo - alias UnirisCore.P2P.Message.Balance - alias UnirisCore.P2P.Message.BeaconSlotList - alias UnirisCore.P2P.Message.BootstrappingNodes - alias UnirisCore.P2P.Message.CrossValidate - alias UnirisCore.P2P.Message.CrossValidationDone - alias UnirisCore.P2P.Message.EncryptedStorageNonce - alias UnirisCore.P2P.Message.GetBalance - alias UnirisCore.P2P.Message.GetBeaconSlots - alias UnirisCore.P2P.Message.GetBootstrappingNodes - alias UnirisCore.P2P.Message.GetLastTransaction - alias UnirisCore.P2P.Message.GetProofOfIntegrity - alias UnirisCore.P2P.Message.GetStorageNonce - alias UnirisCore.P2P.Message.GetTransaction - alias UnirisCore.P2P.Message.GetTransactionChain - alias UnirisCore.P2P.Message.GetTransactionChainLength - alias UnirisCore.P2P.Message.GetTransactionHistory - alias UnirisCore.P2P.Message.GetTransactionInputs - alias UnirisCore.P2P.Message.GetUnspentOutputs - alias UnirisCore.P2P.Message.ListNodes - alias UnirisCore.P2P.Message.NewTransaction - alias UnirisCore.P2P.Message.NodeList - alias UnirisCore.P2P.Message.NotFound - alias UnirisCore.P2P.Message.Ok - alias UnirisCore.P2P.Message.ProofOfIntegrity - alias UnirisCore.P2P.Message.ReplicateTransaction - alias UnirisCore.P2P.Message.StartMining - alias UnirisCore.P2P.Message.TransactionChainLength - alias UnirisCore.P2P.Message.TransactionHistory - alias UnirisCore.P2P.Message.TransactionInputList - alias UnirisCore.P2P.Message.TransactionList - alias UnirisCore.P2P.Message.UnspentOutputList - - alias UnirisCore.Crypto - - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionInput - - alias UnirisCore.P2P.Node - - alias UnirisCore.BeaconSlot - alias UnirisCore.BeaconSlot.NodeInfo - alias UnirisCore.BeaconSlot.TransactionInfo - - alias UnirisCore.Utils +defmodule Uniris.P2P.MessageTest do + use UnirisCase + + alias Uniris.P2P.Message + alias Uniris.P2P.Message.AcknowledgeStorage + alias Uniris.P2P.Message.AddContext + alias Uniris.P2P.Message.AddNodeInfo + alias Uniris.P2P.Message.Balance + alias Uniris.P2P.Message.BeaconSlotList + alias Uniris.P2P.Message.BootstrappingNodes + alias Uniris.P2P.Message.CrossValidate + alias Uniris.P2P.Message.CrossValidationDone + alias Uniris.P2P.Message.EncryptedStorageNonce + alias Uniris.P2P.Message.GetBalance + alias Uniris.P2P.Message.GetBeaconSlots + alias Uniris.P2P.Message.GetBootstrappingNodes + alias Uniris.P2P.Message.GetLastTransaction + alias Uniris.P2P.Message.GetProofOfIntegrity + alias Uniris.P2P.Message.GetStorageNonce + alias Uniris.P2P.Message.GetTransaction + alias Uniris.P2P.Message.GetTransactionChain + alias Uniris.P2P.Message.GetTransactionChainLength + alias Uniris.P2P.Message.GetTransactionHistory + alias Uniris.P2P.Message.GetTransactionInputs + alias Uniris.P2P.Message.GetUnspentOutputs + alias Uniris.P2P.Message.ListNodes + alias Uniris.P2P.Message.NewTransaction + alias Uniris.P2P.Message.NodeList + alias Uniris.P2P.Message.NotFound + alias Uniris.P2P.Message.Ok + alias Uniris.P2P.Message.ProofOfIntegrity + alias Uniris.P2P.Message.ReplicateTransaction + alias Uniris.P2P.Message.StartMining + alias Uniris.P2P.Message.TransactionChainLength + alias Uniris.P2P.Message.TransactionHistory + alias Uniris.P2P.Message.TransactionInputList + alias Uniris.P2P.Message.TransactionList + alias Uniris.P2P.Message.UnspentOutputList + + alias Uniris.Crypto + + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionData + alias Uniris.TransactionInput + + alias Uniris.P2P.Node + + alias Uniris.BeaconSlot + alias Uniris.BeaconSlot.NodeInfo + alias Uniris.BeaconSlot.TransactionInfo + + alias Uniris.Utils doctest Message @@ -168,7 +168,7 @@ defmodule UnirisCore.P2P.MessageTest do validation_node_public_key: <<0, 92, 208, 222, 119, 27, 128, 82, 69, 163, 128, 196, 105, 19, 18, 99, 217, 105, 80, 238, 155, 239, 91, 54, 82, 200, 16, 121, 32, 83, 63, 79, 88>>, - context: %UnirisCore.Mining.Context{ + context: %Uniris.Mining.Context{ involved_nodes: [ <<0, 22, 38, 34, 13, 213, 91, 210, 214, 66, 148, 122, 220, 63, 176, 232, 205, 35, 153, 176, 223, 178, 72, 88, 6, 41, 167, 163, 205, 98, 172, 249, 141>> @@ -351,7 +351,7 @@ defmodule UnirisCore.P2P.MessageTest do test "AddNodeInfo message" do msg = %AddNodeInfo{ subset: <<0>>, - node_info: %UnirisCore.BeaconSlot.NodeInfo{ + node_info: %Uniris.BeaconSlot.NodeInfo{ public_key: <<0, 38, 105, 235, 147, 234, 114, 41, 1, 152, 148, 120, 31, 200, 255, 174, 190, 91, 100, 169, 225, 113, 249, 125, 21, 168, 14, 196, 222, 140, 87, 143, 241>>, diff --git a/apps/uniris_core/test/uniris_core/p2p/node_test.exs b/test/uniris/p2p/node_test.exs similarity index 98% rename from apps/uniris_core/test/uniris_core/p2p/node_test.exs rename to test/uniris/p2p/node_test.exs index 8dc57e369..f6cf38ec9 100644 --- a/apps/uniris_core/test/uniris_core/p2p/node_test.exs +++ b/test/uniris/p2p/node_test.exs @@ -1,8 +1,8 @@ -defmodule UnirisCore.P2P.NodeTest do +defmodule Uniris.P2P.NodeTest do use ExUnit.Case - alias UnirisCore.P2P.Node - alias UnirisCore.P2P.NodeRegistry + alias Uniris.P2P.Node + alias Uniris.P2P.NodeRegistry doctest Node diff --git a/apps/uniris_core/test/uniris_core/p2p/transaction_loader_test.exs b/test/uniris/p2p/transaction_loader_test.exs similarity index 78% rename from apps/uniris_core/test/uniris_core/p2p/transaction_loader_test.exs rename to test/uniris/p2p/transaction_loader_test.exs index 23208f382..3fc666a58 100644 --- a/apps/uniris_core/test/uniris_core/p2p/transaction_loader_test.exs +++ b/test/uniris/p2p/transaction_loader_test.exs @@ -1,20 +1,20 @@ -defmodule UnirisCore.P2P.TransactionLoaderTest do - use UnirisCoreCase, async: false +defmodule Uniris.P2P.TransactionLoaderTest do + use UnirisCase, async: false - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Keys + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.TransactionData + alias Uniris.TransactionData.Keys - alias UnirisCore.Mining.Context + alias Uniris.Mining.Context - alias UnirisCore.P2P - alias UnirisCore.P2P.Node - alias UnirisCore.P2P.TransactionLoader + alias Uniris.P2P + alias Uniris.P2P.Node + alias Uniris.P2P.TransactionLoader - alias UnirisCore.Storage.Cache + alias Uniris.Storage.Cache import Mox @@ -43,7 +43,7 @@ defmodule UnirisCore.P2P.TransactionLoaderTest do ["cross_validation_node_public_keys"] ) - Cache.store_transaction(%{node_tx | validation_stamp: stamp}) + node_tx = %{node_tx | validation_stamp: stamp} secret_key = :crypto.strong_rand_bytes(32) secret = Crypto.aes_encrypt("secret", secret_key) @@ -62,7 +62,24 @@ defmodule UnirisCore.P2P.TransactionLoaderTest do ["cross_validation_node_public_keys"] ) - Cache.store_transaction(%{shared_secret_tx | validation_stamp: stamp}) + shared_secret_tx = %{shared_secret_tx | validation_stamp: stamp} + + Cache.store_transaction(node_tx) + Cache.store_transaction(shared_secret_tx) + + MockStorage + |> stub(:get_transaction, fn address -> + cond do + address == node_tx.address -> + {:ok, node_tx} + + address == shared_secret_tx.address -> + {:ok, shared_secret_tx} + + true -> + {:error, :transaction_not_exists} + end + end) TransactionLoader.start_link(renewal_interval: 0) Process.sleep(100) diff --git a/apps/uniris_core/test/uniris_core/p2p_test.exs b/test/uniris/p2p_test.exs similarity index 89% rename from apps/uniris_core/test/uniris_core/p2p_test.exs rename to test/uniris/p2p_test.exs index 79bbaddb7..ff5afd3c6 100644 --- a/apps/uniris_core/test/uniris_core/p2p_test.exs +++ b/test/uniris/p2p_test.exs @@ -1,10 +1,10 @@ -defmodule UnirisCore.P2PTest do - use UnirisCoreCase, async: false - doctest UnirisCore.P2P +defmodule Uniris.P2PTest do + use UnirisCase, async: false + doctest Uniris.P2P - alias UnirisCore.P2P - alias UnirisCore.P2P.Node - alias UnirisCore.P2P.NodeSupervisor + alias Uniris.P2P + alias Uniris.P2P.Node + alias Uniris.P2P.NodeSupervisor import Mox diff --git a/apps/uniris_core/test/uniris_core/self_repair_test.exs b/test/uniris/self_repair_test.exs similarity index 84% rename from apps/uniris_core/test/uniris_core/self_repair_test.exs rename to test/uniris/self_repair_test.exs index ace45d4be..1568ceeed 100644 --- a/apps/uniris_core/test/uniris_core/self_repair_test.exs +++ b/test/uniris/self_repair_test.exs @@ -1,30 +1,30 @@ -defmodule UnirisCore.SelfRepairTest do - use UnirisCoreCase, async: false +defmodule Uniris.SelfRepairTest do + use UnirisCase, async: false - alias UnirisCore.Bootstrap.NetworkInit + alias Uniris.Bootstrap.NetworkInit - alias UnirisCore.BeaconSlot - alias UnirisCore.BeaconSlot.TransactionInfo - alias UnirisCore.BeaconSlotTimer - alias UnirisCore.BeaconSubset - alias UnirisCore.BeaconSubsets + alias Uniris.BeaconSlot + alias Uniris.BeaconSlot.TransactionInfo + alias Uniris.BeaconSlotTimer + alias Uniris.BeaconSubset + alias Uniris.BeaconSubsets - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Mining.Context + alias Uniris.Mining.Context - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.BeaconSlotList - alias UnirisCore.P2P.Message.GetBeaconSlots - alias UnirisCore.P2P.Message.GetTransaction - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Message.BeaconSlotList + alias Uniris.P2P.Message.GetBeaconSlots + alias Uniris.P2P.Message.GetTransaction + alias Uniris.P2P.Node - alias UnirisCore.SelfRepair - alias UnirisCore.SharedSecrets + alias Uniris.SelfRepair + alias Uniris.SharedSecrets - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionData import Mox diff --git a/apps/uniris_core/test/uniris_core/shared_secrets/cache_test.exs b/test/uniris/shared_secrets/cache_test.exs similarity index 88% rename from apps/uniris_core/test/uniris_core/shared_secrets/cache_test.exs rename to test/uniris/shared_secrets/cache_test.exs index cceffc9d9..5a3ddb5b5 100644 --- a/apps/uniris_core/test/uniris_core/shared_secrets/cache_test.exs +++ b/test/uniris/shared_secrets/cache_test.exs @@ -1,8 +1,8 @@ -defmodule UnirisCore.SharedSecrets.CacheTest do +defmodule Uniris.SharedSecrets.CacheTest do use ExUnit.Case, async: false - alias UnirisCore.Crypto - alias UnirisCore.SharedSecrets.Cache + alias Uniris.Crypto + alias Uniris.SharedSecrets.Cache test "add_origin_public_key/1 should update the list of origin public keys" do {pub, _} = Crypto.generate_deterministic_keypair("hello") diff --git a/apps/uniris_core/test/uniris_core/shared_secrets/node_renewal_test.exs b/test/uniris/shared_secrets/node_renewal_test.exs similarity index 80% rename from apps/uniris_core/test/uniris_core/shared_secrets/node_renewal_test.exs rename to test/uniris/shared_secrets/node_renewal_test.exs index ed544816a..e652da21f 100644 --- a/apps/uniris_core/test/uniris_core/shared_secrets/node_renewal_test.exs +++ b/test/uniris/shared_secrets/node_renewal_test.exs @@ -1,16 +1,16 @@ -defmodule UnirisCore.SharedSecrets.NodeRenewalTest do - use UnirisCoreCase +defmodule Uniris.SharedSecrets.NodeRenewalTest do + use UnirisCase - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.P2P - alias UnirisCore.P2P.Message.StartMining - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Message.StartMining + alias Uniris.P2P.Node - alias UnirisCore.SharedSecrets.NodeRenewal + alias Uniris.SharedSecrets.NodeRenewal - alias UnirisCore.Transaction - alias UnirisCore.TransactionData + alias Uniris.Transaction + alias Uniris.TransactionData import Mox diff --git a/apps/uniris_core/test/uniris_core/shared_secrets_test.exs b/test/uniris/shared_secrets_test.exs similarity index 73% rename from apps/uniris_core/test/uniris_core/shared_secrets_test.exs rename to test/uniris/shared_secrets_test.exs index f75e6b0fb..78f269be8 100644 --- a/apps/uniris_core/test/uniris_core/shared_secrets_test.exs +++ b/test/uniris/shared_secrets_test.exs @@ -1,11 +1,11 @@ -defmodule UnirisCore.SharedSecretsTest do - use UnirisCoreCase, async: false +defmodule Uniris.SharedSecretsTest do + use UnirisCase, async: false - alias UnirisCore.Crypto - alias UnirisCore.SharedSecrets + alias Uniris.Crypto + alias Uniris.SharedSecrets - alias UnirisCore.Transaction - alias UnirisCore.TransactionData + alias Uniris.Transaction + alias Uniris.TransactionData test "new_node_shared_secrets_transaction/3 should create a new node shared secrets transaction" do aes_key = :crypto.strong_rand_bytes(32) diff --git a/apps/uniris_core/test/uniris_core/storage/cache_test.exs b/test/uniris/storage/cache_test.exs similarity index 81% rename from apps/uniris_core/test/uniris_core/storage/cache_test.exs rename to test/uniris/storage/cache_test.exs index 30d3019a4..170e39983 100644 --- a/apps/uniris_core/test/uniris_core/storage/cache_test.exs +++ b/test/uniris/storage/cache_test.exs @@ -1,42 +1,29 @@ -defmodule UnirisCore.Storage.CacheTest do - use UnirisCoreCase +defmodule Uniris.Storage.CacheTest do + use UnirisCase - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Mining.Context - alias UnirisCore.Mining.Fee + alias Uniris.Mining.Context + alias Uniris.Mining.Fee - alias UnirisCore.P2P - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Node - alias UnirisCore.Storage.Cache + alias Uniris.Storage.Cache - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger - alias UnirisCore.TransactionInput + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger + alias Uniris.TransactionInput describe "store_transaction/1" do - test "should insert the transaction" do - tx = Transaction.new(:node_shared_secrets, %TransactionData{}) - - stamp = - ValidationStamp.new(tx, %Context{}, "welcome_node_public_key", "coordinator_public_key", [ - "cross_validation_node_public_key" - ]) - - validated_tx = %{tx | validation_stamp: stamp} - :ok = Cache.store_transaction(validated_tx) - assert validated_tx == Cache.get_transaction(tx.address) - end - test "should index the transaction as node transaction" do tx = Transaction.new(:node, %TransactionData{}) @@ -47,7 +34,7 @@ defmodule UnirisCore.Storage.CacheTest do validated_tx = %{tx | validation_stamp: stamp} :ok = Cache.store_transaction(validated_tx) - assert [validated_tx] == Cache.node_transactions() + assert [validated_tx.address] == Cache.list_node_transaction_addresses() end test "should index the transaction as node shared secrets transaction" do @@ -60,7 +47,7 @@ defmodule UnirisCore.Storage.CacheTest do validated_tx = %{tx | validation_stamp: stamp} :ok = Cache.store_transaction(validated_tx) - assert validated_tx == Cache.last_node_shared_secrets_transaction() + assert {:ok, validated_tx.address} == Cache.get_last_node_shared_secrets_address() tx2 = Transaction.new(:node_shared_secrets, %TransactionData{}) @@ -75,7 +62,7 @@ defmodule UnirisCore.Storage.CacheTest do validated_tx2 = %{tx2 | validation_stamp: stamp} :ok = Cache.store_transaction(validated_tx2) - assert validated_tx2 == Cache.last_node_shared_secrets_transaction() + assert {:ok, validated_tx2.address} == Cache.get_last_node_shared_secrets_address() end test "should set the ledger" do @@ -220,26 +207,9 @@ defmodule UnirisCore.Storage.CacheTest do validated_tx3 = %{tx3 | validation_stamp: stamp} Cache.store_transaction(validated_tx3) - assert {:ok, tx3.address} == Cache.last_transaction_address(tx1.address) - assert {:ok, tx3.address} == Cache.last_transaction_address(tx2.address) - assert {:ok, tx3.address} == Cache.last_transaction_address(tx3.address) - end - - test "list_transactions/1 should return a stream of transaction" do - Enum.each(1..50, fn i -> - tx = Transaction.new(:node, %TransactionData{}, "seed", i) - - stamp = - ValidationStamp.new(tx, %Context{}, "welcome_node_public_key", "coordinator_public_key", [ - "cross_validation_node_public_key" - ]) - - validated_tx = %{tx | validation_stamp: stamp} - Cache.store_transaction(validated_tx) - end) - - assert 50 == Enum.count(Cache.list_transactions(0)) - assert 20 == Enum.count(Cache.list_transactions(20)) + assert {:ok, tx3.address} == Cache.get_last_transaction_address(tx1.address) + assert {:ok, tx3.address} == Cache.get_last_transaction_address(tx2.address) + assert {:ok, tx3.address} == Cache.get_last_transaction_address(tx3.address) end test "get_ledger_balance/1 should return the balance of utxo" do diff --git a/apps/uniris_core/test/uniris_core/transaction/cross_validation_stamp_test.exs b/test/uniris/transaction/cross_validation_stamp_test.exs similarity index 93% rename from apps/uniris_core/test/uniris_core/transaction/cross_validation_stamp_test.exs rename to test/uniris/transaction/cross_validation_stamp_test.exs index 33b7c9816..93c0c51ab 100644 --- a/apps/uniris_core/test/uniris_core/transaction/cross_validation_stamp_test.exs +++ b/test/uniris/transaction/cross_validation_stamp_test.exs @@ -1,12 +1,12 @@ -defmodule UnirisCore.Transaction.CrossValidationStampTest do - use UnirisCoreCase +defmodule Uniris.Transaction.CrossValidationStampTest do + use UnirisCase import Mox - alias UnirisCore.Crypto - alias UnirisCore.Transaction.CrossValidationStamp - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Crypto + alias Uniris.Transaction.CrossValidationStamp + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations doctest CrossValidationStamp diff --git a/apps/uniris_core/test/uniris_core/transaction/data/keys_test.exs b/test/uniris/transaction/data/keys_test.exs similarity index 91% rename from apps/uniris_core/test/uniris_core/transaction/data/keys_test.exs rename to test/uniris/transaction/data/keys_test.exs index 15d6307b9..e9328bf56 100644 --- a/apps/uniris_core/test/uniris_core/transaction/data/keys_test.exs +++ b/test/uniris/transaction/data/keys_test.exs @@ -1,11 +1,11 @@ -defmodule UnirisCore.TransactionData.KeysTest do +defmodule Uniris.TransactionData.KeysTest do use ExUnit.Case use ExUnitProperties - doctest UnirisCore.TransactionData.Keys + doctest Uniris.TransactionData.Keys - alias UnirisCore.Crypto - alias UnirisCore.TransactionData.Keys + alias Uniris.Crypto + alias Uniris.TransactionData.Keys test "new/3 create new transaction data keys and encrypt secret key with authorized public keys" do secret_key = :crypto.strong_rand_bytes(32) diff --git a/test/uniris/transaction/data/ledger/transfer_test.exs b/test/uniris/transaction/data/ledger/transfer_test.exs new file mode 100644 index 000000000..b08a7d927 --- /dev/null +++ b/test/uniris/transaction/data/ledger/transfer_test.exs @@ -0,0 +1,5 @@ +defmodule Uniris.TransactionData.Ledger.TransferTest do + use ExUnit.Case + + doctest Uniris.TransactionData.Ledger.Transfer +end diff --git a/apps/uniris_core/test/uniris_core/transaction/data/ledger/uco_ledger_test.exs b/test/uniris/transaction/data/ledger/uco_ledger_test.exs similarity index 81% rename from apps/uniris_core/test/uniris_core/transaction/data/ledger/uco_ledger_test.exs rename to test/uniris/transaction/data/ledger/uco_ledger_test.exs index 0b828e854..e1a9f4821 100644 --- a/apps/uniris_core/test/uniris_core/transaction/data/ledger/uco_ledger_test.exs +++ b/test/uniris/transaction/data/ledger/uco_ledger_test.exs @@ -1,9 +1,9 @@ -defmodule UnirisCore.TransactionData.UCOLedgerTest do +defmodule Uniris.TransactionData.UCOLedgerTest do use ExUnit.Case use ExUnitProperties - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger doctest UCOLedger diff --git a/test/uniris/transaction/data/ledger_test.exs b/test/uniris/transaction/data/ledger_test.exs new file mode 100644 index 000000000..2cfefb2f7 --- /dev/null +++ b/test/uniris/transaction/data/ledger_test.exs @@ -0,0 +1,6 @@ +defmodule Uniris.TransactionData.LedgerTest do + use ExUnit.Case + + alias Uniris.TransactionData.Ledger + doctest Ledger +end diff --git a/apps/uniris_core/test/uniris_core/transaction/data_test.exs b/test/uniris/transaction/data_test.exs similarity index 85% rename from apps/uniris_core/test/uniris_core/transaction/data_test.exs rename to test/uniris/transaction/data_test.exs index 58a01baa5..a6a898397 100644 --- a/apps/uniris_core/test/uniris_core/transaction/data_test.exs +++ b/test/uniris/transaction/data_test.exs @@ -1,14 +1,14 @@ -defmodule UnirisCore.TransactionDataTest do +defmodule Uniris.TransactionDataTest do use ExUnit.Case use ExUnitProperties - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Keys - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.TransactionData + alias Uniris.TransactionData.Keys + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger doctest TransactionData diff --git a/test/uniris/transaction/input_test.exs b/test/uniris/transaction/input_test.exs new file mode 100644 index 000000000..8ded8873a --- /dev/null +++ b/test/uniris/transaction/input_test.exs @@ -0,0 +1,4 @@ +defmodule Uniris.TransactionInputTest do + use ExUnit.Case + doctest Uniris.TransactionInput +end diff --git a/test/uniris/transaction/validation_stamp/ledger_operations/node_movement_test.exs b/test/uniris/transaction/validation_stamp/ledger_operations/node_movement_test.exs new file mode 100644 index 000000000..d6caad010 --- /dev/null +++ b/test/uniris/transaction/validation_stamp/ledger_operations/node_movement_test.exs @@ -0,0 +1,5 @@ +defmodule Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovementTest do + use ExUnit.Case + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + doctest NodeMovement +end diff --git a/test/uniris/transaction/validation_stamp/ledger_operations/transaction_movement_test.exs b/test/uniris/transaction/validation_stamp/ledger_operations/transaction_movement_test.exs new file mode 100644 index 000000000..562f5f846 --- /dev/null +++ b/test/uniris/transaction/validation_stamp/ledger_operations/transaction_movement_test.exs @@ -0,0 +1,5 @@ +defmodule Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovementTest do + use ExUnit.Case + alias Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement + doctest TransactionMovement +end diff --git a/test/uniris/transaction/validation_stamp/ledger_operations/unspent_output_test.exs b/test/uniris/transaction/validation_stamp/ledger_operations/unspent_output_test.exs new file mode 100644 index 000000000..e80134494 --- /dev/null +++ b/test/uniris/transaction/validation_stamp/ledger_operations/unspent_output_test.exs @@ -0,0 +1,5 @@ +defmodule Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutputTest do + use ExUnit.Case + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + doctest UnspentOutput +end diff --git a/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations_test.exs b/test/uniris/transaction/validation_stamp/ledger_operations_test.exs similarity index 95% rename from apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations_test.exs rename to test/uniris/transaction/validation_stamp/ledger_operations_test.exs index 9a8210368..734791e7b 100644 --- a/apps/uniris_core/test/uniris_core/transaction/validation_stamp/ledger_operations_test.exs +++ b/test/uniris/transaction/validation_stamp/ledger_operations_test.exs @@ -1,16 +1,16 @@ -defmodule UnirisCore.Transaction.ValidationStamp.LedgerOperationsTest do - use UnirisCoreCase +defmodule Uniris.Transaction.ValidationStamp.LedgerOperationsTest do + use UnirisCase use ExUnitProperties - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.TransactionMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.TransactionMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger doctest LedgerOperations diff --git a/apps/uniris_core/test/uniris_core/transaction/validation_stamp_test.exs b/test/uniris/transaction/validation_stamp_test.exs similarity index 91% rename from apps/uniris_core/test/uniris_core/transaction/validation_stamp_test.exs rename to test/uniris/transaction/validation_stamp_test.exs index 3b4bc7b17..203713882 100644 --- a/apps/uniris_core/test/uniris_core/transaction/validation_stamp_test.exs +++ b/test/uniris/transaction/validation_stamp_test.exs @@ -1,25 +1,25 @@ -defmodule UnirisCore.Transaction.ValidationStampTest do - use UnirisCoreCase +defmodule Uniris.Transaction.ValidationStampTest do + use UnirisCase import Mox - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Mining.Context + alias Uniris.Mining.Context - alias UnirisCore.P2P - alias UnirisCore.P2P.Node + alias Uniris.P2P + alias Uniris.P2P.Node - alias UnirisCore.Transaction - alias UnirisCore.Transaction.ValidationStamp - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.NodeMovement - alias UnirisCore.Transaction.ValidationStamp.LedgerOperations.UnspentOutput + alias Uniris.Transaction + alias Uniris.Transaction.ValidationStamp + alias Uniris.Transaction.ValidationStamp.LedgerOperations + alias Uniris.Transaction.ValidationStamp.LedgerOperations.NodeMovement + alias Uniris.Transaction.ValidationStamp.LedgerOperations.UnspentOutput - alias UnirisCore.TransactionData - alias UnirisCore.TransactionData.Ledger - alias UnirisCore.TransactionData.Ledger.Transfer - alias UnirisCore.TransactionData.UCOLedger + alias Uniris.TransactionData + alias Uniris.TransactionData.Ledger + alias Uniris.TransactionData.Ledger.Transfer + alias Uniris.TransactionData.UCOLedger doctest ValidationStamp diff --git a/apps/uniris_core/test/uniris_core/transaction_test.exs b/test/uniris/transaction_test.exs similarity index 93% rename from apps/uniris_core/test/uniris_core/transaction_test.exs rename to test/uniris/transaction_test.exs index 795687e37..f13f5f320 100644 --- a/apps/uniris_core/test/uniris_core/transaction_test.exs +++ b/test/uniris/transaction_test.exs @@ -1,14 +1,14 @@ -defmodule UnirisCore.TransactionTest do - use UnirisCoreCase, async: false +defmodule Uniris.TransactionTest do + use UnirisCase, async: false - alias UnirisCore.Crypto + alias Uniris.Crypto - alias UnirisCore.Transaction - alias UnirisCore.Transaction.CrossValidationStamp + alias Uniris.Transaction + alias Uniris.Transaction.CrossValidationStamp - alias UnirisCore.TransactionData + alias Uniris.TransactionData - doctest UnirisCore.Transaction + doctest Uniris.Transaction describe "new/2" do test "with type ':node' create a new transaction using the node keys" do diff --git a/apps/uniris_core/test/uniris_core/utils_test.exs b/test/uniris/utils_test.exs similarity index 91% rename from apps/uniris_core/test/uniris_core/utils_test.exs rename to test/uniris/utils_test.exs index c6c536069..710c16d5f 100644 --- a/apps/uniris_core/test/uniris_core/utils_test.exs +++ b/test/uniris/utils_test.exs @@ -1,8 +1,8 @@ -defmodule UnirisCore.UtilsTests do +defmodule Uniris.UtilsTests do use ExUnit.Case - doctest UnirisCore.Utils + doctest Uniris.Utils - alias UnirisCore.Utils + alias Uniris.Utils describe "time_offset/1 should return the number of milliseconds to reach an interval" do test "each 20 seconds" do diff --git a/test/uniris_test.exs b/test/uniris_test.exs new file mode 100644 index 000000000..e994740fd --- /dev/null +++ b/test/uniris_test.exs @@ -0,0 +1,3 @@ +defmodule UnirisTest do + use ExUnit.Case +end diff --git a/apps/uniris_web/test/uniris_web/views/error_view_test.exs b/test/uniris_web/views/error_view_test.exs similarity index 100% rename from apps/uniris_web/test/uniris_web/views/error_view_test.exs rename to test/uniris_web/views/error_view_test.exs