// ethash: C/C++ implementation of Ethash, the Ethereum Proof of Work algorithm. // Copyright 2018 Pawel Bylica. // Licensed under the Apache License, Version 2.0. See the LICENSE file. /// @file /// /// ProgPoW API /// /// This file provides the public API for ProgPoW as the Ethash API extension. #include namespace progpow { using namespace ethash; // Include ethash namespace. /// The ProgPoW algorithm revision implemented as specified in the spec /// https://github.com/ifdefelse/ProgPOW#change-history. constexpr auto revision = "0.9.2"; constexpr int period_length = 50; constexpr uint32_t num_regs = 32; constexpr size_t num_lanes = 16; constexpr int num_cache_accesses = 12; constexpr int num_math_operations = 20; constexpr size_t l1_cache_size = 16 * 1024; constexpr size_t l1_cache_num_items = l1_cache_size / sizeof(uint32_t); result hash(const epoch_context& context, int block_number, const hash256& header_hash, uint64_t nonce) noexcept; result hash(const epoch_context_full& context, int block_number, const hash256& header_hash, uint64_t nonce) noexcept; bool verify(const epoch_context& context, int block_number, const hash256& header_hash, const hash256& mix_hash, uint64_t nonce, const hash256& boundary) noexcept; search_result search_light(const epoch_context& context, int block_number, const hash256& header_hash, const hash256& boundary, uint64_t start_nonce, size_t iterations) noexcept; search_result search(const epoch_context_full& context, int block_number, const hash256& header_hash, const hash256& boundary, uint64_t start_nonce, size_t iterations) noexcept; } // namespace progpow