Sha256: 3aa7c2fea9e494852d223526d2e72757925d4e304dac7cdebac2b401d34091b0

Contents?: true

Size: 1.03 KB

Versions: 3

Compression:

Stored size: 1.03 KB

Contents

# frozen_string_literal: true

module Voucher
  class Validator
    def self.call(segments_file)
      new(segments_file).call
    end

    def initialize(segments_file)
      @segments_file = segments_file
    end

    def call
      segments.each do |segment|
        raise InvalidSegment unless verify(segment)
      end

      true
    end

    private

    def verify(segment)
      Murky.verify(
        contract.winning_hash(segment.shard),
        segment.siblings,
        segment.hash,
        digest: Hashtastic::EthereumSHA3
      )
    end

    def contract
      @contract ||= ElectionContract.new(
        address: election.address,
        ethereum_url: Voucher.config.ethereum_url,
        abi: Voucher.config.election_abi
      )
    end

    def election
      @election ||= data[:election]
    end

    def segments
      @segments ||= data[:segments]
    end

    def data
      @data ||= read_and_parse
    end

    def read_and_parse
      json = SegmentsReader.call(@segments_file)

      SegmentsParser.call(json)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
voucher-0.2.1 lib/voucher/validator.rb
voucher-0.1.1 lib/voucher/validator.rb
voucher-0.1.0 lib/voucher/validator.rb