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