class Voucher::Validator
Public Class Methods
call(segments_file)
click to toggle source
# File lib/voucher/validator.rb, line 5 def self.call(segments_file) new(segments_file).call end
new(segments_file)
click to toggle source
# File lib/voucher/validator.rb, line 9 def initialize(segments_file) @segments_file = segments_file end
Public Instance Methods
call()
click to toggle source
# File lib/voucher/validator.rb, line 13 def call segments.each do |segment| raise InvalidSegment unless verify(segment) end true end
Private Instance Methods
contract()
click to toggle source
# File lib/voucher/validator.rb, line 32 def contract @contract ||= ChainContract.new( address: election.address, ethereum_url: Config.ethereum_url, abi: Config.chain_abi ) end
data()
click to toggle source
# File lib/voucher/validator.rb, line 48 def data @data ||= read_and_parse end
election()
click to toggle source
# File lib/voucher/validator.rb, line 40 def election @election ||= data[:election] end
read_and_parse()
click to toggle source
# File lib/voucher/validator.rb, line 52 def read_and_parse json = SegmentsReader.call(@segments_file) SegmentsParser.call(json) end
segments()
click to toggle source
# File lib/voucher/validator.rb, line 44 def segments @segments ||= data[:segments] end
verify(segment)
click to toggle source
# File lib/voucher/validator.rb, line 23 def verify(segment) Murky.verify( contract.winning_hash(election.attributes[:block_number], segment.shard), segment.siblings, segment.hash, digest: Hashtastic::EthereumSHA3 ) end