osbc 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.env +5 -0
- data/.rspec +1 -0
- data/.rubocop.yml +273 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Dockerfile +17 -0
- data/Gemfile +109 -0
- data/Gemfile.lock +343 -0
- data/LICENSE.md +21 -0
- data/LICENSE.txt +21 -0
- data/Procfile +3 -0
- data/Procfile.dev +2 -0
- data/README.md +185 -0
- data/Rakefile +6 -0
- data/app/assets/builds/.keep +0 -0
- data/app/assets/config/manifest.js +5 -0
- data/app/assets/images/.keep +0 -0
- data/app/assets/images/bg.png +0 -0
- data/app/assets/images/gimage.png +0 -0
- data/app/assets/images/image.png +0 -0
- data/app/assets/images/logo.png +0 -0
- data/app/assets/images/outerspc.jpg +0 -0
- data/app/assets/images/proxy.jpg +0 -0
- data/app/assets/images/space.jpg +0 -0
- data/app/assets/images/space_four.jpg +0 -0
- data/app/assets/images/space_t.jpg +0 -0
- data/app/assets/images/space_th.jpg +0 -0
- data/app/assets/images/space_two.jpg +0 -0
- data/app/assets/images/th.jpg +0 -0
- data/app/assets/stylesheets/application.css +344 -0
- data/app/assets/stylesheets/application.tailwind.css +13 -0
- data/app/assets/stylesheets/home.css +0 -0
- data/app/channels/application_cable/channel.rb +6 -0
- data/app/channels/application_cable/connection.rb +6 -0
- data/app/controllers/api/v1/block_confirmations_controller.rb +65 -0
- data/app/controllers/application_controller.rb +72 -0
- data/app/controllers/blocks_controller.rb +20 -0
- data/app/controllers/chains_controller.rb +72 -0
- data/app/controllers/concerns/.keep +0 -0
- data/app/controllers/contracts_controller.rb +25 -0
- data/app/controllers/pools_controller.rb +73 -0
- data/app/controllers/signatures_controller.rb +25 -0
- data/app/controllers/tickets_controller.rb +76 -0
- data/app/controllers/transactions_controller.rb +48 -0
- data/app/controllers/users/confirmations_controller.rb +30 -0
- data/app/controllers/users/omniauth_callbacks_controller.rb +30 -0
- data/app/controllers/users/passwords_controller.rb +34 -0
- data/app/controllers/users/registrations_controller.rb +61 -0
- data/app/controllers/users/sessions_controller.rb +27 -0
- data/app/controllers/users/unlocks_controller.rb +30 -0
- data/app/controllers/wallets_controller.rb +18 -0
- data/app/helpers/application_helper.rb +4 -0
- data/app/helpers/blocks_helper.rb +4 -0
- data/app/helpers/chains_helper.rb +4 -0
- data/app/helpers/contracts_helper.rb +4 -0
- data/app/helpers/pools_helper.rb +4 -0
- data/app/helpers/signatures_helper.rb +4 -0
- data/app/helpers/tickets_helper.rb +4 -0
- data/app/helpers/transactions_helper.rb +4 -0
- data/app/helpers/wallets_helper.rb +4 -0
- data/app/javascript/application.js +3 -0
- data/app/javascript/controllers/application.js +9 -0
- data/app/javascript/controllers/hello_controller.js +7 -0
- data/app/javascript/controllers/index.js +11 -0
- data/app/jobs/application_job.rb +9 -0
- data/app/mailers/application_mailer.rb +6 -0
- data/app/models/acceptable_number_sequence.rb +4 -0
- data/app/models/acceptable_symbol_sequence.rb +4 -0
- data/app/models/acceptable_word.rb +4 -0
- data/app/models/application_record.rb +5 -0
- data/app/models/block.rb +17 -0
- data/app/models/chain.rb +10 -0
- data/app/models/concerns/.keep +0 -0
- data/app/models/concerns/sequences_validator.rb +30 -0
- data/app/models/concerns/wallet_exists_validator.rb +13 -0
- data/app/models/contract.rb +7 -0
- data/app/models/pool.rb +5 -0
- data/app/models/signature.rb +12 -0
- data/app/models/ticket.rb +11 -0
- data/app/models/transaction.rb +25 -0
- data/app/models/user.rb +44 -0
- data/app/models/wallet.rb +33 -0
- data/app/services/application_service.rb +23 -0
- data/app/services/assign_contracts_service.rb +162 -0
- data/app/services/create_ticket_service.rb +87 -0
- data/app/services/create_wallet_service.rb +20 -0
- data/app/services/transaction_to_block_service.rb +62 -0
- data/app/views/application/_featured_board.html.erb +77 -0
- data/app/views/application/home.html.slim +1 -0
- data/app/views/application/mining_profile.html.slim +59 -0
- data/app/views/application/privacy_policy.html.erb +0 -0
- data/app/views/application/terms.html.erb +0 -0
- data/app/views/blocks/_block.html.slim +13 -0
- data/app/views/blocks/_block.json.jbuilder +4 -0
- data/app/views/blocks/_form.html.slim +26 -0
- data/app/views/blocks/edit.html.slim +10 -0
- data/app/views/blocks/index.html.slim +12 -0
- data/app/views/blocks/index.json.jbuilder +3 -0
- data/app/views/blocks/new.html.slim +8 -0
- data/app/views/blocks/show.html.slim +8 -0
- data/app/views/blocks/show.json.jbuilder +3 -0
- data/app/views/chains/_chain.html.slim +16 -0
- data/app/views/chains/_chain.json.jbuilder +4 -0
- data/app/views/chains/_form.html.slim +30 -0
- data/app/views/chains/edit.html.slim +10 -0
- data/app/views/chains/index.html.slim +11 -0
- data/app/views/chains/index.json.jbuilder +3 -0
- data/app/views/chains/new.html.slim +8 -0
- data/app/views/chains/show.html.slim +10 -0
- data/app/views/chains/show.json.jbuilder +3 -0
- data/app/views/contracts/_contract.html.slim +8 -0
- data/app/views/contracts/_contract.json.jbuilder +4 -0
- data/app/views/contracts/_form.html.slim +34 -0
- data/app/views/contracts/edit.html.slim +10 -0
- data/app/views/contracts/index.html.slim +12 -0
- data/app/views/contracts/index.json.jbuilder +3 -0
- data/app/views/contracts/new.html.slim +8 -0
- data/app/views/contracts/show.html.slim +8 -0
- data/app/views/contracts/show.json.jbuilder +3 -0
- data/app/views/layouts/_alert.html.slim +6 -0
- data/app/views/layouts/_navbar.html.slim +27 -0
- data/app/views/layouts/_notice.html.slim +6 -0
- data/app/views/layouts/application.html.erb +32 -0
- data/app/views/layouts/mailer.html.erb +13 -0
- data/app/views/layouts/mailer.text.erb +1 -0
- data/app/views/pools/_form.html.slim +30 -0
- data/app/views/pools/_pool.html.slim +16 -0
- data/app/views/pools/_pool.json.jbuilder +4 -0
- data/app/views/pools/edit.html.slim +10 -0
- data/app/views/pools/index.html.slim +12 -0
- data/app/views/pools/index.json.jbuilder +3 -0
- data/app/views/pools/new.html.slim +8 -0
- data/app/views/pools/show.html.slim +8 -0
- data/app/views/pools/show.json.jbuilder +3 -0
- data/app/views/signatures/_form.html.slim +46 -0
- data/app/views/signatures/_signature.html.slim +28 -0
- data/app/views/signatures/_signature.json.jbuilder +4 -0
- data/app/views/signatures/edit.html.slim +10 -0
- data/app/views/signatures/index.html.slim +10 -0
- data/app/views/signatures/index.json.jbuilder +3 -0
- data/app/views/signatures/new.html.slim +8 -0
- data/app/views/signatures/show.html.slim +10 -0
- data/app/views/signatures/show.json.jbuilder +3 -0
- data/app/views/tickets/_form.html.slim +26 -0
- data/app/views/tickets/_ticket.html.slim +10 -0
- data/app/views/tickets/_ticket.json.jbuilder +4 -0
- data/app/views/tickets/edit.html.slim +10 -0
- data/app/views/tickets/index.html.slim +16 -0
- data/app/views/tickets/index.json.jbuilder +3 -0
- data/app/views/tickets/new.html.slim +10 -0
- data/app/views/tickets/show.html.slim +8 -0
- data/app/views/tickets/show.json.jbuilder +3 -0
- data/app/views/transactions/_form.html.slim +16 -0
- data/app/views/transactions/_transaction.html.slim +24 -0
- data/app/views/transactions/_transaction.json.jbuilder +4 -0
- data/app/views/transactions/edit.html.slim +10 -0
- data/app/views/transactions/index.html.slim +19 -0
- data/app/views/transactions/index.json.jbuilder +3 -0
- data/app/views/transactions/new.html.slim +9 -0
- data/app/views/transactions/show.html.slim +8 -0
- data/app/views/transactions/show.json.jbuilder +3 -0
- data/app/views/users/confirmations/new.html.erb +16 -0
- data/app/views/users/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/users/mailer/email_changed.html.erb +7 -0
- data/app/views/users/mailer/password_change.html.erb +3 -0
- data/app/views/users/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/users/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/users/passwords/edit.html.erb +25 -0
- data/app/views/users/passwords/new.html.erb +16 -0
- data/app/views/users/registrations/edit.html.erb +43 -0
- data/app/views/users/registrations/new.html.erb +37 -0
- data/app/views/users/sessions/new.html.erb +30 -0
- data/app/views/users/shared/_error_messages.html.erb +15 -0
- data/app/views/users/shared/_links.html.erb +25 -0
- data/app/views/users/unlocks/new.html.erb +16 -0
- data/app/views/wallets/_form.html.slim +30 -0
- data/app/views/wallets/_wallet.html.slim +13 -0
- data/app/views/wallets/_wallet.json.jbuilder +4 -0
- data/app/views/wallets/edit.html.slim +10 -0
- data/app/views/wallets/index.html.slim +18 -0
- data/app/views/wallets/index.json.jbuilder +3 -0
- data/app/views/wallets/new.html.slim +8 -0
- data/app/views/wallets/show.html.slim +11 -0
- data/app/views/wallets/show.json.jbuilder +3 -0
- data/app/workers/application_worker.rb +82 -0
- data/app/workers/assign_contract_worker.rb +27 -0
- data/app/workers/create_ticket_worker.rb +23 -0
- data/app/workers/create_wallet_worker.rb +21 -0
- data/app/workers/transaction_to_block_worker.rb +48 -0
- data/bin/bundle +114 -0
- data/bin/console +15 -0
- data/bin/dev +9 -0
- data/bin/importmap +5 -0
- data/bin/osbc +77 -0
- data/bin/rails +6 -0
- data/bin/rake +6 -0
- data/bin/setup +35 -0
- data/config/application.rb +25 -0
- data/config/boot.rb +6 -0
- data/config/cable.yml +10 -0
- data/config/credentials.yml.enc +1 -0
- data/config/database.yml +21 -0
- data/config/environment.rb +7 -0
- data/config/environments/development.rb +73 -0
- data/config/environments/production.rb +95 -0
- data/config/environments/test.rb +62 -0
- data/config/importmap.rb +9 -0
- data/config/initializers/assets.rb +14 -0
- data/config/initializers/content_security_policy.rb +26 -0
- data/config/initializers/devise.rb +311 -0
- data/config/initializers/filter_parameter_logging.rb +10 -0
- data/config/initializers/inflections.rb +17 -0
- data/config/initializers/permissions_policy.rb +12 -0
- data/config/locales/devise.en.yml +65 -0
- data/config/locales/en.yml +33 -0
- data/config/puma.rb +45 -0
- data/config/routes/api.rb +9 -0
- data/config/routes.rb +30 -0
- data/config/sidekiq.yml +10 -0
- data/config/storage.yml +34 -0
- data/config/tailwind.config.js +23 -0
- data/config.ru +8 -0
- data/coverage/.last_run.json +5 -0
- data/coverage/.resultset.json +1853 -0
- data/coverage/.resultset.json.lock +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
- data/coverage/assets/0.12.3/application.css +1 -0
- data/coverage/assets/0.12.3/application.js +7 -0
- data/coverage/assets/0.12.3/colorbox/border.png +0 -0
- data/coverage/assets/0.12.3/colorbox/controls.png +0 -0
- data/coverage/assets/0.12.3/colorbox/loading.gif +0 -0
- data/coverage/assets/0.12.3/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.12.3/favicon_green.png +0 -0
- data/coverage/assets/0.12.3/favicon_red.png +0 -0
- data/coverage/assets/0.12.3/favicon_yellow.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.12.3/loading.gif +0 -0
- data/coverage/assets/0.12.3/magnify.png +0 -0
- data/coverage/index.html +20731 -0
- data/db/migrate/20221018053949_devise_create_users.rb +45 -0
- data/db/migrate/20221019002956_create_chains.rb +13 -0
- data/db/migrate/20221020112137_create_blocks.rb +12 -0
- data/db/migrate/20221020123102_add_chain_to_blocks.rb +5 -0
- data/db/migrate/20221020150504_create_wallets.rb +13 -0
- data/db/migrate/20221022221059_create_transactions.rb +20 -0
- data/db/migrate/20221023011005_add_block_to_transactions.rb +5 -0
- data/db/migrate/20221023014707_create_contracts.rb +11 -0
- data/db/migrate/20221023040749_create_pools.rb +13 -0
- data/db/migrate/20221023041015_create_tickets.rb +11 -0
- data/db/migrate/20221023103509_add_contracts_count_to_block.rb +6 -0
- data/db/migrate/20221023110613_add_acceptable_word_list_to_users.rb +7 -0
- data/db/migrate/20221023113539_create_signatures.rb +19 -0
- data/db/migrate/20221023113750_create_acceptable_words.rb +9 -0
- data/db/migrate/20221023114152_create_acceptable_number_sequences.rb +9 -0
- data/db/migrate/20221023114203_create_acceptable_symbol_sequences.rb +9 -0
- data/db/migrate/20221023114324_add_user_acceptable_hash_to_tickets.rb +7 -0
- data/db/migrate/20221023114408_add_time_ref_to_tickets.rb +5 -0
- data/db/migrate/20221024125047_add_master_hash_to_blocks.rb +5 -0
- data/db/migrate/20221109161845_add_transactions_count_to_blocks.rb +5 -0
- data/db/migrate/20221117135003_add_balance_to_chains.rb +5 -0
- data/db/migrate/20221117203417_add_transaction_id_list_to_tickets.rb +5 -0
- data/db/migrate/20221118080357_add_api_keys_to_users.rb +6 -0
- data/db/schema.rb +179 -0
- data/db/seeds.rb +134 -0
- data/docker-compose.yml +53 -0
- data/entrypoint.sh +8 -0
- data/lib/assets/.keep +0 -0
- data/lib/osbc/osbc.rb +9 -0
- data/lib/outerspace/blockchain/version.rb +7 -0
- data/lib/outerspace/blockchain.rb +10 -0
- data/lib/tasks/.keep +0 -0
- data/lib/tasks/compose.rake +92 -0
- data/lib/tasks/compose_db.rake +71 -0
- data/lib/tasks/compose_logs.rake +95 -0
- data/lib/tasks/compose_test.rake +62 -0
- data/log/.keep +0 -0
- data/mining_concept.ipynb +284 -0
- data/outerspace-blockchain.gemspec +50 -0
- data/public/404.html +67 -0
- data/public/422.html +67 -0
- data/public/500.html +66 -0
- data/public/apple-touch-icon-precomposed.png +0 -0
- data/public/apple-touch-icon.png +0 -0
- data/public/favicon.ico +0 -0
- data/public/robots.txt +1 -0
- data/storage/.keep +0 -0
- data/tmp/.keep +0 -0
- data/tmp/pids/.keep +0 -0
- data/tmp/storage/.keep +0 -0
- data/vendor/.keep +0 -0
- data/vendor/javascript/.keep +0 -0
- metadata +643 -0
data/lib/tasks/.keep
ADDED
|
File without changes
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rake"
|
|
4
|
+
|
|
5
|
+
namespace :compose do
|
|
6
|
+
task :install do
|
|
7
|
+
puts "Installing Blockchain and Database Containers"
|
|
8
|
+
system "sudo docker compose build"
|
|
9
|
+
puts "Creating Database"
|
|
10
|
+
system "sudo docker compose run --rm web rails db:create"
|
|
11
|
+
puts "Migrating Database"
|
|
12
|
+
system "sudo docker compose run --rm web rails db:migrate"
|
|
13
|
+
puts "Seeding Database"
|
|
14
|
+
system "sudo docker compose run --rm web rails db:seed"
|
|
15
|
+
puts "Stopping Containers"
|
|
16
|
+
system "sudo docker compose down"
|
|
17
|
+
puts "Installing Blockchain and Database Containers... Done!"
|
|
18
|
+
puts "This already setup your database with some initial values"
|
|
19
|
+
puts "Start the containers with command: rake compose:up"
|
|
20
|
+
puts "Stop the containers with command: rake compose:down"
|
|
21
|
+
puts "Restart the containers with command: rake compose:restart"
|
|
22
|
+
puts "Clean up the containers with command: rake compose:clean_all"
|
|
23
|
+
puts "Test your containers with command: rake compose:test"
|
|
24
|
+
puts "Build the containers againg with command: rake compose:build"
|
|
25
|
+
puts "rake compose_db command documentation at README.md to see database commands usage examples"
|
|
26
|
+
puts "See the development and test log files in Rails default logs folder when using compose:up"
|
|
27
|
+
puts "-----------------------------------------------------------------------------------"
|
|
28
|
+
puts "Access the web server on port 80."
|
|
29
|
+
puts "http://localhost"
|
|
30
|
+
puts "Look at README.md for more details."
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
task :build do
|
|
34
|
+
puts "Building Compose..."
|
|
35
|
+
system "sudo docker compose build"
|
|
36
|
+
puts "Building Compose... Done!"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
task :up do
|
|
40
|
+
puts "Running Compose..."
|
|
41
|
+
system "sudo docker compose up -d --remove-orphans"
|
|
42
|
+
puts "Running Compose... Done!"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
task :down do
|
|
46
|
+
puts "Stopping Compose..."
|
|
47
|
+
system "sudo docker compose down"
|
|
48
|
+
puts "Stopping Compose... Done!"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
task :db_detach do
|
|
52
|
+
puts "Running Database Detached..."
|
|
53
|
+
system "sudo docker compose up -d db"
|
|
54
|
+
puts "Running Database Detached... Done!"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
task :redis_detach do
|
|
58
|
+
puts "Running Redis Detached..."
|
|
59
|
+
system "sudo docker compose up -d redis"
|
|
60
|
+
puts "Running Redis Detached... Done!"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
task :back_detach do
|
|
64
|
+
puts "Running Backend Detached..."
|
|
65
|
+
system "sudo docker compose up -d --remove-orphans db redis sidekiq"
|
|
66
|
+
puts "Running Backend Detached... Done!"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
task :restart do
|
|
70
|
+
puts "Restarting Compose..."
|
|
71
|
+
puts "Stopping Compose..."
|
|
72
|
+
system "sudo docker compose down"
|
|
73
|
+
puts "Stopping Compose... Done!"
|
|
74
|
+
puts "Running Compose..."
|
|
75
|
+
system "sudo docker compose up -d --remove-orphans"
|
|
76
|
+
puts "Restarting Compose... Done!"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
task :clean_all do
|
|
80
|
+
puts "Cleaning Images..."
|
|
81
|
+
puts "Stopping Compose..."
|
|
82
|
+
system "sudo docker compose down"
|
|
83
|
+
puts "Stopping Compose... Done!"
|
|
84
|
+
puts "Removing Compose..."
|
|
85
|
+
system "sudo docker compose rm -v"
|
|
86
|
+
puts "Removing Compose... Done!"
|
|
87
|
+
puts "Removing Containers..."
|
|
88
|
+
system "sudo docker rm -f $(sudo docker ps -a -q)"
|
|
89
|
+
puts "Removing Containers... Done!"
|
|
90
|
+
puts "Cleaning Images... Done!"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rake"
|
|
4
|
+
|
|
5
|
+
namespace :compose_db do
|
|
6
|
+
task :drop do
|
|
7
|
+
puts "Dropping Database..."
|
|
8
|
+
system("sudo docker compose run --rm web rake db:drop")
|
|
9
|
+
puts "Dropping Database... Done!"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
task :rollback do
|
|
13
|
+
puts "Rolling Back Database..."
|
|
14
|
+
system("sudo docker compose run --rm web rails db:rollback")
|
|
15
|
+
puts "Rolling Back Database... Done!"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
task :complete_setup do
|
|
19
|
+
puts "Setting up Database..."
|
|
20
|
+
system("sudo docker compose run --rm web rake db:create")
|
|
21
|
+
system("sudo docker compose run --rm web rake db:migrate")
|
|
22
|
+
system("sudo docker compose run --rm web rake db:seed")
|
|
23
|
+
puts "Setting up Database... Done!"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
task :setup do
|
|
27
|
+
puts "Setting up and seeding Database..."
|
|
28
|
+
system("sudo docker compose run --rm web rake db:setup")
|
|
29
|
+
puts "Setting up and seeding Database... Done!"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
task :create do
|
|
33
|
+
puts "Creating Database..."
|
|
34
|
+
system("sudo docker compose run --rm web rake db:create")
|
|
35
|
+
puts "Creating Database... Done!"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
task :migrate do
|
|
39
|
+
puts "Running Migration..."
|
|
40
|
+
system("sudo docker compose run --rm web rake db:migrate")
|
|
41
|
+
puts "Running Migration... Done!"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
task :seed do
|
|
45
|
+
puts "Running Seed..."
|
|
46
|
+
system("sudo docker compose run --rm web rake db:seed")
|
|
47
|
+
puts "Running Seed... Done!"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
task :reset_setup do
|
|
51
|
+
puts "Resettting Database..."
|
|
52
|
+
system("sudo docker compose run --rm web rake db:drop")
|
|
53
|
+
system("sudo docker compose run --rm web rake db:setup")
|
|
54
|
+
puts "Resetting up Database... Done!"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
task :reset do
|
|
58
|
+
puts "Resetting Database..."
|
|
59
|
+
system("sudo docker compose run --rm web rake db:drop")
|
|
60
|
+
system("sudo docker compose run --rm web rake db:create")
|
|
61
|
+
system("sudo docker compose run --rm web rake db:migrate")
|
|
62
|
+
system("sudo docker compose run --rm web rake db:seed")
|
|
63
|
+
puts "Resetting Compose... Done!"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
task :force_reset do
|
|
67
|
+
puts "Running Compose Down"
|
|
68
|
+
system("rake compose:down")
|
|
69
|
+
system("rake compose_db:reset")
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rake"
|
|
4
|
+
|
|
5
|
+
namespace :compose_logs do
|
|
6
|
+
task :web do
|
|
7
|
+
puts "Showing Web Logs..."
|
|
8
|
+
system "sudo docker compose logs web"
|
|
9
|
+
puts "Showing Web Logs... Done!"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
task :db do
|
|
13
|
+
puts "Showing Database Logs..."
|
|
14
|
+
system "sudo docker compose logs db"
|
|
15
|
+
puts "Showing Database Logs... Done!"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
task :redis do
|
|
19
|
+
puts "Showing Redis Logs..."
|
|
20
|
+
system "sudo docker compose logs redis"
|
|
21
|
+
puts "Showing Redis Logs... Done!"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
task :sidekiq do
|
|
25
|
+
puts "Showing Sidekiq Logs..."
|
|
26
|
+
system "sudo docker compose logs sidekiq"
|
|
27
|
+
puts "Showing Sidekiq Logs... Done!"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
task :all do
|
|
31
|
+
puts "Showing All Logs..."
|
|
32
|
+
system "sudo docker compose logs"
|
|
33
|
+
puts "Showing All Logs... Done!"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
task :tail_web do
|
|
37
|
+
puts "Tailing Web Logs..."
|
|
38
|
+
system "sudo docker compose logs -f web"
|
|
39
|
+
puts "Tailing Web Logs... Done!"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
task :tail_db do
|
|
43
|
+
puts "Tailing Database Logs..."
|
|
44
|
+
system "sudo docker compose logs -f db"
|
|
45
|
+
puts "Tailing Database Logs... Done!"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
task :tail_redis do
|
|
49
|
+
puts "Tailing Redis Logs..."
|
|
50
|
+
system "sudo docker compose logs -f redis"
|
|
51
|
+
puts "Tailing Redis Logs... Done!"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
task :tail_sidekiq do
|
|
55
|
+
puts "Tailing Sidekiq Logs..."
|
|
56
|
+
system "sudo docker compose logs -f sidekiq"
|
|
57
|
+
puts "Tailing Sidekiq Logs... Done!"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
task :tail_all do
|
|
61
|
+
puts "Tailing All Logs..."
|
|
62
|
+
system "sudo docker compose logs -f"
|
|
63
|
+
puts "Tailing All Logs... Done!"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
task :follow_web do
|
|
67
|
+
puts "Following Web Logs..."
|
|
68
|
+
system "sudo docker compose logs -f web"
|
|
69
|
+
puts "Following Web Logs... Done!"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
task :follow_db do
|
|
73
|
+
puts "Following Database Logs..."
|
|
74
|
+
system "sudo docker compose logs -f db"
|
|
75
|
+
puts "Following Database Logs... Done!"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
task :follow_redis do
|
|
79
|
+
puts "Following Redis Logs..."
|
|
80
|
+
system "sudo docker compose logs -f redis"
|
|
81
|
+
puts "Following Redis Logs... Done!"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
task :follow_sidekiq do
|
|
85
|
+
puts "Following Sidekiq Logs..."
|
|
86
|
+
system "sudo docker compose logs -f sidekiq"
|
|
87
|
+
puts "Following Sidekiq Logs... Done!"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
task :follow_all do
|
|
91
|
+
puts "Following All Logs..."
|
|
92
|
+
system "sudo docker compose logs -f"
|
|
93
|
+
puts "Following All Logs... Done!"
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rake"
|
|
4
|
+
|
|
5
|
+
namespace :compose_test do
|
|
6
|
+
task :all do
|
|
7
|
+
puts "Running Test..."
|
|
8
|
+
system "sudo docker compose run --rm web bundle exec rspec"
|
|
9
|
+
puts "Running Test... Done!"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
task :clean_test do
|
|
13
|
+
puts "Running Clean Test..."
|
|
14
|
+
system "rake compose:clean_all"
|
|
15
|
+
puts "Cleaning Compose Images... Done!"
|
|
16
|
+
puts "Running Tests ..."
|
|
17
|
+
system "sudo docker compose run --rm web bundle exec rspec"
|
|
18
|
+
puts "Running Clean Test... Done!"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
task :controllers do
|
|
22
|
+
puts "Running Controllers Test..."
|
|
23
|
+
system "sudo docker compose run --rm web bundle exec rspec spec/controllers"
|
|
24
|
+
puts "Running Controllers Test... Done!"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
task :models do
|
|
28
|
+
puts "Running Models Test..."
|
|
29
|
+
system "sudo docker compose run --rm web bundle exec rspec spec/models"
|
|
30
|
+
puts "Running Models Test... Done!"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
task :requests do
|
|
34
|
+
puts "Running Requests Test..."
|
|
35
|
+
system "sudo docker compose run --rm web bundle exec rspec spec/requests"
|
|
36
|
+
puts "Running Requests Test... Done!"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
task :helpers do
|
|
40
|
+
puts "Running Helpers Test..."
|
|
41
|
+
system "sudo docker compose run --rm web bundle exec rspec spec/helpers"
|
|
42
|
+
puts "Running Helpers Test... Done!"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
task :mailers do
|
|
46
|
+
puts "Running Mailers Test..."
|
|
47
|
+
system "sudo docker compose run --rm web bundle exec rspec spec/mailers"
|
|
48
|
+
puts "Running Mailers Test... Done!"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
task :routing do
|
|
52
|
+
puts "Running Routing Test..."
|
|
53
|
+
system "sudo docker compose run --rm web bundle exec rspec spec/routing"
|
|
54
|
+
puts "Running Routing Test... Done!"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
task :views do
|
|
58
|
+
puts "Running Views Test..."
|
|
59
|
+
system "sudo docker compose run --rm web bundle exec rspec spec/views"
|
|
60
|
+
puts "Running Views Test... Done!"
|
|
61
|
+
end
|
|
62
|
+
end
|
data/log/.keep
ADDED
|
File without changes
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "markdown",
|
|
5
|
+
"metadata": {},
|
|
6
|
+
"source": [
|
|
7
|
+
"## Mining Concept\n",
|
|
8
|
+
"- Every user will have a **randomized acceptable word list**\n",
|
|
9
|
+
"- This word list will have three classes of words\n",
|
|
10
|
+
"1. Common words\n",
|
|
11
|
+
"2. Symbol Sequence\n",
|
|
12
|
+
"3. Number Sequence\n",
|
|
13
|
+
"\n",
|
|
14
|
+
"<p> \n",
|
|
15
|
+
"When a user want to mine a block, the user will open a ticket in the server\n",
|
|
16
|
+
"and after the ticket is open, the user will start to mine the block\n",
|
|
17
|
+
"</p> \n",
|
|
18
|
+
"\n",
|
|
19
|
+
"<p>\n",
|
|
20
|
+
"The mine will depend of the contract signatures that will be formed by the server using the word list of the user\n",
|
|
21
|
+
"</p>\n",
|
|
22
|
+
"\n",
|
|
23
|
+
"\n",
|
|
24
|
+
"## Steps to mine a block:\n",
|
|
25
|
+
"\n",
|
|
26
|
+
"1. The user will open a TICKET in the server\n",
|
|
27
|
+
"2. The server will send a message to the user to start mining if the POOL is open\n",
|
|
28
|
+
"3. The users will load the RANDOM WORD LIST provided by the server API\n",
|
|
29
|
+
"4. The user have to use 1 common word, 1 symbol sequence and 1 number sequence, randomize the characters\n",
|
|
30
|
+
"5. Transform the chartacters in a SHA256 hash\n",
|
|
31
|
+
"6. Transform the block info in before ticket opened in a SHA256 hash\n",
|
|
32
|
+
"5. Transform (Chars SHA256 hash + block info hash) in a SHA256 hash - or - send only the chars SHA256 hash\n",
|
|
33
|
+
"6. If the hash is valid, the user will send the hash to the server\n",
|
|
34
|
+
"7. The server will check if the hash is valid\n",
|
|
35
|
+
"8. If the hash is valid, check if the same transactions have the same block state confirmation\n",
|
|
36
|
+
"9. If this transactions was not confirmed at this point at block history the server will add the user signature to the transaction contract\n",
|
|
37
|
+
"10. The block only can be hashed when the minimum number of contracts valids with minimum number of signatures is reached\n",
|
|
38
|
+
"11. The server will use the signature timeline to determine what transactions will be added to the block\n",
|
|
39
|
+
"12. The server will calculate the master hash after confirm all valid contracts signatures\n",
|
|
40
|
+
"13. The server will add the block to the blockchain and create a new one with last block unconfirmed transactions but completely unsigned\n",
|
|
41
|
+
"13. The server will start a open/closed pool cycle\n",
|
|
42
|
+
"14. The server will send a message to the user to start mining when the POOL is open and user has a ticket\n",
|
|
43
|
+
"<p>\n",
|
|
44
|
+
"The timestamps of the signatures will be usefull to version the block, checking it as a timeline\n",
|
|
45
|
+
"</p>\n",
|
|
46
|
+
"\n",
|
|
47
|
+
"**The miners will be rewarded with the block reward distributed by the number of signatures**\n"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"cell_type": "code",
|
|
52
|
+
"execution_count": 1,
|
|
53
|
+
"metadata": {},
|
|
54
|
+
"outputs": [],
|
|
55
|
+
"source": [
|
|
56
|
+
"import pandas as pd\n",
|
|
57
|
+
"import numpy as np\n",
|
|
58
|
+
"import matplotlib.pyplot as plt\n",
|
|
59
|
+
"import seaborn as sns\n",
|
|
60
|
+
"import datetime\n",
|
|
61
|
+
"import hashlib\n",
|
|
62
|
+
"import itertools\n",
|
|
63
|
+
"import requests as re"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"cell_type": "code",
|
|
68
|
+
"execution_count": 2,
|
|
69
|
+
"metadata": {},
|
|
70
|
+
"outputs": [
|
|
71
|
+
{
|
|
72
|
+
"name": "stdout",
|
|
73
|
+
"output_type": "stream",
|
|
74
|
+
"text": [
|
|
75
|
+
"551e86307dfaddeb02f0326ec1667eac3257817b41ae8916531a06fbcdf9148c\n"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"data": {
|
|
80
|
+
"text/plain": [
|
|
81
|
+
"(['her', 'number', 'it', 'at'],\n",
|
|
82
|
+
" ['0654', '1523', '2307', '5890'],\n",
|
|
83
|
+
" ['@(#$¨@#¨$@¨$$¨@(#$)', '$#$¨@*#$¨$(@#)', '@#$%^&*()_', ')@#$%^&*('])"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"execution_count": 2,
|
|
87
|
+
"metadata": {},
|
|
88
|
+
"output_type": "execute_result"
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"source": [
|
|
92
|
+
"key = '9e8b3f4bf92577861e06e3bc84a809794dd6a7ab9da1070a78eb763b3399595a'\n",
|
|
93
|
+
"secret = 'a239c12ecc42911ecbc3b23a9539976caaa60f7d40028dea17cb67cc538c21bd'\n",
|
|
94
|
+
"\n",
|
|
95
|
+
"headers = {\n",
|
|
96
|
+
" 'X-Api-Key': key,\n",
|
|
97
|
+
" 'X-Api-Secret': secret,\n",
|
|
98
|
+
"}\n",
|
|
99
|
+
"\n",
|
|
100
|
+
"\n",
|
|
101
|
+
"transactions = re.get('http://localhost/api/v1/tr_to_mine', headers=headers)\n",
|
|
102
|
+
"\n",
|
|
103
|
+
"transactions = str(transactions.json())\n",
|
|
104
|
+
"\n",
|
|
105
|
+
"transactions_hash = hashlib.sha256(transactions.encode('utf-8')).hexdigest()\n",
|
|
106
|
+
"\n",
|
|
107
|
+
"print(transactions_hash)\n",
|
|
108
|
+
"\n",
|
|
109
|
+
"accepted_sequences = re.get('http://localhost/api/v1/info_to_mine', headers=headers)\n",
|
|
110
|
+
"\n",
|
|
111
|
+
"accepted_sequences = accepted_sequences.json()\n",
|
|
112
|
+
"\n",
|
|
113
|
+
"accepted_sequences\n",
|
|
114
|
+
"\n",
|
|
115
|
+
"def parse_accepted_sequences(accepted_sequences):\n",
|
|
116
|
+
" words = accepted_sequences['words']\n",
|
|
117
|
+
" numbers = accepted_sequences['number_sequences']\n",
|
|
118
|
+
" symbols = accepted_sequences['symbol_sequences']\n",
|
|
119
|
+
" return words, numbers, symbols\n",
|
|
120
|
+
"\n",
|
|
121
|
+
"words, numbers, symbols = parse_accepted_sequences(accepted_sequences)\n",
|
|
122
|
+
"\n",
|
|
123
|
+
"words, numbers, symbols"
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"cell_type": "code",
|
|
128
|
+
"execution_count": 3,
|
|
129
|
+
"metadata": {},
|
|
130
|
+
"outputs": [],
|
|
131
|
+
"source": [
|
|
132
|
+
"def all_combinations(acceptable_words, acceptable_number_sequences, acceptables_symbol_sequences):\n",
|
|
133
|
+
" combinations = []\n",
|
|
134
|
+
" for comb in itertools.product(acceptable_words, acceptable_number_sequences, acceptables_symbol_sequences):\n",
|
|
135
|
+
" combinations.append(''.join(comb))\n",
|
|
136
|
+
" return combinations\n",
|
|
137
|
+
"\n",
|
|
138
|
+
"def hash_combinations(combinations, transactions_hash, run_on=0):\n",
|
|
139
|
+
" hash_list = []\n",
|
|
140
|
+
" counter = 0\n",
|
|
141
|
+
" for combination in combinations:\n",
|
|
142
|
+
" for comb in itertools.permutations(combination):\n",
|
|
143
|
+
" counter += 1\n",
|
|
144
|
+
" if counter > run_on:\n",
|
|
145
|
+
" random_hash = hashlib.sha256(''.join(comb).encode('utf-8')).hexdigest()\n",
|
|
146
|
+
" hash_list.append(hashlib.sha256((transactions_hash + random_hash).encode('utf-8')).hexdigest())\n",
|
|
147
|
+
" if len(hash_list) == 1000000:\n",
|
|
148
|
+
" return hash_list"
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"cell_type": "code",
|
|
153
|
+
"execution_count": 4,
|
|
154
|
+
"metadata": {},
|
|
155
|
+
"outputs": [],
|
|
156
|
+
"source": [
|
|
157
|
+
"def calculate_hash_rate(acceptable_w, acceptable_n, acceptables_s, transactions_hash, run_on=0):\n",
|
|
158
|
+
" start = datetime.datetime.now()\n",
|
|
159
|
+
" all_combs = all_combinations(acceptable_w, acceptable_n, acceptables_s)\n",
|
|
160
|
+
" hash_list = hash_combinations(all_combs, transactions_hash)\n",
|
|
161
|
+
" end = datetime.datetime.now()\n",
|
|
162
|
+
" total_seconds = (end - start).total_seconds()\n",
|
|
163
|
+
" hash_rate = len(hash_list) / total_seconds\n",
|
|
164
|
+
" return hash_rate, start, end, total_seconds, hash_list\n",
|
|
165
|
+
"\n",
|
|
166
|
+
"def benchmark_table(hash_rate, start, end, total_seconds, hash_list):\n",
|
|
167
|
+
" hash_list_table = pd.DataFrame({\n",
|
|
168
|
+
" 'hash': hash_list,\n",
|
|
169
|
+
" })\n",
|
|
170
|
+
" hash_rate_table = pd.DataFrame({\n",
|
|
171
|
+
" 'Hash rate': [hash_rate, hash_rate / 1000, hash_rate / 1000000, hash_rate / 1000000000],\n",
|
|
172
|
+
" 'Unit': ['h/s', 'kh/s', 'Mh/s', 'Gh/s']\n",
|
|
173
|
+
" })\n",
|
|
174
|
+
" time_table = pd.DataFrame({\n",
|
|
175
|
+
" 'Time': [start, end, total_seconds],\n",
|
|
176
|
+
" 'Unit': ['start', 'end', 'total_seconds'],\n",
|
|
177
|
+
" })\n",
|
|
178
|
+
" return hash_rate_table, time_table, hash_list_table"
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"cell_type": "code",
|
|
183
|
+
"execution_count": null,
|
|
184
|
+
"metadata": {},
|
|
185
|
+
"outputs": [],
|
|
186
|
+
"source": [
|
|
187
|
+
"hash_rate, start, end, total_seconds, hash_list = calculate_hash_rate(words, numbers, symbols, transactions_hash)\n",
|
|
188
|
+
"hash_rate_table, time_table, hash_list_table = benchmark_table(hash_rate, start, end, total_seconds, hash_list)"
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"cell_type": "code",
|
|
193
|
+
"execution_count": null,
|
|
194
|
+
"metadata": {},
|
|
195
|
+
"outputs": [],
|
|
196
|
+
"source": [
|
|
197
|
+
"hash_list_table"
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"cell_type": "code",
|
|
202
|
+
"execution_count": null,
|
|
203
|
+
"metadata": {},
|
|
204
|
+
"outputs": [],
|
|
205
|
+
"source": [
|
|
206
|
+
"time_table"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"cell_type": "code",
|
|
211
|
+
"execution_count": null,
|
|
212
|
+
"metadata": {},
|
|
213
|
+
"outputs": [],
|
|
214
|
+
"source": [
|
|
215
|
+
"hash_rate_table"
|
|
216
|
+
]
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"cell_type": "code",
|
|
220
|
+
"execution_count": null,
|
|
221
|
+
"metadata": {},
|
|
222
|
+
"outputs": [],
|
|
223
|
+
"source": [
|
|
224
|
+
"def plot_hash_rate(hash_rate_table):\n",
|
|
225
|
+
" hash_rate_table.plot(x='Unit', y='Hash rate', kind='bar', logy=True)\n",
|
|
226
|
+
" plt.show()\n",
|
|
227
|
+
"\n",
|
|
228
|
+
"plot_hash_rate(hash_rate_table)"
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"cell_type": "code",
|
|
233
|
+
"execution_count": 10,
|
|
234
|
+
"metadata": {},
|
|
235
|
+
"outputs": [
|
|
236
|
+
{
|
|
237
|
+
"data": {
|
|
238
|
+
"text/plain": [
|
|
239
|
+
"{'message': 'Contract assigned'}"
|
|
240
|
+
]
|
|
241
|
+
},
|
|
242
|
+
"execution_count": 10,
|
|
243
|
+
"metadata": {},
|
|
244
|
+
"output_type": "execute_result"
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
"source": [
|
|
248
|
+
"hash_to_send = '99893b819abfa80498f244fddd080f570cecdc994199d5c6a8148141401cdff1'\n",
|
|
249
|
+
"\n",
|
|
250
|
+
"params = { 'user_confirmation_hash' : hash_to_send }\n",
|
|
251
|
+
"confirm_request = re.post('http://localhost/api/v1/confirm_block', headers=headers, params=params)\n",
|
|
252
|
+
"\n",
|
|
253
|
+
"confirm_request.json()"
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
],
|
|
257
|
+
"metadata": {
|
|
258
|
+
"kernelspec": {
|
|
259
|
+
"display_name": "Python 3.9.2 64-bit",
|
|
260
|
+
"language": "python",
|
|
261
|
+
"name": "python3"
|
|
262
|
+
},
|
|
263
|
+
"language_info": {
|
|
264
|
+
"codemirror_mode": {
|
|
265
|
+
"name": "ipython",
|
|
266
|
+
"version": 3
|
|
267
|
+
},
|
|
268
|
+
"file_extension": ".py",
|
|
269
|
+
"mimetype": "text/x-python",
|
|
270
|
+
"name": "python",
|
|
271
|
+
"nbconvert_exporter": "python",
|
|
272
|
+
"pygments_lexer": "ipython3",
|
|
273
|
+
"version": "3.9.2"
|
|
274
|
+
},
|
|
275
|
+
"orig_nbformat": 4,
|
|
276
|
+
"vscode": {
|
|
277
|
+
"interpreter": {
|
|
278
|
+
"hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1"
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
"nbformat": 4,
|
|
283
|
+
"nbformat_minor": 2
|
|
284
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "lib/outerspace/blockchain/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = "outerspace-blockchain"
|
|
7
|
+
spec.version = Outerspace::Blockchain::VERSION
|
|
8
|
+
spec.authors = ["JesusGautamah"]
|
|
9
|
+
spec.email = ["lima.jesuscc@gmail.com"]
|
|
10
|
+
|
|
11
|
+
spec.summary = "Blockchain implementation in Ruby"
|
|
12
|
+
spec.description = "Blockchain implementation in Ruby using Rails and Docker"
|
|
13
|
+
spec.homepage = "https://outerspace-blockchain.herokuapp.com/"
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
spec.required_ruby_version = ">= 3.0.3"
|
|
16
|
+
|
|
17
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
18
|
+
|
|
19
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
20
|
+
spec.metadata["source_code_uri"] = "https://github.com/outerspace-coding/outerspace-blockchain"
|
|
21
|
+
spec.metadata["changelog_uri"] = "https://github.com/outerspace-coding/outerspace-blockchain/blob/main/CHANGELOG.md"
|
|
22
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
23
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
|
24
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
spec.bindir = "bin"
|
|
28
|
+
spec.executables = spec.files.grep(%r{\Abin/}) { |f| File.basename(f) }
|
|
29
|
+
spec.require_paths = ["lib"]
|
|
30
|
+
spec.add_runtime_dependency "bundler", "~> 2.2"
|
|
31
|
+
spec.add_runtime_dependency "rails", "~> 7.0.4"
|
|
32
|
+
spec.add_runtime_dependency "pg", "~> 1.4"
|
|
33
|
+
spec.add_runtime_dependency "puma", "~> 5.0"
|
|
34
|
+
spec.add_runtime_dependency "importmap-rails", "~> 1.1"
|
|
35
|
+
spec.add_runtime_dependency "tailwindcss-rails", "~> 2.0"
|
|
36
|
+
spec.add_runtime_dependency "rubocop-rails", "~> 2.16"
|
|
37
|
+
spec.add_runtime_dependency "rubocop-rspec", "~> 2.13"
|
|
38
|
+
spec.add_runtime_dependency "sidekiq", "~> 6.5"
|
|
39
|
+
spec.add_runtime_dependency "devise", "~> 4.8"
|
|
40
|
+
spec.add_runtime_dependency "rspec-rails", "~> 6.0"
|
|
41
|
+
spec.add_runtime_dependency "factory_bot_rails", "~> 6.2"
|
|
42
|
+
spec.add_runtime_dependency "faker", "~> 2.23"
|
|
43
|
+
spec.add_runtime_dependency "simplecov", "~> 0.21"
|
|
44
|
+
spec.add_runtime_dependency "selenium-webdriver", "~> 4.5"
|
|
45
|
+
spec.add_runtime_dependency "sprockets-rails", "~> 3.4"
|
|
46
|
+
spec.add_runtime_dependency "webdrivers", "~> 5.2"
|
|
47
|
+
spec.add_runtime_dependency "turbo-rails", "~> 1.3"
|
|
48
|
+
spec.add_runtime_dependency "stimulus-rails", "~> 1.1"
|
|
49
|
+
spec.add_runtime_dependency "jbuilder", "~> 2.11"
|
|
50
|
+
end
|