Sha256: 3da6847654e8028a3923378106b1d0fe85cd8da3a1816521f8dbc917991e7590

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 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(election.attributes[:block_number], segment.shard),
        segment.siblings,
        segment.hash,
        digest: Hashtastic::EthereumSHA3
      )
    end

    def contract
      @contract ||= ChainContract.new(
        address: election.address,
        ethereum_url: Config.ethereum_url,
        abi: Config.chain_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

1 entries across 1 versions & 1 rubygems

Version Path
voucher-0.3.0 lib/voucher/validator.rb