@@ -1,153 +1,99 @@
#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
# 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
#import hashlib as hasher
require "rubygems"
require "digest"
# import hashlib as hasher
# class Block:
# def __init__(self, index, timestamp, data, previous_hash):
# self.index = index
# self.timestamp = timestamp
# self.data = data
# self.previous_hash = previous_hash
# self.hash = self.hash_block()
# def hash_block(self):
# sha = hasher.sha256()
# sha.update(str(self.index) +
# str(self.timestamp) +
# str(self.data) +
# str(self.previous_hash))
# return sha.hexdigest()
class Block
def initialize ( _index , _timestamp , _data , _previous_hash )
@index = _index
@timestamp = _timestamp
@data = _data
@previous_hash = _previous_hash
@hash = self . hash_block
end
def index
@index
end
def timestamp
@timestamp
end
require 'rubygems'
require 'digest'
def data
@data
end
def previous_hash
@previous_hash
end
class Block
def initialize ( index , timestamp , data , previous_hash )
@index = index
@timestamp = timestamp
@data = data
@previous_hash = previous_hash
@hash = hash_block
end
def hash
@hash
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
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():
# # Manually construct a block with
# # index zero and arbitrary previous hash
# return Block(0, date.datetime.now(), "Genesis Block", "0")
def create_genesis_block
Block . new ( 0 , Time . now . strftime ( " %Y-%m-%d %H:%M:%S.%6N" ) , " Genesis Block" , "0" )
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 = date.datetime.now()
# this_data = "Hey! I'm block " + str(this_index)
# this_hash = last_block.hash
# return Block(this_index, this_timestamp, this_data, this_hash)
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 )
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]
# 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
# How many blocks should we add to the chain
# after the genesis block
num_of_blocks_to_add = 20
# # Add blocks to the chain
# for i in range(0, num_of_blocks_to_add):
# block_to_add = next_block(previous_block)
# blockchain.append(block_to_add)
# previous_block = block_to_add
# # Tell everyone about it!
# print "Block #{} has been added to the blockchain!".format(block_to_add.index)
# print "Hash: {}\n".format(block_to_add.hash)
for i in 0 ..num_of_blocks_to_add
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 "
# 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
# chrisallick@DRO-1367 : ~/Desktop
# $ ruby blockchain.rb
# ➜ Desktop ruby blockchain.rb
# Block 1 has been added to blockchain!
# Hash: 33e4326c77b75f177b9a69150df66f9a830ba65875b046ff50f29f2982bbba77
# Hash: 3654a6a2ae55194b6a2b86930b76bc07c5c86f8ae300d091b8bedfb196ba95e9
# Block 2 has been added to blockchain!
# Hash: 823435427ebf4d44bd10b89c2ea49079a9930d065955f36dab26b38d1bc3bc2b
# Hash: 006318a8025ad978099364c9c6da08b37bf5976b85110ff9151c198c257aff92
# Block 3 has been added to blockchain!
# Hash: 59c88b788637d4a1695b8c2c2150e5199ddfcb75504474312b584ec2d57d3fbb
# Hash: fb6a20e87bf0f0bc5d76fc11836987d5dd021fe433432c8be55b44e5928a9cb5
# Block 4 has been added to blockchain!
# Hash: 49db4fd4a6a19ee6de952d62afff646f4a41fc17442e0b1144d7543dcc6b8180
# Hash: 02ddd158610542fa155eb04beba4277a2772cca9e18976a77a77a62ce2fa9b4d
# Block 5 has been added to blockchain!
# Hash: 7b1975a2012a67ba115c424e4d2967b6ab241c32ac3ab9fe30909537d5e4865b
# Hash: ed81b4655bf5295c516d927c475494e36d3d615588efa9d2699bfedd8878dc7d
# Block 6 has been added to blockchain!
# Hash: 815e182d53d344ecd964d2ba65dc3e5bb6be8bec8e0eb5f51215756109f4b777
# Hash: 5cf495522d07f72f31ff67cace3a7fbb0a59de76785f8de940eac6bb0c119b5d
# Block 7 has been added to blockchain!
# Hash: 41e5de47ee57d038197d7ecddba9e7a56233e74ac0b0a87d3e7605142b81e941
# Hash: 0bd656a8dc661a7ddced16feaf79116cab10f34a0897d0e3fde02b00057ba63d
# Block 8 has been added to blockchain!
# Hash: 55a6242e12cfec2a9f61962144a1801e162172f21400f8324e22f43143b9fd49
# Hash: 0b7b85dbfdbe8d63cbbe7259e7ac9f0b29c6785f20f41be3b0bce0a695c22598
# Block 9 has been added to blockchain!
# Hash: 33b5722748b860c4a26ce39de80885b26135f16497bdf438da5ffc004bc05a48
# Hash: 7dbfe171cc8a5e3ccd08a6e66ee359cef3b5fe19ae2ad5c43ad22f634788c897
# Block 10 has been added to blockchain!
# Hash: 1d28c921990cec1f4ade76e0385d7ab58d51561394d033ab07582793af1081b1
# Hash: 97eedf82a0ff9855cb631f23d60281533851d19866cf246cb6c26736f598372e
# Block 11 has been added to blockchain!
# Hash: dbff57b6c573595db7a8021e647b14af93d933e50a8f81ee8cb00c2d97bc0ffd
# Hash: ca7aec44cffd6706097755b85f28ff7967aaaa7413f06f2ee6eb91b1329ce88c
# Block 12 has been added to blockchain!
# Hash: c26a2d6c896c694e47f14f17c41ff9225bdd38bca55eb501513208c3ddef0a20
# Hash: c2a8214340658f627a33a47bb4288e21140a3f176305bff95ac90bd9b9ac4144
# Block 13 has been added to blockchain!
# Hash: 512a62acf2a3afc02b347b121ed386826fd991023b8e8d8aa53abbe2e56d16ea
# Hash: e16c04a312096f7a5f7a32ea5ecdb3094ef9952e609ebd5d6a16d4e46d4d0d24
# Block 14 has been added to blockchain!
# Hash: aeedc27ed62d9049a663dbdd8fd4b60a35063d24a07d2e46018f3188c031aaab
# Hash: 31108a7c6a7a6d2bd7dbb4fcdff2a0a1e484b387dc2aabd1be6198f236c918b1
# Block 15 has been added to blockchain!
# Hash: 02e731c32484443e6a202b319af618614241c2dccd4016f4956a6b7664e4ce16
# Hash: a308b514d31d2153f2f482fdd3866aa86ba60e9fb04d12f63c0fadf63d6b82cf
# Block 16 has been added to blockchain!
# Hash: 378be7c5f55884db86d2ad1bed51101ae17b64781c87fb46c8812a3884735e39
# Hash: 8f622622b56ec46240dd039b0eef59185a7bacf3181c8fd4bb242881be8ce164
# Block 17 has been added to blockchain!
# Hash: 378cfae4fdf2e7ee0b8d273425cedbcdd7c0fa726a8be413ddc69a125e870ff1
# Hash: d7fa5e654096741e5f67213db2bb125e6dc5b7b18cdc683642815b32b67edbf8
# Block 18 has been added to blockchain!
# Hash: 4546e7a36a2927d67cc22c827c835a261042d600e658e7dba55fb48726f3dd6a
# Hash: 8f34b6b81d2f226469e26e76f1159774a426e75d27c0c8b080a08ac50aaffe87
# Block 19 has been added to blockchain!
# Hash: 1d6f1962dba3d95f60f8ebbbc434eb5d1bbd455f41c4a780fcfb675fbd60b2b7
# Hash: e2f8d9bf4b8a14abd1e359e8e6a888d553bc55a78395a7dc68b6887cf97ae2e5
# Block 20 has been added to blockchain!
# Hash: 133266bac4bccd76a9f8d0f711f5f67710ce89cd3ab2c8b3739d51c44a6d1691
# Hash: 86aa169dc0b0acf4eee45a0d6c30b883a1f591e6d2dd530bafa1b80b14fc63eb
# Block 21 has been added to blockchain!
# Hash: 2e23d602ab68d4e6105d7c2103ddd9e3d3fc9a74a993fff0028c04f1129a6814
# Hash: f248f565f8b39da5a688a78e6b60f56e8ad29b01320443e05bb738a043925211