class Ethereum::EthashRuby::Cache
Public Class Methods
new(block_number)
click to toggle source
# File lib/ethereum/ethash_ruby/cache.rb, line 10 def initialize(block_number) @block_number = block_number end
Public Instance Methods
seed()
click to toggle source
# File lib/ethereum/ethash_ruby/cache.rb, line 31 def seed @seed ||= self.class.get_seed(@block_number) end
size()
click to toggle source
# File lib/ethereum/ethash_ruby/cache.rb, line 35 def size sz = CACHE_BYTES_INIT + CACHE_BYTES_GROWTH * (@block_number / EPOCH_LENGTH) sz -= HASH_BYTES sz -= 2 * HASH_BYTES while !Prime.prime?(sz / HASH_BYTES) sz end
to_a()
click to toggle source
# File lib/ethereum/ethash_ruby/cache.rb, line 14 def to_a n = size / HASH_BYTES o = [keccak512(seed)] (1...n).each {|i| o.push keccak512(o.last) } CACHE_ROUNDS.times do n.times do |i| v = o[i][0] % n xor = o[(i-1+n) % n].zip(o[v]).map {|(a,b)| a^b } o[i] = keccak512 xor end end o end