-
-
Save nontone/3372b4810c60313ac1c59cd32f23f4fc to your computer and use it in GitHub Desktop.
tiny blockchain in ruby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # https://medium.com/crypto-currently/lets-build-the-tiniest-blockchain-e70965a248b | |
| # http://ruby-for-beginners.rubymonstas.org/writing_classes/self.html | |
| # https://stackoverflow.com/questions/33768598/ruby-sha-256-hexidigest-values-are-different-from-what-python-generates | |
| require 'rubygems' | |
| require 'digest' | |
| class Block | |
| def initialize(index, timestamp, data, previous_hash) | |
| @index = index | |
| @timestamp = timestamp | |
| @data = data | |
| @previous_hash = previous_hash | |
| @hash = hash_block | |
| end | |
| attr_reader :index, :timestamp, :data, :previous_hash, :hash | |
| def hash_block | |
| sha = Digest::SHA256.new | |
| sha.update @index.to_s + @timestamp.to_s + @data.to_s + previous_hash.to_s | |
| sha.hexdigest | |
| end | |
| end | |
| def create_genesis_block | |
| Block.new(0, Time.now.strftime('%Y-%m-%d %H:%M:%S.%6N'), 'Genesis Block', '0') | |
| end | |
| def next_block(last_block) | |
| this_index = last_block.index + 1 | |
| this_timestamp = Time.now.strftime('%Y-%m-%d %H:%M:%S.%6N') | |
| this_data = "Hey! I'm a block" + this_index.to_s | |
| this_hash = last_block.hash | |
| Block.new(this_index, this_timestamp, this_data, this_hash) | |
| end | |
| # Create the blockchain and add the genesis block | |
| blockchain = [create_genesis_block] | |
| previous_block = blockchain[0] | |
| # How many blocks should we add to the chain | |
| # after the genesis block | |
| num_of_blocks_to_add = 20 | |
| # Add blocks to the chain | |
| (0..num_of_blocks_to_add).each do |_i| | |
| block_to_add = next_block(previous_block) | |
| blockchain.push block_to_add | |
| previous_block = block_to_add | |
| puts "Block #{block_to_add.index} has been added to blockchain!" | |
| puts "Hash: #{block_to_add.hash}\n" | |
| end | |
| # ➜ Desktop ruby blockchain.rb | |
| # Block 1 has been added to blockchain! | |
| # Hash: 3654a6a2ae55194b6a2b86930b76bc07c5c86f8ae300d091b8bedfb196ba95e9 | |
| # Block 2 has been added to blockchain! | |
| # Hash: 006318a8025ad978099364c9c6da08b37bf5976b85110ff9151c198c257aff92 | |
| # Block 3 has been added to blockchain! | |
| # Hash: fb6a20e87bf0f0bc5d76fc11836987d5dd021fe433432c8be55b44e5928a9cb5 | |
| # Block 4 has been added to blockchain! | |
| # Hash: 02ddd158610542fa155eb04beba4277a2772cca9e18976a77a77a62ce2fa9b4d | |
| # Block 5 has been added to blockchain! | |
| # Hash: ed81b4655bf5295c516d927c475494e36d3d615588efa9d2699bfedd8878dc7d | |
| # Block 6 has been added to blockchain! | |
| # Hash: 5cf495522d07f72f31ff67cace3a7fbb0a59de76785f8de940eac6bb0c119b5d | |
| # Block 7 has been added to blockchain! | |
| # Hash: 0bd656a8dc661a7ddced16feaf79116cab10f34a0897d0e3fde02b00057ba63d | |
| # Block 8 has been added to blockchain! | |
| # Hash: 0b7b85dbfdbe8d63cbbe7259e7ac9f0b29c6785f20f41be3b0bce0a695c22598 | |
| # Block 9 has been added to blockchain! | |
| # Hash: 7dbfe171cc8a5e3ccd08a6e66ee359cef3b5fe19ae2ad5c43ad22f634788c897 | |
| # Block 10 has been added to blockchain! | |
| # Hash: 97eedf82a0ff9855cb631f23d60281533851d19866cf246cb6c26736f598372e | |
| # Block 11 has been added to blockchain! | |
| # Hash: ca7aec44cffd6706097755b85f28ff7967aaaa7413f06f2ee6eb91b1329ce88c | |
| # Block 12 has been added to blockchain! | |
| # Hash: c2a8214340658f627a33a47bb4288e21140a3f176305bff95ac90bd9b9ac4144 | |
| # Block 13 has been added to blockchain! | |
| # Hash: e16c04a312096f7a5f7a32ea5ecdb3094ef9952e609ebd5d6a16d4e46d4d0d24 | |
| # Block 14 has been added to blockchain! | |
| # Hash: 31108a7c6a7a6d2bd7dbb4fcdff2a0a1e484b387dc2aabd1be6198f236c918b1 | |
| # Block 15 has been added to blockchain! | |
| # Hash: a308b514d31d2153f2f482fdd3866aa86ba60e9fb04d12f63c0fadf63d6b82cf | |
| # Block 16 has been added to blockchain! | |
| # Hash: 8f622622b56ec46240dd039b0eef59185a7bacf3181c8fd4bb242881be8ce164 | |
| # Block 17 has been added to blockchain! | |
| # Hash: d7fa5e654096741e5f67213db2bb125e6dc5b7b18cdc683642815b32b67edbf8 | |
| # Block 18 has been added to blockchain! | |
| # Hash: 8f34b6b81d2f226469e26e76f1159774a426e75d27c0c8b080a08ac50aaffe87 | |
| # Block 19 has been added to blockchain! | |
| # Hash: e2f8d9bf4b8a14abd1e359e8e6a888d553bc55a78395a7dc68b6887cf97ae2e5 | |
| # Block 20 has been added to blockchain! | |
| # Hash: 86aa169dc0b0acf4eee45a0d6c30b883a1f591e6d2dd530bafa1b80b14fc63eb | |
| # Block 21 has been added to blockchain! | |
| # Hash: f248f565f8b39da5a688a78e6b60f56e8ad29b01320443e05bb738a043925211 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment